确认oracle连接ip,获取已建立的Oracle 11连接的IP地址(Get IP addresses of established connections to Oracle 11)...

在Oracle 11环境中,开发者发现大量活连接并希望获取这些连接的IP地址。由于UTL_INADDR.GET_HOST_ADDRESS方法受限,无法直接获取IP。问题涉及到ACL限制和客户端主机名在Intranet中未注册于DNS。解决方案可能涉及查找绕过ACL限制的方法或从其他数据库视图中获取信息。
摘要由CSDN通过智能技术生成

获取已建立的Oracle 11连接的IP地址(Get IP addresses of established connections to Oracle 11)

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

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

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

在一般的网络搜索和阅读官方文档期间,我构建查询:

SELECT username, seconds_in_wait, machine, port, terminal, program, module, service_name

FROM v$session

WHERE type = 'USER';

machine是select最重要的部分。 但不幸的是, machine字段显示客户端操作系统已知的主机名 。

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

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

UPDATE

我在可信内部网下,但网络层次结构未知。

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

During development I found that database have large number of lived connections by:

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

In order to find who actually hold connection I want to get a list of IP addresses.

During general web search and reading official docs I build query:

SELECT username, seconds_in_wait, machine, port, terminal, program, module, service_name

FROM v$session

WHERE type = 'USER';

where machine is most important part of select. But unfortunately machine field shows host name known by client OS.

Internet full of recommendation to use UTL_INADDR.GET_HOST_ADDRESS which is not applicable in my case. Firstly because of ORA-24247: network access denied by access control list (ACL) and secondly because client OS host name usually defined in /etc/hostname and doesn't available to DNS server in our intranet...

Any other way to retrieve IP of open session to Oracle DB (DB instance hold information about its sockets in any case...).

UPDATE

I under trusted intranet but with unknown network hierarchy.

And I try to find which applications use my tables (several app-servers, I don't know all of them). Some of them overuse connections and need to be fixed. But firstly they should be identified...

原文:https://stackoverflow.com/questions/15069145

更新时间:2020-01-21 01:45

相关问答

各种版本~自己选把

Oracle Database 11g Release 1 (11.1.0.7.0)

for Microsoft Windows 2008 Server (32-bit)

http://download.oracle.com/otn/nt/oracle11g/111070/win32_11gR1_database.zip

Oracle Database 11g Release 1 Client (11.1.0.7.0)

for Microsoft Windows 2008

...

任何时候都只有非常少量的活动连接 。 浏览器连接到您的服务器,请求网站,获取响应, 然后断开连接 。 它实际上只是暂时连接到您的服务器。 用户在浏览器中打开页面多长时间是完全不同的事情。 如果你想要这样的东西,你需要通过“连接”来定义你的意思。 可能类似于“在过去x分钟内请求页面的IP地址”。 您只需要在带有时间戳的数据库中保存访问者的$_SERVER['REMOTE_ADDR'] ,并从该数据库中获取最新的x IP。 There's only a very small number of act

...

哇,列表中有近1000个IP范围! 要优化验证单个IP地址是否属于其中一个IP范围,您绝对应该对IP范围列表进行一些预处理。 创建数据库是一种方法。 我会看看SQLite,因为它是一种超快的本地文件格式,对于像这样的只读任务来说,比将查询发送到运行数据库的另一个进程(或机器)更快。 创建一个包含“range_start”和“range_end”列的表以及这些列上的索引。 对于每个IP地址范围,插入一行,其中包含范围的开头和结尾。 完成后,您将少于1000行。 现在,测试一个IP地址...... S

...

既然你提到了ipconfig,我假设你想在windows上做这个。 Windows有一套IP Helper apis ,用于检索和修改网络设置。 这是一个简单的示例: http : //msdn.microsoft.com/en-us/library/aa366298(VS.85).aspx Since you mentioned ipconfig, I assume you want to do this on windows. Windows has a set of IP Helper ap

...

为了完整起见,我回答了我自己的问题: 确保在尝试确定主机的源IP地址之前使用transport上的connect()。 以下摘录显示协议实现的相关部分: class FooBarProtocol(protocol.DatagramProtocol):

def startProtocol(self):

self.transport.getHost().host # => 0.0.0.0

self.transport.connect(self.dstHost

...

大多数套接字编程应用程序都与TCP套接字API进行通信,这在操作系统之间大致标准化。 如果你只是想编写一个简单的服务器,并可视化客户端与在你的进程中运行的服务器交谈,那很容易。 但是,您的进程无法使用典型的套接字API查看与计算机上的其他进程对话的套接字连接。 如果你想访问整个机器的所有IP地址,你将不得不使用较低级别的API。 这在OS之间不是标准化的。 对于Windows,我会查看Winsock API,看看您是否可以找到如何查看操作系统的tcp / ip堆栈。 它变得更复杂,因为TCP连接在

...

这个问题显然与任何操作系统或节点设置无关。 我们的服务器提供商已经改变了他们的网络,这导致了路由器和服务器之间的大量数据包丢失。 他们为我们恢复了这一变化,现在又重新开始工作。 This problem was apparently not related to any OS or Node setting. Our server provider had made a change to their network, which caused massive packet loss betwee

...

如果有人遇到同样的问题,请执行以下步骤。 1) Check whether 0.0.0.0:8020 is updated in core-site.xml

2) If you update it inside running container, **I suggest you all to restart ALL the services NOT ONLY namenode**. [better do as part of Dockerfile]

3) Check for `env`

...

看来你使用的验证查询是错误的。 对于H2 select 1但对于Oracle,它应该select 1 from dual 。 您可以在配置数据源时指定查询。 使用application.properties是: spring.datasource.validationQuery=SELECT 1 FROM dual

你的情况应该是: spring.datasource.tomcat.validation-query=SELECT COUNT(*) FROM REAL_TABLE

It seem

...

由于连接池 , 连接是否可以保持打开一段时间? 你能否粘贴一些显示如何关闭连接的代码? 您也在使用ODP.NET或Microsoft提供的类吗? 您可以尝试关闭连接池(添加;Pooling=false到ODP.NET中的连接字符串)以查看您的问题是否是由于使用它而引起的(请注意,创建与DB的新物理连接是一个昂贵的操作,所以你可能实际上不想永久关闭连接池)。 Could it be the connections stay open for a while due to connection poo

...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值