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

dar*_*jnz 35 oracle

有没有办法找到托管Oracle数据库的服务器名称?

Gar*_*ers 67

如果您无法访问v $视图(如Quassnoi所建议),则有两种选择

select utl_inaddr.get_host_name from dual
Run Code Online (Sandbox Code Playgroud)

select sys_context('USERENV','SERVER_HOST') from dual
Run Code Online (Sandbox Code Playgroud)

我个人倾向于最后一个,因为它不需要任何授权/特权,这使得从存储过程更容易.

  • `sys_context()`的+1是最简单和最合适的解决方案. (8认同)
  • 您可以使用`sys_context('USERENV','SERVICE_NAME')`来获取数据库服务名称而不是计算机名称. (7认同)
  • 不使用`sys_context`的唯一原因是它使名称小写,而其他2则不是.这根本不会产生任何影响,但有时Linux很挑剔. (4认同)

Qua*_*noi 46

SELECT  host_name
FROM    v$instance
Run Code Online (Sandbox Code Playgroud)

  • 从技术上讲,由于多个服务器可以挂载Oracle数据库,因此从gv $ instance`中选择host_name将返回所有主机.但是,上面的查询确实显示了您当前在该会话中连接的主机. (3认同)

小智 11

下面的查询演示了包的使用以及您可以获得的一些信息.

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
Run Code Online (Sandbox Code Playgroud)

注意:参数'SERVER_HOST'仅适用于10G.

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