190

为什么我需要其中两个?当我必须使用一个或另一个?

4

5 回答 5

163

@DAC 引用

简而言之:SID = 您的数据库的唯一名称,ServiceName = 连接时使用的别名

不完全正确。SID = 实例的唯一名称(例如机器上运行的 oracle 进程)。Oracle 认为“数据库”是文件。

服务名称 = 一个实例(或许多实例)的别名。这样做的主要目的是,如果您正在运行一个集群,客户端可以说“将我连接到SALES.acme.com”,DBA 可以动态更改可用于SALES.acme.com请求的实例数量,甚至SALES.acme.com可以在没有客户需要更改任何设置。

于 2008-09-04T14:39:55.250 回答
28

请参阅: http: //www.sap-img.com/oracle-database/finding-oracle-sid-of-a-database.htm

Oracle SID 和 Oracle SERVICE NAMES 之间有什么区别。一个配置工具查找 SERVICE NAME,然后下一个查找 SID!这是怎么回事?!

Oracle SID 是唯一标识您的实例/数据库的唯一名称,其中服务名称是您在远程连接到数据库时提供的 TNS 别名,此服务名称记录在客户端上的 Tnsnames.ora 文件中,它可以是与 SID 相同,您也可以为其指定任何其他名称。

SERVICE_NAME 是从 oracle 8i 开始的新功能,其中数据库可以向侦听器注册自身。如果数据库以这种方式注册到侦听器,那么您可以在 tnsnames.ora 中使用 SERVICE_NAME 参数,否则 - 在 tnsnames.ora 中使用 SID。

此外,如果您有 OPS (RAC),则每个实例都有不同的 SERVICE_NAME。

SERVICE_NAMES 为该实例连接的数据库服务指定一个或多个名称。您可以指定多个服务名称,以区分同一数据库的不同用途。例如:

SERVICE_NAMES = sales.acme.com、widgetsales.acme.com

您还可以使用服务名称来标识通过使用复制可从两个不同数据库中获得的单个服务。

在 Oracle Parallel Server 环境中,您必须为每个实例设置此参数。

简而言之:SID = 您的数据库实例的唯一名称,ServiceName = 连接时使用的别名

于 2008-09-04T14:34:02.770 回答
23

我知道这很古老,但是在处理挑剔的工具、用途、用户或症状时:sid 和服务命名可以为您的 tnsnames 条目添加一些弹性,如下所示:

mySID, mySID.whereever.com =
(DESCRIPTION =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = myHostname)(PORT = 1521))
  )
  (CONNECT_DATA =
    (SERVICE_NAME = mySID.whereever.com)
    (SID = mySID)
    (SERVER = DEDICATED)
  )
)

我只是想我会把它留在这里,因为它与这个问题有轻微的相关性,并且在尝试编织一些不太清楚的 Oracle 网络特性时会很有帮助。

于 2015-05-19T13:36:09.267 回答
7

什么是 SID 和服务名称

请在https://docs.oracle.com/cd/B19306_01/network.102/b14212/concepts.htm查看 oracle 的文档

如果以后无法访问上述链接,在撰写此答案时,上述链接将引导您到“数据库网络服务管理员指南”的连接概念章节中的“数据库服务和数据库实例识别”主题. 本指南由 oracle 作为“Oracle 数据库在线文档,10g 第 2 版 (10.2)”的一部分发布

当我必须使用一个或另一个?为什么我需要其中两个?

考虑以下在 RAC 环境中的映射,

SID SERVICE_NAME
bob1 bob
bob2 bob
bob3 bob
bob4 bob

如果配置了负载平衡,侦听器将在所有四个 SID 上“平衡”工作负载。即使配置了负载平衡,如果您想使用 SID 而不是 SERVICE_NAME,您也可以一直连接到 bob1。

请参考,https://community.oracle.com/thread/4049517

于 2018-01-09T12:31:22.300 回答
1

根据 Oracle 词汇表:

SID 是 Oracle 数据库实例的唯一名称。---> 要在 Oracle 数据库之间切换,用户必须指定所需的 SID <---。SID 包含在 TNSNAMES.ORA 文件中连接描述符的 CONNECT DATA 部分中,以及 LISTENER.ORA 文件中网络侦听器的定义中。也称为系统 ID。Oracle 服务名称可以是任何描述性的名称,例如“MyOracleServiceORCL”。在 Windows 中,您可以将您的服务名称作为 Windows 服务下的服务运行。

您应该在 TNSNAMES.ORA 中使用 SID 作为更好的方法。

于 2010-04-16T13:04:27.390 回答