获取oracle客户端用户的IP地址

问题描述 投票:3回答:2

我需要一个查询来获取已经与数据库进行会话的所有IP客户端用户,我的工作(医院)中有一个Oracle数据库服务器,有时数据库停止工作并且无法执行Oracle完成的任何查询系统的模块是用户的接口,所以要解决它我们必须杀死连接到数据库的所有会话并让所有用户重新启动会话,我的问题是有没有办法获取ip地址的任何信息会话就像会话的消费?

oracle client oracle-sqldeveloper ip-address database-administration
2个回答
5
投票

我需要一个查询来获取已经与数据库进行会话的所有IP客户端用户

您可以使用SYS_CONTEXT。它将返回当前会话的以下主机和IP地址信息:

  • TERMINAL - 当前会话的操作系统标识符。这通常是客户端计算机名称。
  • HOST - 客户端计算机的主机名。
  • IP_ADDRESS - 客户端计算机的IP地址。
  • SERVER_HOST - 运行数据库实例的服务器的主机名。

看看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;


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;
© www.soinside.com 2019 - 2024. All rights reserved.