[20140212]linux下使用tcpdump抓取sql語句
[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,這樣轉換可能存在一些問題,
總體滿足自己的需要。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-1080698/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux中使用wireshark分析tcpdump抓取的資料包LinuxTCP
- ORACLE:使用tcpdump 監控客戶端發過來的所有SQL語句OracleTCP客戶端SQL
- sql 中的with 語句使用SQL
- 使用sql語句查詢平均值,使用sql語句查詢資料總條數, not in 篩選語句的使用SQL
- vim下快速輸入sql語句SQL
- 使用sql語句分析雙色球SQL
- SQL語句使用總結(一)SQL
- SQL查詢語句使用 (轉)SQL
- 使用mysqlsniffer捕獲SQL語句MySql
- linux下實現tcpdumpLinuxTCP
- SQL語句SQL
- Java中如何解析SQL語句、格式化SQL語句、生成SQL語句?JavaSQL
- 淺析PowerBuilder下動態SQL語句UISQL
- 使用hint來調優sql語句SQL
- Fastapi sqlalchemy DBApi 直接使用sql語句ASTAPISQL
- Linux下邏輯測試語句引數和流程控制語句 if語句Linux
- 動態sql語句來刪除使用者下的物件SQL物件
- 利用tcpdump簡易抓取MySQL Query LogTCPMySql
- 【SQL】Oracle SQL join on語句and和where使用區別SQLOracle
- Linux-MySQL基本命令-SQL語句LinuxMySql
- sql語句大全SQL
- 共享SQL語句SQL
- SQL語句整理SQL
- SQL基本語句SQL
- 精妙Sql語句SQL
- SQL語句集合SQL
- oracle sql語句OracleSQL
- sql語句 求救!SQL
- SQL精妙語句SQL
- SQL語句收集SQL
- 常用SQL語句SQL
- sql常用語句SQL
- oracle之PLSql語言(二)sql語句的使用OracleSQL
- 查詢UNIX/LINUX 下的佔用CPU資源的SQL語句LinuxSQL
- 【SQL】10 SQL UPDATE 語句SQL
- 【SQL】11 SQL DELETE 語句SQLdelete
- RMAN 提示符下執行SQL語句SQL
- SQL語句為什麼不會共享(下)SQL