2

英语不是我的母语请理解

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

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

但是SID?顺利通过

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

4

1 回答 1

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.oraand listener.ora。AFAIK,从 12c 开始,Oracle 仅使用service_name,因为它很灵活并且具有多对多关系。如果我发现它不正确,我将从文档中交叉验证。

于 2014-09-21T15:23:14.283 回答