ORA-31626 ORA-4063 Package Body DBMS_INTERNAL_LOGSTDBY Has Errors

本文记录了解决Oracle数据库从物理standby转换到逻辑standby时遇到的问题,包括expdp/impdp无法使用及DBMS_JOB无法创建新JOB等问题。通过运行特定脚本解决了DBMS_INTERNAL_LOGSTDBY和DBMS_LOGREP_UTIL包的编译错误。

今天同事让帮忙处理一问题,将物理standby转换为逻辑standby失败,expdp/impdp无法使用,DBMS_JOB无法建立新的JOB.

expdp详细错误信息如下:

ORA-31626: job does not exist

ORA-04063: package body "SYS.DBMS_INTERNAL_LOGSTDBY" has errors

ORA-06508: PL/SQL: could not find program unit being called: "SYS.DBMS_INTERNAL_LOGSTDBY"

ORA-06512: at "SYS.KUPV$FT", line 834

ORA-04063: package body "SYS.DBMS_LOGREP_UTIL" has errors

ORA-06508: PL/SQL: could not find program unit being called: "SYS.DBMS_LOGREP_UTIL"

metalink上发现一个类似问题: [ID 799625.1] 

重新编译DBMS_INTERNAL_LOGSTDBY失败:

SQL> alter package DBMS_INTERNAL_LOGSTDBY compile;

 

Warning: Package altered with compilation errors.

查询错误信息:

SQL> select * from dba_errors where name = 'DBMS_INTERNAL_LOGSTDBY';

 

表或视图不存在.

文章中提到的表SYSTEM.LOGMNR_LOG$不存在,与我遇到的情况不一样.

 

建立SYSTEM.LOGMNR_LOG$ =>重建数据字典?

 

怀疑:logmnr不能使用(可惜当时没有测试),另一篇关于ORA-04063: package body "SYS.DBMS_LOGREP_UTIL" has errors提到下面的解决方案,但版本不同([ID 316247.1]),

 

1. Connect / as sysdba to database in sql plus session

2. Execute the following scripts located in the ORACLE_HOME/rdbms/admin directory.

 

 

SQL> @dbmslmd.sql

SQL> @prvtlmd.plb

 

3. Check for invalids

4. If no invalids run the export..

因之前做过DBMS_LOGMNR_D包的重建没有遇到问题,就直接运行了上面的脚本.

脚本运行后,查询SYSTEM.LOGMNR_LOG$表存在,expdp,dbms_job包使用正常.

 

 

后记:

同事提到另一解决方案是重建数据字典,因是生产库就没有做;

catproc.sql中有如下内容:

REM Make sure these are always called after dbmstrig.sql has been installed

@@dbmslm.sql

@@prvtlm.plb

@@dbmslmd.sql

@@prvtlmd.plb

@@prvtlmc.plb

其实上面的解决方案重建了部份数据字典,说明expdp引用了logmnr的内容.

疑问:不知直接运行prvtlm.plb能否解决?

 

itpub小虫提到运行prvtlsby.plb可解决(http://www.itpub.net/thread-1043403-1-1.html),那一种方案更好?不得而知,oracle东东太多,我仍需努力

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7419833/viewspace-631637/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7419833/viewspace-631637/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值