SID 与 Oracle tnsnames.ora 中的服务名称有何不同
-
09-06-2019 - |
题
为什么我需要其中两个?当我必须使用其中一种或另一种时?
解决方案
@DAC
简而言之:sid =您的数据库的唯一名称,serviceName =连接时使用的别名
严格来说不是真的..SID = INSTANCE 的唯一名称(例如机器上运行的 oracle 进程)。Oracle 将“数据库”视为文件。
服务名称 = 一个实例(或多个实例)的别名。这样做的主要目的是,如果您正在运行集群,客户端可以说“将我连接到 SALES.acme.com”,DBA 可以即时更改可用于 SALES.acme.com 请求的实例数量,甚至将 SALES.acme.com 移动到完全不同的数据库,而客户端无需更改任何设置。
其他提示
请参见: http://www.sap-img.com/oracle-database/finding-oracle-sid-of-a-database.htm
Oracle SIDS和Oracle服务名称之间有什么区别。一个配置工具寻找服务名称,然后下一个SIDS来寻找!这是怎么回事?!
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并行服务器环境中,您必须为每个实例设置此参数。
简而言之:SID = 数据库实例的唯一名称,ServiceName = 连接时使用的别名
我知道这很古老,但是在处理挑剔的工具、用途、用户或症状时: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 网络的一些不太清晰的特性时会很有帮助。
什么是 SID 和服务名称
请查看 oracle 的文档: https://docs.oracle.com/cd/B19306_01/network.102/b14212/concepts.htm
如果将来无法访问上述链接,在撰写此答案时,上述链接将引导您访问“数据库网络服务管理员指南”的连接概念章节中的“数据库服务和数据库实例标识”主题。本指南由 oracle 作为“Oracle 数据库在线文档,10g 第 2 版 (10.2)”的一部分发布
当我必须使用其中一种或另一种时?为什么我需要其中两个?
考虑 RAC 环境中的以下映射,
SID SERVICE_NAME
鲍勃1 鲍勃
鲍勃2 鲍勃
鲍勃3 鲍勃
鲍勃4 鲍勃
如果配置了负载平衡,侦听器将在所有四个 SID 之间“平衡”工作负载。即使配置了负载平衡,如果您愿意,也可以使用 SID 而不是 SERVICE_NAME 始终连接到 bob1。
根据 Oracle 术语表:
SID 是 Oracle 数据库实例的唯一名称。--->要在Oracle数据库之间切换,用户必须指定所需的SID <---。SID包含在tnsnames.ora文件中的连接描述符的连接数据部分中,以及在listerer.ora文件中的网络侦听器的定义中。也称为系统 ID。Oracle服务名称可能是“ MyoracleServiceorcl”的描述性。在Windows中,您可以在Windows服务下作为服务运行的服务名称。
您应该在 TNSNAMES.ORA 中使用 SID 作为更好的方法。