oracle9i資料庫在打patch後發現在alert中每天定時會產生一些ora-00600錯誤,錯誤程式碼為:
Errors in file /oracle/admin/c3rpt/bdump/c3rpt_j006_28040.trc:
ORA-00600: internal error code, arguments: [17069], [0x3E8C55AE0], [], [], [], [], [], []
在相應的trace檔案中可以看到如下資訊:
KSTDUMP: End of in-memory trace dump
ORA-00600: internal error code, arguments: [17069], [0x3E8C55AE0], [], [], [], [], [], []
ORA-06508: PL/SQL: could not find program unit being called
ORA-06512: at line 1
OPIRIP: Uncaught error 447. Error stack:
ORA-00447: fatal error in background process
ORA-00600: internal error code, arguments: [17069], [0x3E8C55AE0], [], [], [], [], [], []
ORA-06508: PL/SQL: could not find program unit being called
ORA-06512: at line 1
其中ora-06508資訊說明是要呼叫的物件不存在, 透過dba_objects查詢, 發現要呼叫的物件狀態為invalid, 在dba_objects中還存在一些這樣狀態的資料庫物件.
於是呼叫$ORACLE_HOME/RDBMS/ADMIN/utlrp.sql對資料庫中的invalid物件進行重新編譯.
編譯結束後連續跟蹤了幾天,沒有再次出現上述問題.
總結:utlrp.sql指令碼可以在資料庫執行的狀態下執行以編譯、資料庫中的invalid物件. oracle建議在對資料庫進行遷移、升級、降級後都執行一遍utlrp.sql以編譯無效物件。
為了保證系統的的資料詞典的完整性和有效性,最好的打patch後在migrate狀態下執行catpatch.sql,否則可能會在exp/imp時報EXP-00056: 遇到 ORACLE 錯誤 31600
ORA-31600: 輸入值 EMIT_SCHEMA 無效, 它用於引數 NAME, 位於函式 SET_TRANSFORM_PARAM 中
ORA-06512: 在"SYS.DBMS_SYS_ERROR", line 105
ORA-06512: 在"SYS.DBMS_METADATA_INT", line 3926
ORA-06512: 在"SYS.DBMS_METADATA_INT", line 4050
ORA-06512: 在"SYS.DBMS_METADATA", line 836
ORA-06512: 在line 1
EXP-00056: 遇到 ORACLE 錯誤 31600
ORA-31600: 輸入值 EMIT_SCHEMA 無效, 它用於引數 NAME, 位於函式 SET_TRANSFORM_PARAM 中
ORA-06512: 在"SYS.DBMS_SYS_ERROR", line 105
ORA-06512: 在"SYS.DBMS_METADATA_INT", line 3926
ORA-06512: 在"SYS.DBMS_METADATA_INT", line 4050
ORA-06512: 在"SYS.DBMS_METADATA", line 836
ORA-06512: 在line 1
EXP-00000: 匯出終止失敗
等錯誤