我在网络上有一个Oracle数据库,可以使用主机名、端口号、用户名、密码和SID连接Oracle SQL Developer。
但我需要连接另一个应用程序(Quantum Gis),该应用程序使用服务名而非SID。
当我通过SID在SQL Developer中连接时,有没有办法确定数据库的SERVICE_NAME?
我无法访问服务器,也没有本地的tnsnames.ora或类似文件。
我在网络上有一个Oracle数据库,可以使用主机名、端口号、用户名、密码和SID连接Oracle SQL Developer。
但我需要连接另一个应用程序(Quantum Gis),该应用程序使用服务名而非SID。
当我通过SID在SQL Developer中连接时,有没有办法确定数据库的SERVICE_NAME?
我无法访问服务器,也没有本地的tnsnames.ora或类似文件。
在这里找到,没有DBA:检查Oracle sid和数据库名称
select * from global_name;
使用SID作为"system"连接到服务器。执行此查询:
select value from v$parameter where name like '%service_name%';
这对我很有效。
jdbc:oracle:thin:@localhost:1521:orcl.athens.intrasoft-intl.private
,而这个有效:jdbc:oracle:thin:@localhost:1521:orcl
。 - George Pligoropoulosjdbc:oracle:thin:@HOST:PORT:SID
和 jdbc:oracle:thin:@HOST:PORT/SERVICE
。请用正确的值替换大写单词。请注意这两个字符串之间的区别:在sid字符串中,sid名称与前面的字符串由冒号分隔,在服务字符串中,名称与前面的字符串由斜杠分隔。 - miracle173所有会话使用的服务概述在列SERVICE_NAME
中提供了字典视图v$session
(对于RAC数据库,使用gv$session
)。
要将信息限制为连接的会话,请使用视图V$MYSTAT
中的SID:
select SERVICE_NAME from gv$session where sid in (
select sid from V$MYSTAT)
如果名称为SYS$USERS
,则会话连接到一个默认服务,即在连接字符串中未指定明确的服务名称。
要查看数据库中可用的服务,请使用以下查询:
select name from V$SERVICES;
select name from V$ACTIVE_SERVICES;
SYS$USERS
。 - jpmc26感谢这个帖子(https://community.oracle.com/thread/473276)
select sys_context('userenv','service_name') from dual;
可以使用普通用户账户执行,无需sysdba权限。
通过以下方式检查数据库的服务名称:
sql> show parameter service;
使用“system”用户连接到数据库,并执行以下命令:
show parameter service_name
要查找ORACLE_SID,请使用$. oraenv
使用SQL Developer,您无需编写任何查询即可找到它。 右键单击您的连接/属性。
您应该在左侧看到名称,类似于“连接详细信息”下的“Connectionname@servicename”,或者在连接详细信息下的右侧。
Show parameter service_name
。 - Gaurav Sonishow parameter
是一个SQL/Plus命令,我不确定SQL Developer是否支持SQL/Plus提示符。如果不支持,OP可以使用select * from v$parameter where name like '%service_name%'
代替。 - Frank Schmitt