d.
最后,重新编译compile所有的对象。
SQL> SET SERVEROUTPUT OFF
SQL> @?/rdbms/admin/utlrp.sql
DOC>
DOC>? 1. Query showing jobs created by UTL_RECOMP
DOC>? ? ? ? SELECT job_name FROM dba_scheduler_jobs
DOC>? ? ? ? ? ? WHERE job_name like 'UTL_RECOMP_SLAVE_%';
DOC>
DOC>? 2. Query showing UTL_RECOMP jobs that are running
DOC>? ? ? ? SELECT job_name FROM dba_scheduler_running_jobs
DOC>? ? ? ? ? ? WHERE job_name like 'UTL_RECOMP_SLAVE_%';
DOC>#
SQL>?
SQL> DECLARE
? 2? ? threads pls_integer := &&1;
? 3? BEGIN
? 4? ? utl_recomp.recomp_parallel(threads);
? 5? END;
? 6? /
在三个脚本中,笔者认为第三个脚本最重要。如果有组件在重构之后还存在问题,就体现在这个环节中。因为这个过程会将所有的元数据对象依次并行进行编译,如果组件有问题,是会有编译故障的。我们从输出的结果,可以看出是否是成功的。
如果有问题,通常第三个脚本会有明确的错误列表。
SQL> EXECUTE dbms_registry_sys.validate_components;
FAILED CHECK FOR PACKAGE BODY CTX_ADM
Warning: XDB now invalid, invalid objects found:
object_name? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? object_type
-------------------------------------------------------
DBMS_XDBZ0? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? PACKAGE BODY
DBMS_XDBZ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? PACKAGE BODY
DBMS_XDB? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? PACKAGE BODY
DBMS_XDBUTIL_INT? ? ? ? ? ? ? ? ? ? ? ? ? PACKAGE BODY
XDB$PATCHUPSCHEMA? ? ? ? ? ? ? ? ? ? ? ? ? ? PROCEDURE
XDB$ACL_PKG_INT? ? ? ? ? ? ? ? ? ? ? ? ? ? PACKAGE BODY
ORDIM INVALID OBJECTS: ORDIMAGE - INVALID - TYPE BODY
ORDIM INVALID OBJECTS: SI_STILLIMAGE - INVALID - TYPE BODY
ORDIM INVALID OBJECTS: ORDDICOM - INVALID - TYPE BODY
ORDIM INVALID OBJECTS: ORDPLSGWYUTIL - INVALID - PACKAGE BODY
ORDIM INVALID OBJECTS: ORDIMGSI_PKG - INVALID - PACKAGE BODY
ORDIM INVALID OBJECTS: ORD_DICOM_PKG - INVALID - PACKAGE BODY
ORDIM INVALID OBJECTS: ORD_DICOM_CT - INVALID - PACKAGE BODY
ORDIM INVALID OBJECTS: ORD_DICOM_ADMIN_PRV - INVALID - PACKAGE BODY
ORDIM INVALID OBJECTS: ORD_DICOM_ADMIN - INVALID - PACKAGE BODY
FAILED CHECK FOR FUNCTION APEX_APPLICATION_GET_PG_TNAME
PL/SQL procedure successfully completed.
完成了编译之后,就可以重新启动数据库。如果没有进一步的问题,就可以恢复使用。
[oracle@localhost backup]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.4.0 Production on Sun Sep 27 11:42:52 2015
Copyright (c) 1982, 2013, Oracle.? All rights reserved.
SQL> conn / as sysdba
Connected.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 5344731136 bytes
Fixed Size? ? ? ? ? ? ? ? ? 2262656 bytes
Variable Size? ? ? ? ? ? 1207961984 bytes
Database Buffers? ? ? ? 4127195136 bytes
Redo Buffers? ? ? ? ? ? ? ? 7311360 bytes
Database mounted.
Database opened.
3、结论
重构数据库元数据,是我们修复一些数据库故障的方法之一。但是,这种方法并不能完全解决所有元数据问题。一些由于Oracle Bug潜在引起的问题,是不能通过这种途径进行解决的。