查找Oracle数据库的服务器名称

57

有没有一种方法可以找到Oracle数据库所托管的服务器名称?

5个回答

89

如果您无法访问v$视图(如Quassnoi所建议的),则有两个备选方案

select utl_inaddr.get_host_name from dual

并且

select sys_context('USERENV','SERVER_HOST') from dual

就我个人而言,我倾向于选择最后一种方法,因为它不需要任何授权/权限,这使得从存储过程中执行更加容易。


11
+1表示sys_context()是最简单和最适当的解决方案。 - APC
4
不使用sys_context的唯一原因是它会将名称转换为小写,而其他两个函数则不会。这很少会有任何影响,但有时Linux比较挑剔。 - Ben
8
您可以使用 sys_context('USERENV', 'SERVICE_NAME') 来获取数据库服务名,而不是机器名。 - bart

57
SELECT  host_name
FROM    v$instance

4
从技术上讲,由于多个服务器可以挂载一个Oracle数据库,因此select host_name from gv$instance查询将返回所有主机。然而,上面的查询确实显示了您在该会话中当前连接到的主机。 - Adam Musch

26

下面的查询演示了如何使用此软件包以及您可以获取的一些信息。

select sys_context ( 'USERENV', 'DB_NAME' ) db_name,
sys_context ( 'USERENV', 'SESSION_USER' ) user_name,
sys_context ( 'USERENV', 'SERVER_HOST' ) db_host,
sys_context ( 'USERENV', 'HOST' ) user_host
from dual

注意:参数“SERVER_HOST”仅在10G中可用。

任何可以连接到数据库的Oracle用户都可以对"双重性"运行查询。 不需要特殊权限,并且SYS_CONTEXT提供比"sys.v$instance"更广泛的应用程序特定信息。


0
你是想在多个环境中使用相同的查询,并显示这是生产环境、用户验收测试环境还是开发环境吗?许多公司都有一个标准后缀或前缀来指示环境。在上面的答案基础上,这里有一个查询,可以返回环境,假设最后一个字母为'p' - 生产环境 | 'a' - 用户验收测试环境 | 'd' - 开发环境。
select sys_context ( 'USERENV', 'DB_NAME' ) db_name,   /* Use this for determining Environment, where the last letter is p/a/d for Prod/uAt/Dev. */
       case substr ( sys_context ( 'USERENV', 'DB_NAME' ), -1 ) 
         when 'p' then 'PROD' 
         when 'u' then 'UAT' 
         when 'd' then 'Development' 
         else 'Unknown'
       end Environment
  from dual

0
我使用这个查询来检索我的Oracle数据库的服务器名称。
SELECT program FROM v$session WHERE program LIKE '%(PMON)%';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接