1. 程式人生 > 資料庫 >Oracle利用errorstack追蹤tomcat報錯ORA-00903 無效表名的問題

Oracle利用errorstack追蹤tomcat報錯ORA-00903 無效表名的問題

現象

tomcat錯誤日誌斷斷續續報ORA-00903: invalid table name,並無具體SQL與表名,需要排查哪段程式碼寫入了無效表名,
可以通過ORACLE提供的errorstack追蹤報錯SQL。
由於生產資料無法取出,以下皆為測試環境測試還原生產錯誤。

errorstack簡介

設定errorstack,在發生特定的ORA錯誤時會記錄發生問題的會話,語句以及各個程序的trace檔案,
在alert日誌中有記錄錯誤記錄的trace檔案位置,也可以給單獨會話開啟errorstack,追蹤會話報錯資訊,可以通過
下面兩個方法開啟:

/*level0僅轉儲錯誤堆疊
/*level1轉儲錯誤堆疊和函式呼叫堆疊

/*level2Level1+ProcessState
/*level3Level2+Contextarea(顯示所有cursors,著重顯示當前cursor)

(1)altersession/system

altersession/systemsetevents'<error_number>tracenameerrorstacklevel3';
/*error_number為ORA錯誤後編號。

(2)oradebug

/*使用oradebug需要使用者具有sysdba許可權
SQL>oradebugsetospid/setmypid/setorapid<pid>;

SQL>oradebugdumperrorstack3

可以通過下面方法檢視當前系統開啟errorstack狀態:

SQL>setserveroutputon
SQL>oradebugsetmypid
SQL>oradebugeventdumpsession/system;

追蹤

SQL>altersystemsetevents'903tracenameerrorstacklevel3';
alter日誌:

TueJun0914:23:442020
OSPid:10855executedaltersystemsetevents'903tracenameerrorstacklevel3'

追蹤結果

alert日誌資訊:

alert日誌資訊:

TueJun0914:28:042020
Errorsinfile/u01/app/oracle/diag/rdbms/honor/honor1/trace/honor1_ora_7205.trc:
ORA-00903:表名無效
TueJun0914:28:062020
Dumpingdiagnosticdataindirectory=[cdmp_20200609142806],requestedby(instance=1,osid=7205),summary=[abnormalprocesstermination].

檢視對應trc追蹤檔案:

***2020-06-0914:28:04.303
***SESSIONID:(26.661)2020-06-0914:28:04.303
***CLIENTID:()2020-06-0914:28:04.303
***SERVICENAME:(honor)2020-06-0914:28:04.303
***MODULENAME:(SQL*Plus)2020-06-0914:28:04.303
***ACTIONNAME:()2020-06-0914:28:04.303
dbkedDefDump():Startinganon-incidentdiagnosticdump(flags=0x0,level=3,mask=0x0)
-----ErrorStackDump-----
ORA-00903:表å<90><8d>æ<97>æ<95><88>
-----CurrentSQLStatementforthissession(sql_id=0vaqwchf1y3fq)-----
insertintonullvalues(1)

找到具體sql,拿給開發人員,修改相關邏輯,錯誤修復。

關閉errorstack

SQL > alter system set events '903 trace name errorstack off';

總結

到此這篇關於Oracle利用errorstack追蹤tomcat報錯ORA-00903 無效表名的文章就介紹到這了,更多相關oracle ORA-00903 無效表名內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!