加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

获取已建立的Oracle 11连接的IP地址

发布时间:2021-03-31 16:17:56 所属栏目:站长百科 来源:网络整理
导读:在开发过程中,我发现数据库有大量的生命连接: SELECT username,COUNT(*) FROM v$session GROUP BY username; 为了找到实际持有连接的人,我想获得一个IP地址列表. 在一般网页搜索和阅读official docs我构建查询: SELECT username,seconds_in_wait,machine,p

在开发过程中,我发现数据库有大量的生命连接:

SELECT username,COUNT(*) FROM v$session GROUP BY username;

为了找到实际持有连接的人,我想获得一个IP地址列表.

在一般网页搜索和阅读official docs我构建查询:

SELECT username,seconds_in_wait,machine,port,terminal,program,module,service_name
  FROM v$session
  WHERE type = 'USER';

机器是选择中最重要的部分.但不幸的是,机器字段显示客户端操作系统已知的主机名.

互联网充满了建议使用UTL_INADDR.GET_HOST_ADDRESS,这在我的情况下是不适用的.首先是因为ORA-24247:访问控制列表(ACL)拒绝网络访问,其次是因为客户端操作系统主机名通常在/ etc / hostname中定义,并且在我们的Intranet中不可用于DNS服务器…

检索到Oracle DB的开放会话的IP的任何其他方法(数据库实例在任何情况下都保存有关其套接字的信息……).

UPDATE

我在受信任的Intranet下,但网络层次结构未知.

我试图找到哪些应用程序使用我的表(几个应用程序服务器,我不知道所有这些).他们中的一些过度使用连接,需要修复.但首先应该确定它们……

解决方法

请记住,Oracle会话不需要知道,当然也不需要信任您来自的客户端名称/ IP地址;它位于网络传输层之上,并不关心您是通过TCP / IP还是其他方式连接. (我甚至不确定监听器是否必须传递信息,或者它是否有效地传递了现成的套接字).正如您所见,机器正是客户端声明的内容,例如v $session视图中的程序和其他字段;它可能与DNS或您的服务器的/ etc / hosts可以解决的任何内容没有任何相似之处,特别是如果客户端是Windows框.

您可以做的是,在Unix / Linux级别(因为您引用/ etc / hosts,我假设您不在Windows上),查找端口并查看显示的地址;例如v $session显示我的端口为50527,所以如果我做netstat -an | grep 50527我明白了:

tcp  0  0  192.168.1.1:1521  192.168.1.23:50527  ESTABLISHED

所以我可以看到我从192.168.1.23连接.如果您在服务器上运行SQL * Plus,则可以使用host命令执行此操作,但它仍然有点不方便.如果您需要定期执行此操作,并且添加登录触发器以将其捕获到审计表不是一个选项,并且您必须从数据库中执行此操作,您可能可以编写Java存储过程来执行查找那个港口给你.但是编写一个shell脚本来查询v $session中的端口号可能更容易,并以此方式进行查找.

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读