【问题标题】:Get IP address of oracle client users获取oracle客户端用户的IP地址
【发布时间】:2015-05-05 00:07:09
【问题描述】:

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

【问题讨论】:

  • 这是一个客户端/服务器应用程序吗?或者这是一个三层应用程序,从数据库的角度来看,客户端机器是一个中间层应用程序服务器?
  • 你的意思是有会话的任何信息,比如会话的消费?

标签: oracle client oracle-sqldeveloper ip-address database-administration


【解决方案1】:

我需要一个查询来获取已经与数据库建立会话的客户端用户的所有 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

编辑从下面的 cmets 讨论中,要从 v$session 中获取所有用户的 IP 地址列表,您可以使用MACHINE 他们连接的来源。

SELECT utl_inaddr.get_host_address(t.machine), t.* FROM v$session t;

【讨论】:

  • 这将返回您的 IP 地址,但问题是如何获取所有其他用户的 IP。
  • 这里需要为YOUR设置上下文。我明白你在说什么,对于来自 v$session 的所有用户,我们可以通过机器名获取主机地址。相同的机器名与 v$instance 中的 host_name 同义。通常我们从 v$instance 执行utl_inaddr.get_host_address(host_name)。因此,从 v$session 中,我们可以使用 machine。将编辑我的答案。
【解决方案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;

【讨论】:

    猜你喜欢
    • 2019-01-14
    • 2019-11-13
    • 1970-01-01
    • 2013-07-07
    • 2011-05-26
    • 2015-03-01
    • 2011-01-08
    • 2014-12-29
    • 1970-01-01
    相关资源
    最近更新 更多