利用errorstack事件進行錯誤跟蹤和診斷

llnnmc發表於2018-05-20

有時在執行一系列後臺SQLPL/SQL後出現了Oracle錯誤和異常,僅憑ORA錯誤號及簡單資訊提示難以確定錯誤發生的位置,此時可以利用errorstack事件幫助我們定位到準確的錯誤SQL,從而能有效的協助我們診斷問題。以下做個簡單測試,說明一下使用方法。


實驗前先建立一個測試表

conn scott/tiger

create table t1(id number, value number(2,1));


設定errorstack事件跟蹤

conn / as sysdba

alter system set events '1438 trace name errorstack forever, level 3';


實際中可以手動執行出現問題的後臺程式碼,獲取跟蹤檔案,這裡我們就簡單執行一個SQL做測試

conn scott/tiger

insert into t1 values(1, 100.2);


系統報錯:

第 1 行出現錯誤:

ORA-01438: 值大於為此列指定的允許精度


關閉errorstack事件跟蹤

conn / as sysdba

alter system set events '1438 trace name errorstack off';


開啟警告日誌,可以看到對事件的設定及對應的跟蹤檔案

Sun May 20 20:12:45 2018

OS Pid: 3924 executed alter system set events '1438 trace name errorstack forever, level 3'

Sun May 20 20:12:52 2018

Errors in file C:\ORACLE\diag\rdbms\mes\mes\trace\mes_ora_1340.trc:

ORA-01438: 值大於為此列指定的允許精度

Errors in file C:\ORACLE\diag\rdbms\mes\mes\trace\mes_ora_1340.trc:

ORA-01438: 值大於為此列指定的允許精度

Errors in file C:\ORACLE\diag\rdbms\mes\mes\trace\mes_ora_1340.trc:

ORA-01438: 值大於為此列指定的允許精度

Sun May 20 20:12:54 2018

Dumping diagnostic data in directory=[cdmp_20180520201254], requested by (instance=1, osid=1340), summary=[abnormal process termination].

Sun May 20 20:13:04 2018

OS Pid: 292 executed alter system set events '1438 trace name errorstack off'


檢視跟蹤檔案mes_ora_1340.trc的內容,可以看到發生錯誤的具體SQL資訊

----- Error Stack Dump -----

ORA-01438: 值大於為此列指定的允許精度

----- Current SQL Statement for this session (sql_id=5pwbn8v653a76) -----

insert into t1 values(1, 100.2)


----- Call Stack Trace -----


再往下就是棧的呼叫資訊,做進一步深入追蹤時可以參考。


找到了發生問題的SQL,就可以有針對性的進行分析和診斷了。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28974745/viewspace-2154787/,如需轉載,請註明出處,否則將追究法律責任。

相關文章