有没有一种方法可以找到Oracle数据库所托管的服务器名称?
如果您无法访问v$视图(如Quassnoi所建议的),则有两个备选方案
select utl_inaddr.get_host_name from dual
并且
select sys_context('USERENV','SERVER_HOST') from dual
就我个人而言,我倾向于选择最后一种方法,因为它不需要任何授权/权限,这使得从存储过程中执行更加容易。
SELECT host_name
FROM v$instance
select host_name from gv$instance
查询将返回所有主机。然而,上面的查询确实显示了您在该会话中当前连接到的主机。 - Adam Musch下面的查询演示了如何使用此软件包以及您可以获取的一些信息。
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"更广泛的应用程序特定信息。
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
SELECT program FROM v$session WHERE program LIKE '%(PMON)%';
sys_context()
是最简单和最适当的解决方案。 - APCsys_context
的唯一原因是它会将名称转换为小写,而其他两个函数则不会。这很少会有任何影响,但有时Linux比较挑剔。 - Bensys_context('USERENV', 'SERVICE_NAME')
来获取数据库服务名,而不是机器名。 - bart