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语句写法! 一:分页需求: 客户端通 ...
随机推荐
- tailwindcss 3.3.3(完成入门,需要补充每个单独样式)
归纳 修饰符堆叠 <button class="dark:md:hover:bg-fuchsia-600"> 以下为修饰符 伪类伪元素 使用方法: 在实用程序类前添加h ...
- 系统编程-进程-当fork遇到管道,可能碰撞出什么?
第一部分 1. 直接上代码 #include <stdio.h> #include <unistd.h> #include <stdlib.h> int globv ...
- `std::packaged_task`、`std::thread` 和 `std::async` 的区别与联系
std::packaged_task.std::thread 和 std::async 的区别与联系 std::packaged_task.std::thread 和 std::async 都是 C+ ...
- debian 12 编译 vlc/libvlc 支持 rtsp
debian 官方从11开始,不再提供支持 rtsp 的 VLC deb 包,通过 libvlc 播放 rtsp 也无法实现,因此需要自己编译. # 安装编译环境,编译依赖库以及 contrib 第三 ...
- mono 下运行 VB.NET 编写的 WinForm 程序
操作系统环境 UOS 20 安装 Mono 可以参考 dotnet 在 UOS 国产系统上安装 Mono 开发工具的方法 要点如下 nano /etc/apt/sources.list 增加一行 D ...
- HarmonyOS NEXT 底部选项卡功能
在HarmonyOS NEXT中使用ArkTS实现一个完整的底部选项卡功能,可以通过以下几个步骤来完成: 创建Tabs组件:使用Tabs组件来创建底部导航栏,并通过barPosition属性设置其位置 ...
- android中的render线程是什么?
在 Android 中,Render 线程(也称为渲染线程)是一个专门用于处理 UI 绘制和动画的线程.它的主要职责是确保用户界面在屏幕上流畅且高效地呈现.这个线程的引入是为了将渲染任务从主线程(UI ...
- Java日期时间API系列41-----根据毫秒值计算倒计时
会有一个比较常见的需求,计算倒计时,比如,计算距离某时间剩余时间(27小时10分钟30秒.1天3小时10分钟30秒)或者已经进行了多长时间等.下面是2种实现代码:其中第一种超过1天会体现在小时上,比如 ...
- Android复习(三)清单文件中的元素——>path-permission、permission、permission-group、permission-tree
<path-permission> 语法: <path-permission android:path="string" android:pathPrefix=& ...
- 云原生爱好者周刊:Lens 5.2 发布,支持 M1 芯片
云原生一周动态要闻: Lens 5.2 发布 CNI 1.0.1 发布 K8ssandra 从 Helm 迁移到 Operator Amazon EKS Anywhere – 现在普遍可用于在本地创建 ...