为什么我需要两个?当我不得不使用一个或另一个?
答案 0 :(得分:141)
@DAC
简而言之:SID =唯一的名称 您的DB,ServiceName =使用的别名 连接时
不严格为真.. SID = INSTANCE的唯一名称(例如在机器上运行的oracle进程)。 Oracle认为“数据库”是文件。
服务名称= INSTANCE(或许多实例)的别名。这样做的主要目的是,如果您正在运行集群,客户端可以说“将我连接到SALES.acme.com”,DBA可以随时更改SALES.acme.com请求可用的实例数,甚至将SALES.acme.com移动到完全不同的数据库,而客户端无需更改任何设置。
答案 1 :(得分:26)
请参阅:http://www.sap-img.com/oracle-database/finding-oracle-sid-of-a-database.htm
Oracle之间有什么区别 SID和Oracle服务名称。一 配置工具查找服务名称和 然后下一个寻找SID!什么是 继续?!
Oracle SID是唯一的名称 唯一标识你的 实例/数据库作为服务 name是您提供的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 =连接时使用的别名
答案 2 :(得分:16)
我知道这很古老,但在处理挑剔的工具,用途,用户或症状时:sid&服务命名可以为你的tnsnames条目添加一点flex,如:
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网络特性时会有所帮助。
答案 3 :(得分:5)
什么是SID和服务名称
请在https://docs.oracle.com/cd/B19306_01/network.102/b14212/concepts.htm
查看oracle的文档当我必须使用一个或另一个?为什么我需要其中两个?
在RAC环境中考虑以下映射,
SID SERVICE_NAME
bob1 bob
bob2 bob
bob3 bob
bob4 bob
如果配置了负载平衡,则侦听器将“平衡”所有四个SID上的工作负载。即使配置了负载平衡,如果您希望使用SID而不是SERVICE_NAME,也可以随时连接到bob1。
答案 4 :(得分:0)
根据Oracle词汇表:
SID是Oracle数据库实例的唯一名称。 --->换成 在Oracle数据库之间,用户必须指定所需的SID< ---。该 SID包含在连接描述符的CONNECT DATA部分中 在TNSNAMES.ORA文件中,以及在网络侦听器的定义中 在LISTENER.ORA文件中。也称为系统ID。 Oracle服务名称 可能是任何描述性的,如“MyOracleServiceORCL”。在Windows中 您可以在Windows服务下将服务名称作为服务运行。
您应该在TNSNAMES.ORA中使用SID作为更好的方法。