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访问日志来定位

oracle查询某个sql语句客户端ip地址的更多相关文章

  1. Oracle v$session视图显示客户端IP地址

    在Oracle数据库中,我们使用session相关视图(v$session.v$active_session_history,dba_hist_active_session_history等)查找问题 ...

  2. Oracle中SQL语句转化IP地址到数字

    CREATE OR REPLACE FUNCTION ip_num(ipaddress IN VARCHAR2) RETURN NUMBER AS ipnum ; pos1 ; pos2 ; BEGI ...

  3. oracle数据库查询日期sql语句(范例)、向已经建好的表格中添加一列属性并向该列添加数值、删除某一列的数据(一整列)

    先列上我的数据库表格: c_date(Date格式)     date_type(String格式) 2011-01-01                   0 2012-03-07         ...

  4. 获取SQL Server中连接的客户端IP地址[转]

    有时候需要获取连接到SQL Server服务器上的客户端IP地址,用什么办法呢? SELECT *FROM sys.dm_exec_connections WHERE session_id = @@S ...

  5. php 获取客户端IP地址

    /** * 获取真实IP地址 */ /* 在PHP中getenv(参数)函数是一个用于获取环境变量的函数,根据提供不同的参数可以获取不同的环境变量, getenv("REMOTE_ADDR& ...

  6. MySQL5.6 怎样优化慢查询的SQL语句 -- 慢日志介绍

    近期有个开发团队抱怨我们平台包括的mysql cluster不行,总是报mysql的"heartbeat Error".分析了他们收集的日志.没有发现mysql cluster节点 ...

  7. ASP.NET获取真正的客户端IP地址的6种方法

    Request.ServerVariables("REMOTE_ADDR") 来取得客户端的IP地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的IP地址,而不是真 ...

  8. 说说oracle分页的sql语句

    说说oracle分页的sql语句,分排序和不排序两种. 当结果集不需要进行排序时,每页显示条数为:rowPerPage,当前页数为:currentPage. 1. 相对来说,这种查询速度会快一些,因为 ...

  9. 获取客户端IP地址定位城市信息

    获取客户端IP地址定位城市信息 1.首先获取客户端的IP地址 function getIPaddress(){ $IPaddress=''; if (isset($_SERVER)){ if (iss ...

  10. MySql实现分页查询的SQL,mysql实现分页查询的sql语句 (转)

    http://blog.csdn.net/sxdtzhaoxinguo/article/details/51481430 摘要:MySQL数据库实现分页查询的SQL语句写法! 一:分页需求: 客户端通 ...

随机推荐

  1. efcode相关操作

    1. 下载 tool dotnet tool install -g dotnet-ef 2. 第一次迁移日志 dotnet ef migrations add init1 3. 更新数据库 datne ...

  2. store文件夹的处理,vuex模块化modules

    index文件代码: import Vue from "vue"; import Vuex from "vuex"; // 导入根getters import ...

  3. 02 Transformer 中 Add&Norm (残差和标准化)代码实现

    python/pytorch 基础 https://www.cnblogs.com/nickchen121 培训机构(Django 类似于 Transformers) 首先由一个 norm 函数 no ...

  4. manim边做边学--有向图

    有向图和上一篇介绍的无向图基本一样,唯一的区别在于有向图的边有方向性,它表示的是顶点之间的单向或依赖关系. 有向图G一般表示为:G=<V,E>.和无向图一样,V是顶点集合,E是边的集合. ...

  5. Need BLUETOOTH PRIVILEGED permission以及requestMtu导致蓝牙断连问题

    在部分Android手机上,当连接上GATTService后直接requestMtu有可能会造成蓝牙连接中断,随后继续重新连接会报错Need BLUETOOTH PRIVILEGED permissi ...

  6. 关于使用plsql操作oracle的一点小技巧和几个常用的查询语句

    plsql是什么: 就是这个,专门操作oracle的一个工具,好用还免费. 创建一个测试表: create table Student( Id number not null, Name varcha ...

  7. day12-包机制

    包机制 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间. 包语句的语法格式为: 包的本质就是文件夹  package pkg1[.pkg2[.pkg3...]]; 一般公司域名倒置作为 ...

  8. Exchange2016中搜索和删除邮件

    Exchange2016中搜索和删除邮件 在以前版本的 Exchange 中,可以运行 Search-Mailbox -DeleteContent  命令搜索并删除电子邮件.你仍可以在 Exchang ...

  9. 游戏推荐业务中基于 sentinel 的动态限流实践

    作者:来自 vivo 互联网服务器团队- Gao Meng 本文介绍了一种基于 sentinel 进行二次开发的动态限流解决方案,包括什么是动态限流.为什么需要引入动态限流.以及动态限流的实现原理. ...

  10. swiper + ts 类型报错

    swiper + ts 类型报错 "swiper": "^9.4.1" 版本号 原因 修改 tsconfig.json 文件下面的 moduleResoluti ...