2014-09-21 313 views
1

英语不是我的母语,请理解使用Oracle SQLDeveloper时,SID和服务名称有什么不同?

当我尝试登录像通过的SQLDeveloper系统/密码SYSDBA到Oracle(Linux版)(窗口)

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

但SID?成功通过

有什么分歧?以及如何连接服务名称?

+0

不知道你在问什么。请显示您尝试执行的命令等。 – OldProgrammer 2014-09-21 13:19:02

+0

我的Oracle数据库版本是什么? – 2014-09-21 15:15:13

+0

默认情况下,sysdba角色未被授予“系统”帐户。当你指定'SID'(客户端和服务器在同一台计算机上)并连接成'sysdba'时,你将使用OS认证 - 只要操作系统用户在DBA组中,oracle用户名和密码就会被忽略。当你使用'service name'并连接成'sysdba'时,密码文件将被使用,如果'sysdba'角色没有被授予该用户(用户不在密码文件中),你会得到'ORA- 0131'错误。 – 2014-09-21 15:21:00

回答

3

托马斯凯特beatifully解释的区别:

服务名称是更灵活的比SID会。

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

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

服务是多对多的关系。

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

随着SID - 这更像是告诉听众:“我希望你能连接到这个特定的数据库,我所知道的‘地址’,在这里你走”

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

这里的更多信息,https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1508737000346067364

类似的问题被问在堆栈中断6年前,How SID is different from Service name in Oracle tnsnames.ora

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

+0

感谢@Glenn的编辑。事实上,这是***许多对一般***的关系。但是,作为一个结论,我特别针对OP的案例说了一对多。 – 2014-09-21 15:48:32

+0

哇谢谢@Lalit库马尔B但我不使用tnsnames.ora和listener.ora我没有安装Oracle客户端 – Vert 2014-09-22 17:51:17

+0

关于'tnsnames.ora'和'listener.ora',这取决于您是否连接到数据库本地或通过网络。 – 2014-09-22 17:54:14

相关问题