数据库版本10.2.0.4
首先这个东西记录了PL/SQL的一些错误信息,具体含义大家自己网上查查吧
其实这个错误是接着上次expdp的时候出现的,上次执行的脚本:
$ORACLE_HOME/rdbms/admin/catmet2.sql
$ORACLE_HOME/rdbms/admin/utlrp.sql
首先看一下catmet2.sql 做了些什么
-- create the types
exec dbms_metadata_build.set_debug(false);
exec DBMS_METADATA_DPBUILD.create_table_export;
exec DBMS_METADATA_DPBUILD.create_schema_export;
exec DBMS_METADATA_DPBUILD.create_database_export;
exec DBMS_METADATA_DPBUILD.create_transportable_export;
-- load XSL stylesheets
exec SYS.DBMS_METADATA_UTIL.LOAD_STYLESHEETS; 也只能看到这么多了,这个包是加密的
导致很多type错误,看了看具体的dba_errors错误信息,错误信息基本都是XDB.XDB$RAW_LIST_T和DBMS_RLMGR_DR这两个玩意找不到引起的,XDB是oracle XML database组件里面的,DBMS_RLMGR_DR是oracle rule manager里面的,于是怀疑组件是不是失效了,查了DBA_REGISTRY,果然很多失效组件,而且不只这两个,就连Oracle Database Catalog Views和Oracle Database Packages and Types状态也是INVALID状态,于是先重建了数据字典,也就是catproc.sql和catalog.sql,然后重新编译一下,也就是用这个utlrp.sql。再次查看DBA_REGISTRY,Database Catalog Views,Oracle Database Packages and Types,oracle rule manager都正常了,但是DBA_ERRORS里面还是很多错误信息,关DBMS_RLMGR_DR
的已经木有了,就剩下了XDB.XDB$RAW_LIST_T,说是这个TYPE木有定义,查看DBA_REGISTRY,原来是XML没有安装,ID 1292089.1这篇文章里面很详细,如果有XML,不正常的话,那就重新装一下,装之前,那么要REMOVE一下:
SQL> spool xdb_removal.log
SQL> set echo on;
SQL> connect / as sysdba
SQL> shutdown immediate;
SQL> startup
SQL> @?/rdbms/admin/catnoqm.sql
SQL> @?/rdbms/admin/utlrp.sql
SQL> spool off;
然后再安装,没有的话,直接安装即可:
SQL> spool xdb_install.log
SQL> set echo on;
SQL> connect / as sysdba
SQL> shutdown immediate;
SQL> startup;
SQL> @?/rdbms/admin/catqm.sql <XDB pwd> <XDB default tbs> <XDB temporary tbs>
SQL> @?/rdbms/admin/utlrp.sql
SQL> spool off
这里举个例子:SQL> @?/rdbms/admin/catqm.sql XDB XDB TEMP 后面跟这些跟的是XDB的密码,使用表空间以及临时表空间。
这里XML安装好以后,验证一下状态:
select comp_name, version, status
from dba_registry
where comp_id = 'XDB';
这里我是正常了,但是dba_errors还是依旧错误,依旧还是XDB.XDB$RAW_LIST_T木有定义,这个时候就奇怪了,而且
DESC XDB.XDB$RAW_LIST_T是存在,因为XDB是依赖于oracle intermedia的,于是我再次怀疑是Oracle interMedia有问题,果然状态是INVALID,果断重建。
至于怎么重建,其实也简单,看下这个:
more $ORACLE_HOME/ord/im/admin/README.txt 里面很详细记录了怎么重建oracle intermedia
其实就是几个包
@$ORACLE_HOME/ord/admin/ordinst.sql SYSAUX SYSAUX
@$ORACLE_HOME/ord/im/admin/iminst.sql 如果没有安装,直接按这个安装即可
如果安装了状态不对,那么先干掉吧
@$ORACLE_HOME/ord/im/admin/imdinst.sql
@$ORACLE_HOME/ord/im/admin/imdtyp.sql
用这两个包干掉后,再重建一次,完了用@$ORACLE_HOME/ord/im/admin/imchk.sql验证一下,那么就OK了。
重建以后,问题终于解决了,dba_errors终于没有错误信息了。
我在另一台机器测试运行$ORACLE_HOME/rdbms/admin/catmet2.sql ,是没有问题的,而且那个库只装了数据字典的组件,看来这个包对于其他组件是木有依赖的,只是运行后导致了很多oracle组件失效才引起这么多错误