使用tcpdump解決應用不能執行問題
今天有個應用需要上線,臨時維護人員發現這兩天加班準備用的生產資料突然跑不通流程了,喊應用人員分析應用、分析資料,結果沒有任何結果。由於此應用系統有封裝的包,所以應用那邊沒查出任何情況,連個報錯都沒打出來。
登上資料庫伺服器檢查,發現流程處於等待時資料庫無任何報錯、無任何鎖及等待。
用sql_trace跟蹤程式,也沒發現任何問題。懷疑是根本就沒有到sql這一步,於是採用tcpdump跟蹤網路資料,看看到底程式做了什麼操作。
[DB1] / # tcpdump -fRSttttX -s0 net 136.5.71.18 and tcp port 1521
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on en0, link-type 1, capture size 65535 bytes
…….
0x0020 5018 ffff e36e 0000 0065 0000 0600 0000 P.
0x0030 0000 0602 0101 0001 0a00 0000 0702 c102
0x0040 0801 0603 ba4e c000 0102 0000 0000 0000
0x0050 0401 3301 0102 057b 0000 0102 0003 0001 .
0x0060 2000 0000 0000 0000 0000 0000 0001 0100
0x0070 0000 0019 4f52 412d 3031 3430 333a 206e ....ORA-01403:.n
0x0080 6f20 6461 7461 2066 6f75 6e64 0a o.data.found.
此處的ORA-01403報錯是oracle的一個透明反饋,每次網路會話握手都會出現這個提示,我們運算元據庫時已經被過濾了,所以平時是看不到的
……
2011-06-05 17:17:56.057448 IP CP_DB1_Per.ncube-lm > app1.44581: P 2291867068:2291867176(108) ack 648803202 win 65535
0x0000 4500 0094 cfc7 4000 3c06 ce31 8805 4826
0x0010 8805 483a 05f1 ae25 889b 1dbc 26ab f382 ..
0020 5018 ffff 8ea8 0000 006c 0000 0600 0000 .
0x0030 0000 0402 049c 0001 0100 0001 0b00 0200 ................
0x0040 0000 0000 04ff ffff ff00 0000 0000 0000 ..........
0x0050 0000 0000 0000 3d4f 5241 2d30 3030 3031 ......=ORA-00001
0x0060 3a20 756e 6971 7565 2063 6f6e 7374 7261 :.unique.constra
0x0070 696e 7420 2843 504d 4953 2e50 4b5f 5441 int.(CP.PK_TA
0x0080 534b 5f53 4552 4941 4c29 2076 696f 6c61 SK_SERIAL).viola
0x0090 7465 640a ted.
突然這個ORA-00001報錯跳入眼簾,主鍵重複?!沒想到一出手就有收穫,呵呵,我笑……
看來程式不能跑通是主鍵重複造成的,但我還是對程式不能打出報錯很是鬱悶,為什麼要遮蔽錯誤,而且連個後門都沒有,還得我只有動用大殺器,這都是後話,不說了。有了思路,馬上行動,查詢該主鍵現在的最大值,
select max(TASK_SERIAL_ID) from cpmis.TASK_SERIAL;
MAX(TASK_SERIAL_ID)
-------------------
20050113
再查詢相關序列的當前值
select seq.nextval from dual;
NEXTVAL
----------
1000021
可以看到,明顯序列值小於表裡面的最大值,這就是造成主鍵唯一性出問題的原因。知道問題出在哪裡就可以處理了,直接把序列值的當前值調整到3000000,重新執行該程式,仍然報錯,繼續跟蹤,發現ora-0001錯誤仍然存在。仔細想下,會不會是還有其它序列也往這個表裡寫,問下應用開發人員,確實是這樣,鬱悶,而且不知道具體會用到哪些序列了,沒辦法,只有來強的了,把全部的序列的當前值都改為3000000以上。由於此資料庫裡一共有400多個序列,所以採用如下方式處理,並批量生產sql,單條更改示例如下,
SQL> select seq.nextval from dual;
NEXTVAL
----------
100
SQL> alter sequence seq increment by 3000000;
序列已更改。
SQL> select seq.nextval from dual;
NEXTVAL
----------
3000101
更改之後,程式流程終於跑通了。
嘴角微翹,提上電腦包,消失在門外,不帶走一個故障……
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11088128/viewspace-697211/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 解決WINDOWS8用內建帳號不能使用“應用商店”的問題Windows
- 10.2.0.1版本上sqlplus命令不能執行的問題解決SQL
- 菜鳥級問題,不能執行
- 【故障-ORACLE】OSWBB不能執行解決Oracle
- 執行 shell 指令碼 \r 問題解決指令碼
- 使用執行緒模擬解決銀行排隊叫號問題執行緒
- Web應用部署在WebLogic中Basic認證無法執行問題及解決Web
- 解決關於IIS gzip不能正常啟用的問題
- 解決 Windows 系統使用 Homestead 執行 Laravel 本地專案響應緩慢問題WindowsLaravel
- 解決Docker使用WSL2專案執行慢的問題Docker
- mongodb shell不能使用退格鍵的問題解決方案MongoDB
- 解決jenkins執行磁碟滿的問題Jenkins
- mysql執行truncate drop 時卡死問題解決MySql
- mac 下PyCharm執行報錯問題解決MacPyCharm
- 用informix使用者不能執行onmonitorORM
- vue 解決不能攜帶session問題VueSession
- 解決macOS vim 不能連按問題Mac
- websphere 應用超時問題的解決Web
- Angular應用解決跨域訪問的問題Angular跨域
- WPS 2019解決不能啟用巨集問題
- 如何解決win10系統cmd能執行javac卻不能執行java的問題Win10Java
- 解決 Windows 系統使用 Homestead 執行 Laravel 本地專案響應緩慢問題(轉)WindowsLaravel
- 解決 Git-bash 不能使用 Composer 命令的問題Git
- 多執行緒的安全問題及解決方案執行緒
- Python執行緒安全問題及解決方法Python執行緒
- DMAIC如何作為解決問題的方法執行?AI
- 不能建立降序索引的問題的解決索引
- 解決國內gem不能用的問題
- mysql 本機不能登入問題解決MySql
- 解決jdbc不能重連mysql的問題JDBCMySql
- 解決不能訪問 VMware Server Web Access 的問題ServerWeb
- vsCode不能執行vue命令解決方式VSCodeVue
- Android應用中使用執行時註解Android
- 使用工具分析 SAP UI5 應用前端執行的效能問題UI前端
- 使用redis分散式鎖解決併發執行緒資源共享問題Redis分散式執行緒
- 多執行緒併發同步問題及解決方案執行緒
- Java中解決多執行緒資料安全問題Java執行緒
- crontab不執行mysql的指令碼問題的解決!MySql指令碼