使用Oracle SQLDeveloper时SID和服务名称有何不同?

时间:2014-09-21 12:15:11

标签: oracle sid service-name

英语不是我的母语请理解

当我尝试通过sqldeveloper(窗口)将系统/密码作为sysdba登录到oracle(linux)时

通过服务名称失败并返回ORA-0131:权限不足

但是SID?顺利通过

有什么区别?以及如何连接服务名称?

1 个答案:

答案 0 :(得分:3)

Thomas Kyte诠释了这种差异:

  

服务名称比SID更灵活。

     

数据库可以使用一个或多个服务名称向侦听器动态注册。实际上,多个数据库可以使用相同的服务名称向侦听器注册(考虑一个群集环境,其中您有多个实例,这些实例都是相同的数据库)。

     

另一方面,数据库只有一个SID。并且单个SID转到单个数据库。这是一种纯粹的1:1关系。

     

服务是多对多的关系。

服务名称与动态注册一起使用 - 数据在启动后向侦听器注册。一旦它这样做,你可以连接。

使用SID - 更像是告诉听众"我希望您连接到这个特定的数据库,我知道地址',在这里你去"

使用SERVICE - 您要求听众让您联系可以为您的请求提供服务的数据库,即使用该服务注册的数据库。

此处提供更多信息,https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1508737000346067364

6年前Stack Overflow中提出了类似的问题,How SID is different from Service name in Oracle tnsnames.ora

在您的测试环境中,使用tnsnames.oralistener.ora。 AFAIK,来自12c,Oracle仅使用service_name,因为它灵活且具有多对多的关系。如果发现错误,我将从文档中进行交叉验证。