如何查找 Oracle 服务名称
Posted
技术标签:
【中文标题】如何查找 Oracle 服务名称【英文标题】:How to find Oracle Service Name 【发布时间】:2014-04-19 10:26:54 【问题描述】:我的网络上有一个 Oracle 数据库,我可以使用主机名、端口、用户名、密码和 SID 连接到 Oracle SQL Developer。
我需要连接另一个应用程序 (Quantum Gis),但是它使用服务名称而不是 SID。
当我通过 SID 在 SQL Developer 中连接时,我有什么方法可以确定数据库的 SERVICE_NAME 吗?
我无权访问服务器,也没有本地 tnsnames.ora 或类似文件。
【问题讨论】:
Jakobsen:运行命令Show parameter service_name
@GauravSoni AFAIK show parameter
是 SQL/Plus 命令,我不确定 SQL Developer 是否支持 SQL/Plus 提示符。如果没有,OP 可以改用select * from v$parameter where name like '%service_name%'
。
"显示参数 service_name;"返回错误“显示参数查询失败”。
"从 v$parameter 中选择值,其中名称为 '%service_name%';"返回 ORA-00942: 表或视图不存在
@AndersJakobsen:您有权访问数据字典视图,请您的 DBA 授予访问权限或向您发送服务名称。可能是 sql 开发人员支持 sqlplus 命令,因为 toad 也支持 F5是 toad 中运行此类命令的命令。
【参考方案1】:
感谢这个帖子 (https://community.oracle.com/thread/473276)
select sys_context('userenv','service_name') from dual;
可以用普通用户帐号执行,不需要sysdba权限
【讨论】:
它返回的只是 SYS$USERS。我最终确实与 DBA 取得了联系,所以这不再是问题 这实际上确实为我返回了 TNSNames 中定义的当前 Service_name。投赞成票。【参考方案2】:使用 SID 作为“系统”连接到服务器。 执行这个查询:
select value from v$parameter where name like '%service_name%';
它对我有用。
【讨论】:
对于任何需要帮助的人,请注意 url 需要 sid 而不是服务名称。完整的服务名称对我不起作用:jdbc:oracle:thin:@localhost:1521:orcl.athens.intrasoft-intl.private
而这起作用:jdbc:oracle:thin:@localhost:1521:orcl
@GeorgePligor:请注意区别:jdbc:oracle:thin:@HOST:PORT:SID
但jdbc:oracle:thin:@HOST:PORT/SERVICE
将大写单词替换为正确的值。请注意这两个字符串之间的区别:在 sid 字符串中,sid 的名称与前面的字符串用 : 分隔,在服务字符串中,名称与前面的字符串用 / 分隔【参考方案3】:
检查数据库的服务名
sql> 显示参数服务;
【讨论】:
SHOW PARAMETERS;
为一切。【参考方案4】:
以“system”用户连接数据库,执行如下命令:
show parameter service_name
【讨论】:
【参考方案5】:在这里找到,没有 DBA:Checking oracle sid and database name
select * from global_name;
【讨论】:
非常感谢,这个从 Oracle SQL Developer 为我工作。 GLOBAL_NAME 为您获取全局数据库名称,该名称与服务名称不同。 (尽管在某些情况下它们可能恰好具有相同的值。)【参考方案6】:使用 SQL Developer,您无需编写任何查询即可找到它。 右键单击您的连接/属性。
您应该会在左侧的“连接详细信息”下方看到名称,并且应该看起来像“Connectionname@servicename”,或者在右侧的连接详细信息下方。
【讨论】:
【参考方案7】:所有会话使用的服务概览在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
,则会话连接到默认服务,即在连接字符串中没有明确指定service_name。
要查看数据库中有哪些服务可用,请使用以下查询:
select name from V$SERVICES;
select name from V$ACTIVE_SERVICES;
【讨论】:
当我在机器上直接使用 SQL*Plus 时,这只是告诉我SYS$USERS
。
@jpmc26 SYS$USERS 是与服务无关的用户会话的默认服务
我收集到了,但是在同一台机器上运行时它不起作用的事实使得这个答案比其他答案有用得多。
@jpmc26 根据您的建议扩展了答案。区分已连接服务和可用服务很重要。【参考方案8】:
查找 ORACLE_SID 使用 $。 oraenv
【讨论】:
以上是关于如何查找 Oracle 服务名称的主要内容,如果未能解决你的问题,请参考以下文章