[20140212]linu下使用tcpdump抓取sql语句.txt

我们生产系统问题多多,经常要跟踪用户执行的sql语句,当出现问题时要跟踪比较麻烦,我需要一个快捷的方式"看到"用户执行的sql语

句,想到了tcpdump抓包软件。

我测试建立shell脚本如下:

#! /bin/bash

/usr/sbin/tcpdump -l -i eth0 -s 16384 -A -nn src host $1 and dst port 1521

--说明:

-- -l     Make stdout line buffered.  Useful if you want to see the data while capturing it.  E.g.,

''tcpdump  -l  |  tee dat'' or ''tcpdump  -l   > dat  &  tail  -f  dat''.

--这样可以立即看到包。不然要等待缓存,可能漏掉一些sql语句。

-- -i     指网络接口。

-- -s     抓包长度,这个设置多少我还真不知道,我乱写为16384

-- -A     Print each packet (minus its link level header) in ASCII.  Handy for capturing web pages.

--- 执行很简单,参数使用ip地址就ok了。

Tcpdumpsql ip_address

很明显抓取的东西有一些乱。虽然sql语句也在里面,但是显示太乱了。想到了一些过滤命令grep等等。但是如果sql语句太长,这样也不

是很好。我开始google看看是否有人写一些相似的命令,输入tcpdump oracle

他使用tcpdump抓取oracle错误。在其网站检索发现:

这个正是我需要的。

按照以上脚本修改如下:

# cat /usr/local/bin/Tcpdumpsql

#! /bin/bash

/usr/sbin/tcpdump -l -i eth0 -s 16384 -A -nn src host $1 and dst port 1521 |  sed  -u -e  "s/^\.*//;s/\.*$//" | \

awk '{if (tolower($0) ~ "select" || tolower($0) ~ "update" ||  tolower($0) ~ "delete") {p=1;print} \

else if(p == 1 && $0 !~ "^[0-9][0-9]:") {print} else if ($0 ~ "^[0-9][0-9]:") {p=0}}'

--前面的. 实际上前面含有^M。修改如下ok了。

#! /bin/bash

/usr/sbin/tcpdump  -l -i eth0 -s 16384 -A -nn src host $1 and dst port 1521 2>/dev/null | sed -u -e  "s/^M/!/g;s/^E\.\..\{1,100\}//;s/\.*$//;s/^\.*//" | \

awk '{if (tolower($0) ~ "select" || tolower($0) ~ "update" ||  tolower($0) ~ "delete" || tolower($0) ~ "insert" ) {p=1;print} \

else if(p == 1 && $0 !~ "^[0-9][0-9]:") {print} else if ($0 ~ "^[0-9][0-9]:") {p=0}}'

--^M 输入要ctrl+v ctrl+m.

顺便测试alter session set cursor_sharing=force ;转换成绑定在那里发生:

alter session set cursor_sharing=force ;

select * from dept where deptno= 30;

截取sql如下:

#select * from dept where deptno= 30

--保持原样,可见转换在服务器端完成。

前面的#实际上sql语句的长度指示器。

select dump('#') from dual ;

DUMP('#')

-------------------

Typ=96 Len=1: 35

select length('select * from dept where deptno= 30') from dual ;

LENGTH('SELECT*FROMDEPTWHEREDEPTNO=30')

---------------------------------------

35

--sql语句长度35,正好合适。

如果很长FF+sql语句+FF+sql语句+剩下长度+sql语句,这样截取的可能有不需要的字符。不过仅仅拿来看个大概,基本没有问题。还有一些前面可能出现\n,这样转换可能存在一些问题,

总体满足自己的需要。

oracle tcpdump生成bpf,[20140212]linux下使用tcpdump抓取sql语句相关推荐

  1. 大盘点|基于RGB图像下的机器人抓取

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 前言 近期读取了一些最新基于RGB图像下的机器人抓取论文,在这里分享下思路. 1.Optimizing ...

  2. 根据当前记录获取前一条与下一条记录常用 sql语句

    为什么80%的码农都做不了架构师?>>>    1.oracle实现主要是用分析函数 lag与lead SELECT * FROM (SELECT         id,       ...

  3. oracle 根据spid查sql,探讨:Oracle数据库查看一个进程是如何执行相关的实际SQL语句...

    Oracle数据库查看一个进程是如何执行相关的实际sql语句 代码如下: SELECT b.sql_text,sid,serial#,osuser,machine FROM v$session a,v ...

  4. Oracle EBS中分类账和法人实体 的关系(有sql语句实例)

    Oracle EBS中分类账和法人实体 的关系(有sql语句实例) 2012-12-06 16:05 2822人阅读 评论(0) 收藏 举报  分类: Oracle EBS(12)  Oracle数据 ...

  5. Spring Data JDBC自动生成的增删改查CRUD分页、排序SQL语句非常简洁没有多余的SQL

    通过在application.properties文件中设置记录SQL日志 logging.level.org.springframework.jdbc.core.JdbcTemplate=DEBUG ...

  6. 学校铃声Java_java_java多线程抓取铃声多多官网的铃声数据,一直想练习下java多线程抓取数 - phpStudy...

    java多线程抓取铃声多多官网的铃声数据 一直想练习下java多线程抓取数据. 有天被我发现,铃声多多的官网(http://www.shoujiduoduo.com/main/)有大量的数据. 通过观 ...

  7. linux 生成密码本,Linux下CentOS7使用OTPW实现双因子密码本登录

    otpw优点: 1.前缀密码+一次性随机码,相当于双重加密.就算随机码列表泄露,没有前缀密码也是无法登录. 2.如果一次没登录成功,会启用三重随机码. 3.用户目录下保存密码的文件可通用,适合批量部署 ...

  8. linux下生成guid,在Linux下生成GUID的程序,及编译错误 “uuid/uuid.h: No such file or directory” 的解决办法。...

    在Linux下编写生成GUID的程序,如下 guid.c 文件: #include #include void uuid2string(const uuid_t uu, char* const str ...

  9. oracle定时任务可以备份么,Linux下Oracle设置定时任务备份数据库的教程

    1.查看数据库的字符集 数据库的字符集必须和Linux下设置的环境变量一致,不然会有乱码. 以下两个sql语句都可以查到: select * from nls_database_parameters ...

最新文章

  1. Android爬坑之旅:软键盘挡住输入框问题的终极解决方式
  2. Linux Shell 截取字符串
  3. (9)C#之ADO.NET 两个ListBox联动案例
  4. springmvc处理ajax请求
  5. pyminifier混淆代码的使用案例
  6. 【数字图像处理】三.MFC实现图像灰度、采样和量化功能详解
  7. LoRa技术实现水表抄表远距离无线传输方案的应用
  8. LUGOU P3907 圈的异或
  9. android things 系统镜像文件_开始菜单搬家!Win 10X 系统 UI 全部重做,明年初就能用上...
  10. 干了三年的Java,你竟然还不会MySQL性能优化
  11. PHP学习总结(11)——PHP入门篇之WAMPServer多站点配置
  12. raw socket java_记一次蛋疼的Raw socket发送经历。附:Raw socket编程总结
  13. 谁说财务软件不能上纯公有云?
  14. 安装卸载Windows服务
  15. 如何保护前端JS代码?前端js代码混淆加密
  16. 各版本音标 IPA DJ KK 音标对照表
  17. 机器人动力学与参数辨识学习笔记(一)
  18. selenium简单模拟百度搜索点击器
  19. 神来之笔-线程变量实践
  20. 如何在cv2窗口图像上写字_Python for opencv 之 显示图像及在图像上书写文字

热门文章

  1. 四十一、Python统计模块statistics
  2. java线程名_java多线程
  3. 知识图谱还有哪些方向值得深入研究?这 6 篇最新论文给你答案
  4. 你的模型够可靠么?关键词掩码的模型可靠性提升方法探索
  5. 自然语言处理中的语言模型预训练方法
  6. String,StringBuffer,StringBuilder的区别
  7. Python基础知识-优雅的with as语句
  8. html 静态资源缓存时间,.htaccess设置静态资源缓存(即浏览器缓存)
  9. python如何修改excel数据库_python修改excel数据库
  10. RabbitMQ之呕心沥血的总结(图文并茂、万字级别、毕生所学)