DBA_ERRORS错误一例

数据库版本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一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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组件失效才引起这么多错误。

你活着,证明了什么?