首页 > 数据库 >oracle查询某个sql语句客户端ip地址

oracle查询某个sql语句客户端ip地址

时间:2024-12-13 15:10:13浏览次数:9  
标签:ip program sql oracle 日志 port 客户端

1. 背景

业务出现异常后,或者某个sql导致系统卡顿。需要问题后需要溯源,需要获取这个sql是在哪个客户端的IP发起的。

2. cs架构

客户端直接连接数据库,可以很方便查询,采用通过sql_id找到客户端、进程或者port等,默认的模式是没有ip地址记录

select machine,program,port from GV$SESSION where sql_id= 
或者
select machine,program,port from GV$ACTIVE_SESSION_HISTORY where sql_id=

select machine,program,port from dba_hist_ACTIVE_SESS_HISTORY where sql_id=

再通过数据库监听查询或者应用服务器

2.1. 案例说明

select machine,program,port from GV$SESSION where sql_id=

或者 GV$ACTIVE_SESSION_HISTORY 的表获取到

通过获取machine、program、port这几个字段。

再通过数据库监听日志只获取

cat listener.log|grep 51880|grep Thin

注意:发现监控日志中记录的计算机的主机名和session中记录的可能不一致

3. BS架构

bs架构和cs架构的不同点,bs采用多层架构,是应用服务连接数据库的,获取到的ip也是应用服务器的ip地址。

以java应用服务器为例,需要查询到客户端的ip发起端。

有个技巧:java服务的应用名称都是叫JDBC Thin Client,这样一台服务器中有多个java服务是无法区别的,可以手工区别名称来定义不同的java服务,如java应用的配置文件中,针对链接池配置,这样你的应用名称就变成了oracle-monitor

      data-source-properties:
        "[v$session.program]": oracle-monitor

有以下几种方式

  1. 通过nginx,客户端连接nginx,nginx转发到应用服务器中。再配置时间和请求的交易来定位,需要记录应用服务器的日志,日志格式类似
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent $request_time $upstream_response_time "$http_referer" '
                      '$connection $upstream_addr "$http_x_forwarded_for" "$http_cookie" ';

$remote_addr:这个就是客户端的ip

  1. 没有nginx,应用容器采用tomcat,可以查看tomcat的请求日志

  1. 还有应用端记录登录日志来获取

4. 数据库登录触发器

登录的时候,可以再session记录ip地址,这样就不需要到监控日志中去查询具体的ip地址

CREATE OR REPLACE TRIGGER on_logon_trigger
AFTER LOGON ON DATABASE
BEGIN
    DBMS_APPLICATION_INFO.SET_CLIENT_INFO(SYS_CONTEXT('USERENV', 'IP_ADDRESS'));
END;

SELECT * FROM gv$session WHERE client_info 这个字段中就会体现ip地址

5. 总结

追溯源头的ip地址

  1. 通过慢的sql_id来获取客户端、应用、port,来定位ip地址。BS架构中应用服务名可以在链接池中设置不同的应用名。可以新增一个登录的触发器,记录一下ip更加方便
  2. BS架构需要定位客户端,需要通过请求和时间等,再通过nginx或者tomcat访问日志来定位

标签:ip,program,sql,oracle,日志,port,客户端
From: https://www.cnblogs.com/gull/p/18604991

相关文章

  • 快速查看自己电脑的公网ip
    看了网上很多博客,都说什么去访问一下网站,我直接告诉大家最快捷方法:cmd打开电脑命令提示符然后curl-4ifconfig.me输出的ip就是电脑公网ip,注意加白名单的时候看一下,这个会发生变化其次是打开iP地址查询--手机号码查询归属地|邮政编码查询|iP地址归属地查询|身份证......
  • 利用自己的公网服务器IP远程访问内网的服务
    一.概述本文将讲解如何利用自己的公网服务器IP访问自己远程的内网服务(windows远程桌面:3389)本文适用于自己拥有公网服务器的用户,本文已远程桌面举例二.步骤1.开启防火墙例如我在阿里云上有一台公网云服务器,首先阿里云网站后台开启防火墙,你需要开放啥端口就去开放啥端口.......
  • 嵌入式组件-----IPC
    此篇文章在2022年8月23日被记录1、什么是IPC在做一个比较简单的项目时,我们可以使用全局变量等作为标志位进行逻辑判断,但是在功能较多的项目上时,使用全局变量作为程序间的标志位当然是不可行的,代码将会混乱且复杂,不利于解耦,因此需要使用到IPC(Interprocesscommunication),IPC是模......
  • 前端必知必会-JavaScript HTML DOM 方法
    文章目录JavaScript-HTMLDOM方法DOM编程接口getElementById方法innerHTML属性总结JavaScript-HTMLDOM方法HTMLDOM方法是您可以执行的操作(针对HTML元素)。HTMLDOM属性是您可以设置或更改的值(HTML元素的值)。DOM编程接口可以使用JavaScript(以及......
  • 前端必知必会-JavaScript HTML DOM Document对象
    文章目录JavaScriptHTMLDOMDocumentHTMLDOM文档对象查找HTML元素更改HTML元素添加和删除元素添加事件处理程序查找HTML对象总结JavaScriptHTMLDOMDocumentHTMLDOM文档对象是网页中所有其他对象的所有者。HTMLDOM文档对象文档对象代表您的网页......
  • MySQL InnoDB 中的数据页
    文章目录1.数据库的存储结构概述1.1表空间(Tablespace)1.2段(Segment)1.3区(Extent)1.4页(Page)2.InnoDB数据页的深入解析2.1数据页的物理结构2.2数据页中的行存储2.3数据页满时的分裂与合并2.4大字段(LOB)的存储机制2.5页分裂与合并的影响3.B+Tree查询逻辑的实现......
  • MySQL InnoDB 的锁机制
    文章目录1.引言2.锁的基础概念2.1什么是锁?2.2锁的核心实现原理2.3InnoDB中锁的分类3.悲观锁与乐观锁3.1悲观锁详解3.2乐观锁详解3.3两种锁策略的性能对比4.系统锁4.1系统锁的使用场景4.2系统锁的实现方式4.3系统锁的优缺点5.表锁5.1表锁的内部实现5.2......
  • noip2024
    day0发手机的时候没找到数据线,不过huge居然借了我一个......
  • Post请求的两种编码格式:application/x-www-form-urlencoded和multipart/form-data
    一、前端表单提交时application/x-www-form-urlencoded表单代码:<formaction="http://localhost:8888/task/"method="POST">Firstname:<inputtype="text"name="firstName"value="Mickey&"><br>Last......
  • SQL 在线格式化 - 加菲工具
    SQL在线格式化打开网站加菲工具选择“SQL在线格式化”或者直接访问https://www.orcc.online/tools/sql输入sql,点击上方的格式化按钮即可输入框得到格式化后的sql结果......