天天看點

ORACLE存儲過程多次調試,不定時卡死

基本要素(時間、使用者、問題)

研發在進行一個過程的調試,回報該過程調試不定期卡死,點取消無反映,從新開一個測試視窗依然卡死,懷疑是資料庫問題,請求診斷。

問題分析

步驟一:問題驗證

         首先想進行問題重制,于是遠端連接配接到資料庫,新開一個視窗進行調試,執行研發的調試過程,如下

ORACLE存儲過程多次調試,不定時卡死

         多次調試未重制問題現象,詢問情況,研發人員告知其問題依舊,而且目前正處在卡死的情況中,懷疑是否會話在等待立即檢視會話等待事件,如下

ORACLE存儲過程多次調試,不定時卡死

         發現都是SQL*Net空閑等待,懷疑是否出現死鎖,于是檢視alert日志,未發現deadlock的錯誤資訊,也可以排除死鎖。

步驟二:進行hang分析

         問題仍然沒有定位,由于目前調試處于卡死的狀态,想通過hang分析來進行問題,診斷,于是執行hanganalyze 5跟蹤,得到日志如下:

*** 2014-09-09 16:31:10.052

*** SESSION ID:(49.34904) 2014-09-0916:31:10.052

*** CLIENT ID:() 2014-09-09 16:31:10.052

*** SERVICE NAME:(ydtest) 2014-09-0916:31:10.052

*** MODULE NAME:(sqlplus.exe) 2014-09-0916:31:10.052

*** ACTION NAME:() 2014-09-09 16:31:10.052

Processing Oradebug command 'hanganalyze 5'

*** 2014-09-09 16:31:10.052

===============================================================================

HANG ANALYSIS:

 instances (db_name.oracle_sid): ydtest.ydtest

 oradebug_node_dump_level: 5

 analysis initiated by oradebug

===============================================================================

Chains most likely to have caused the hang:

 <no chains found>

===============================================================================

No chains found.

===============================================================================

Extra information that will be dumped athigher levels:

可以看到,并未出現hang住現象,問題陷入僵局,目前隻能懷疑是資料庫bug情況,無意中詢問研發人員調試的操作過程,發現他每次操作的時候都是開始很調試很流暢,然後點取消調試,再調試就卡死,而我這邊同樣操作未出現該問題,進一步咨詢plsql dev版本,研發用的是8.2,而我用的是10版本,可能與版本有關系。

         是以,通過本次分析,資料庫不存在等待情況,那麼出現卡死就有兩種可能:

1.資料庫BUG,目前執行個體為11.1.0.7,不是我們推薦的資料庫版本;

2.PLSQL DEV操作步驟或版本有問題;

解決過程

嘗試更換Plsql dev工具

         由于資料庫BUG判斷和更新比較複雜,是以先嘗試用最簡單的更換Plsql Dev工具的方式排除問題,采用最新的10版本工具,安裝測試,經過研發人員的試用,目前為止未在出現卡死現象,是以暫時先用這種方式再觀察。

         得出結論,如果過程調試莫名卡死,在排除鎖表、等待事件後,有可能是PLSQL dev工具的問題

關鍵知識點

deadlock(死鎖):如果資料庫發生死鎖,會在alert日志中有錯誤資訊。

hang分析:利用hanganalyze指令,生成日志分析資料庫卡住原因。

過程調試卡死,在排查了業務邏輯、鎖表、等待事件後,可能是工具的BUG引起。

繼續閱讀