分类: Oracle
2006-07-25 09:28:00
我的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: 导出终止失败
等错误