oracle查询某个sql语句客户端ip地址
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
有以下几种方式
- 通过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
- 没有nginx,应用容器采用tomcat,可以查看tomcat的请求日志

- 还有应用端记录登录日志来获取
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地址
- 通过慢的sql_id来获取客户端、应用、port,来定位ip地址。BS架构中应用服务名可以在链接池中设置不同的应用名。可以新增一个登录的触发器,记录一下ip更加方便
- BS架构需要定位客户端,需要通过请求和时间等,再通过nginx或者tomcat访问日志来定位
oracle查询某个sql语句客户端ip地址的更多相关文章
- Oracle v$session视图显示客户端IP地址
在Oracle数据库中,我们使用session相关视图(v$session.v$active_session_history,dba_hist_active_session_history等)查找问题 ...
- Oracle中SQL语句转化IP地址到数字
CREATE OR REPLACE FUNCTION ip_num(ipaddress IN VARCHAR2) RETURN NUMBER AS ipnum ; pos1 ; pos2 ; BEGI ...
- oracle数据库查询日期sql语句(范例)、向已经建好的表格中添加一列属性并向该列添加数值、删除某一列的数据(一整列)
先列上我的数据库表格: c_date(Date格式) date_type(String格式) 2011-01-01 0 2012-03-07 ...
- 获取SQL Server中连接的客户端IP地址[转]
有时候需要获取连接到SQL Server服务器上的客户端IP地址,用什么办法呢? SELECT *FROM sys.dm_exec_connections WHERE session_id = @@S ...
- php 获取客户端IP地址
/** * 获取真实IP地址 */ /* 在PHP中getenv(参数)函数是一个用于获取环境变量的函数,根据提供不同的参数可以获取不同的环境变量, getenv("REMOTE_ADDR& ...
- MySQL5.6 怎样优化慢查询的SQL语句 -- 慢日志介绍
近期有个开发团队抱怨我们平台包括的mysql cluster不行,总是报mysql的"heartbeat Error".分析了他们收集的日志.没有发现mysql cluster节点 ...
- ASP.NET获取真正的客户端IP地址的6种方法
Request.ServerVariables("REMOTE_ADDR") 来取得客户端的IP地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的IP地址,而不是真 ...
- 说说oracle分页的sql语句
说说oracle分页的sql语句,分排序和不排序两种. 当结果集不需要进行排序时,每页显示条数为:rowPerPage,当前页数为:currentPage. 1. 相对来说,这种查询速度会快一些,因为 ...
- 获取客户端IP地址定位城市信息
获取客户端IP地址定位城市信息 1.首先获取客户端的IP地址 function getIPaddress(){ $IPaddress=''; if (isset($_SERVER)){ if (iss ...
- MySql实现分页查询的SQL,mysql实现分页查询的sql语句 (转)
http://blog.csdn.net/sxdtzhaoxinguo/article/details/51481430 摘要:MySQL数据库实现分页查询的SQL语句写法! 一:分页需求: 客户端通 ...
随机推荐
- BOOT跳转APP,STM32F4正常,但是GD32F4起不来的问题
问题描述: stm32F4可以正常从BOOT跳转执行APP,到了GD32F4,卡死在APP程序的这里. 临时解决办法: APP程序内 把这两句代码都屏蔽掉就好了. 相关资料搜索: 最佳解决方案: ...
- 北京智和信通受邀出席2022IT运维大会,荣获“2022智能运维星耀榜最具影响力企业”
9月8日,由IT运维网.<网络安全和信息化>杂志社联合主办的"2022(第十三届)IT运维大会"在北京辽宁大厦成功举办.大会以"智慧先行,运维有术" ...
- linux cpufreq framework(5)_ARM big Little driver
1. 前言 也许大家会觉得奇怪:为什么Linux kernel把对ARM big·Lttile的支持放到了cpufreq的框架中? 众所周知,ARM的big·Little架构,也称作HMP(具体可参考 ...
- 封神台 SQL注入 靶场 (猫舍)手动注入
封神台 SQL注入 靶场 (猫舍)手动注入 靶场地址 http://pu2lh35s.ia.aqlab.cn/?id=1 使用脚本 可以直接使用sqlmap脚本 直接 对这个地址进行测试 不过这样实在 ...
- day16-break,continue,goto
break,continue,goto break在任何循环语句的主体部分,均可用break控制循环的流程.break用于强行退出循环,不执行循环中剩余的语句.(break语句也在switch选择语句 ...
- Computersystemsicherheit学习笔记
1.Verlässliche System 1.1 Security和Safety的区别 1.2 Fault,Error和Failure的区别 举例如下: 1.3 Verfügbarkeit 例题: ...
- jsp页面访问数据库根据数据情况,定时弹出提醒
需求:根据数据库情况,在页面定时弹出相应的消息 实现: 1. 展示DIV设置 <script language="javascript" type="text/ja ...
- 题解:【XR-3】核心城市
题解:[XR-3]核心城市 思路一:考虑由特例推广到一般 1.很容易想到先考虑一个关键点的情况,然后再推广到一般情况. 2.一个点肯定选距离上最平衡的那个点,即树的中心.接着在中心周围贪心的选剩下的( ...
- web上线部署系统 Walle
Walle瓦力是基于git和rsync实现的一个web部署系统工具. 用户分身份注册.登录 开发者发起上线任务申请 管理者审核上线任务 支持多项目部署 快速回滚 部署前准备任务(前置检查) 代码检出后 ...
- 构建人工智能模型基础:TFDS和Keras的完美搭配
上一篇:<数据工程师,转型人工智能岗位的理想时空通道> 序言:本节将带您深入探索 TensorFlow 提供的关键工具和方法,涵盖数据集管理和神经网络模型的构建与训练.在现代人工智能框架中 ...