I need a query to get all IP’s of client users that have already a session to the database
您可以使用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;