SID与Oracle tnsnames.ora中的服务名称有何不同


Answers:


156

引用@DAC

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

并非完全正确。SID = INSTANCE的唯一名称(例如,计算机上运行的oracle进程)。Oracle将“数据库”视为文件。

服务名称=实例(或许多实例)的别名。这样做的主要目的是,如果您正在运行集群,则客户端可以说“将我连接到SALES.acme.com”,DBA可以即时更改可用于SALES.acme.com请求的实例数,甚至将SALES.acme.com移至完全不同的数据库中,而客户端无需更改任何设置。


1
所以,在你的榜样,有可能是小岛屿发展中国家Sales1Sales2以及Sales3,所有这些都可以通过服务名称可用Sales

1
我认为情况恰恰相反:您拥有一个可以与许多服务一起使用的SID。然后,您可以使用其中一项服务,并将其指向其他SID /数据库。
Colin Nicholls 2015年

我们可以将Oracle SID名称与TNS名称相同吗?有问题吗?
user2441441 2015年

2
@ user2441441:按照马修给出的解释,我认为您的假设是正确的,因为可以有多个SID,并且一旦Service提取了所有SID
Dwarak

26

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

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

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

SERVICE_NAME是oracle 8i以后的新功能,在该功能中数据库可以向侦听器注册自己。如果以这种方式向侦听器注册了数据库,则可以在tnsnames.ora中使用SERVICE_NAME参数,否则-在tnsnames.ora中使用SID。

另外,如果您具有OPS(RAC),则每个实例的名称也将不同。

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

SERVICE_NAMES = sales.acme.com,widgetsales.acme.com

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

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

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


我糊涂了。在RAC中,不是每个实例都有不同的“ INSTANCE_NAME”吗?一个SERVICE_NAME可能与多个实例相关联?
伊万·

21

我知道这很古老,但是在处理复杂的工具,用途,用户或症状时: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网络特性时可能会有所帮助。


6

什么是SID和服务名称

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

如果将来无法访问上述链接,在编写此答案时,以上链接会将您定向到“数据库Net Services管理员指南”的“连接概念”一章中的“数据库服务和数据库实例标识”主题。 。该指南由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


0

根据Oracle词汇表:

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.