我需要一个查询来获取已经与数据库进行会话的所有IP客户端用户,我的工作(医院)中有一个Oracle数据库服务器,有时数据库停止工作,可以&#39 ; t执行由系统的Oracle模块完成的任何查询,这是用户的接口,所以要解决它我们必须杀死连接到数据库的所有会话并让所有用户重启会话,我的问题是有什么办法的获取会话的任何信息的IP地址,如会话的消耗?
答案 0 :(得分:5)
我需要一个查询来获取已经与数据库建立会话的所有IP客户端用户
您可以使用 SYS_CONTEXT 。它将返回当前会话的以下主机和IP地址信息:
请看Tim Hall的article。
例如,
SQL> SELECT SYS_CONTEXT('USERENV','IP_ADDRESS') FROM dual;
SYS_CONTEXT('USERENV','IP_ADDRESS')
----------------------------------------------------------
127.0.0.1
SQL>
对我来说IP是 localhost ,所以我得到127.0.0.1
修改根据以下评论中的讨论,要从v $ session获取所有用户的IP地址列表,您可以使用它们连接的MACHINE
。
SELECT utl_inaddr.get_host_address(t.machine), t.* FROM v$session t;
答案 1 :(得分:2)
查看此查询:
SELECT username, status, osuser, process, machine, terminal, logon_time,
lockwait, blocking_session_status, blocking_instance, blocking_session,
UTL_INADDR.GET_HOST_ADDRESS(REGEXP_REPLACE(machine, '^.+\\')) AS client_ip
FROM v$session;