使用 Oracle SQLDeveloper 时 SID 和服务名称有什么区别?

Ver*_*ert 2 oracle sid service-name

英语不是我的母语请理解

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

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

但是SID?顺利通过

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

Lal*_*r B 5

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 中提出了类似的问题,SID 与 Oracle tnsnames.ora 中的服务名称有何不同

在您的测试环境中,使用tnsnames.oralistener.ora。AFAIK,从 12c 开始,Oracle 仅使用service_name,因为它很灵活并且具有多对多关系。如果我发现它不正确,我将根据文档进行交叉验证。