在使用 Oracle Database Upgrade Assistant (DBUA) 进行数据库升级时,出现报错提示ORA -04063:SYS.ALERT_QUE has errors ORA-06512:at SYS.DBMS_AQADM_SYS line xx;出现报错之后升级没有被停止,dbua进程仍然在工作;失效对象通常不会直接阻碍升级过程。DBUA 的主要任务是升级数据库和相关组件的版本,它并不依赖于所有对象的状态是否有效。然而,SYS.DBMS_AQADM_SYS包出现错误,最突出的表现是执行expdp备份时出现问题,以下几点需要注意:
1. **升级后状态**:虽然失效对象不会直接影响升级,但在升级完成后,这些对象仍然会保持失效状态。因此,在升级后,可能需要手动重新编译这些对象,以确保它们能正常工作。
2. **依赖性问题**:某些失效对象可能是由于依赖的其他对象失效或缺失导致的。在升级后,可能会遇到更多的依赖性问题,需要进一步排查和解决。
等待dbua执行升级完后再处理包失效问题
解决方法:
升级完成后验证包失效状态,重新执行utlrp.sql刷新编译失效的包DBMS_AQADM
su - oracle
sqlplus / as sysdba
检查失效包
SET SERVEROUTPUT ON;
EXECUTE DBMS_PREUP.INVALID_OBJECTS;或
select owner, object_type, status from dba_objects where object_name = 'DBMS_AQADM';
重新执行utlrp.sql刷新编译失效的包DBMS_AQADM
su - oracle
sqlplus / as sysdba
spool support.out
alter package sys.DBMS_AQADM compile;
alter package sys.DBMS_AQADM compile body;
-- If any ALTER fails, then check the errors:
select * from dba_errors where name = 'DBMS_AQADM' and type = 'PACKAGE BODY';
-- If it indicates:
missing : SYS.AQ$_SCHEDULES ;
missing/invalid package specification : DBMS_PRVTAQIP
-- These are both created by catqueue.sql which is run from catproc.sql:
-- Execute catproc.sql:
$ORACLE_HOME/rdbms/admin/catproc.sql //运行服务器端所需要的PL/SQL脚本
$ORACLE_HOME/rdbms/admin/utlrp.sql //刷新数据库其他功能的表和视图
spool off
成功解决包失效问题