ORA-00604: error occurred at recursive SQL level %s 表示資料庫執行內部遞歸 SQL (操作資料字典、系統表) 時發生錯誤。使用者發出一條 SQL,Oracle 背後可能執行數十條遞歸 SQL (Level 1, Level 2...)。ORA-604 只是包裝錯誤,**真正原因藏在伴隨的後續錯誤中** (如 ORA-00942, ORA-04031, ORA-01555 等)。
$ORACLE_BASE/admin//bdump/alert_.log ,搜尋 ORA-600、ORA-00604、CHANGE 等關鍵字。init.ora 後重啟。event = "00604 trace name errorstack"
在 init.ora 加入,重啟後再現錯誤會在 USER_DUMP_DEST 生成詳細堆疊追蹤檔。OPEN_CURSORS 過小,且 Java 代碼未顯式關閉 Statement (僅關閉 ResultSet)。OPEN_CURSORS 至 200+;代碼確保 stmt.close();DBA 監控 V$OPEN_CURSORS、V$SYSSTAT。ORA-00942。執行 catpatch.sql 修補。ORA-00604 level 1 + ORA-04045 + ORA-06508 (LBACSYS.LBAC_EVENTS 編譯失敗)。SHUTDOWN IMMEDIATE;
STARTUP MIGRATE;
ALTER VIEW lbacsys.lbac$all_table_policies COMPILE;
ALTER PACKAGE lbacsys.lbac_events COMPILE BODY;
SHUTDOWN IMMEDIATE;
STARTUP;
ORA-00604 level 1 + ORA-04031: unable to allocate 4200 bytes ... "library cache"。SHARED_POOL_SIZE 重啟;或打補丁包修復。SQL_TRACE + TKPROF 格式化追蹤檔,定位失敗遞歸 SQL:DELETE FROM SDO_GEOM_METADATA_TABLE WHERE SDO_OWNER = 'WAPCOMM'。MDSYS.SDO_GEOM_METADATA_TABLE 視圖失效,系統嘗試清理中繼資料失敗。DROP USER MDSYS CASCADE 移除相關物件;或建立同義詞指向正確物件。ALTER SESSION SET SQL_TRACE=TRUE → 執行失敗 SQL → ALTER SESSION SET SQL_TRACE=FALSE → 分析 USER_DUMP_DEST 最新追蹤檔尾部,找到具體遞歸 SQL 與真實錯誤碼。SQL_TRACE=TRUE 重啟 → 重現連線失敗 → 關庫關閉追蹤 → 分析所有追蹤檔找出共同遞歸 SQL 與錯誤。ORA-00704 bootstrap process failure + ORA-00604 level 1 + ORA-01502 index SYS.I_DEPENDENCY1 unusable。SQL_TRACE 顯示啟動過程查詢 OBJ$, USER$ 時走索引 I_DEPENDENCY1 失敗。CATALOG.SQL/CATPROC.SQL 修復字典不一致。ORA-00604 非獨立錯誤,而是「遞歸 SQL 失敗」的容器。**核心排查路徑:Alert Log → 伴隨錯誤碼 → SQL_TRACE/Event 10046 定位具體遞歸 SQL → 對症下藥**。養成升級後驗證、操作前備份、追蹤檔分析習慣,可化險為夷。