作者:黄董一叶知秋_821 | 来源:互联网 | 2014-07-13 17:52
Oracle创建Job时遇到ORA-04063SYS.DBMS_INTERNAL_LOGSTDBY的解决办法项目上需要使用job在每月月初重置序列,在我本机的Oracle上创建job成功了,但在项目的测试平台上创建却报了ORA-04063的错误,详见下图:在网...SyntaxH
Oracle创建Job时遇到ORA-04063 SYS.DBMS_INTERNAL_LOGSTDBY的解决办法
项目上需要使用job在每月月初重置序列,在我本机的Oracle上创建job成功了,
但在项目的测试平台上创建却报了ORA-04063的错误,详见下图:
在网上搜索,有人说要重新编译DBMS_INTERNAL_LOGSTDBY这个包体,尝试了一下,编译后还是有错。 www.2cto.com
在PL/SQL中查看DBMS_INTERNAL_LOGSTDBY,发现其依赖的视图“DBA_LOGSTDBY_PROGRESS”有错误,打开“DBA_LOGSTDBY_PROGRESS”的DDL语句并执行,报“找不到system.logmnr_session$”的错误:
经过查找发现system用户下的确没有logmnr_session$这张表,于是我从其他
数据库拷贝system.logmnr_session$的DDL语句过来执行。然后再执行创建“DBA_LOGSTDBY_PROGRESS”
的DDL语句,依然报错:
查看LOGSTDBY_LOG的DDL语句,并执行:
提示找不到“system.logmnr_log$”,再从其他数据库拷贝system.logmnr_log$的
DDL语句过来执行,然后再创建LOGSTDBY_LOG,成功了:
从上图可见“LOGSTDBY_LOG”上的红叉没有了,而且依赖它的“DBA_LOGSTDBY_PROGRESS”
也正常了。至此解决了“DBMS_INTERNAL_LOGSTDBY”包体依赖的错误中的“DBA_LOGSTDBY_PROGRESS”。
www.2cto.com
回头查看“DBMS_INTERNAL_LOGSTDBY”发现其依赖仍有错误,这次是视图“DBA_LOGSTDBY_LOG”:
重新执行“DBA_LOGSTDBY_LOG”的DDL语句竟然成功了,没有报错,但是红叉还在,
将其重新编译,红叉消失了。再重新编译“DBMS_INTERNAL_LOGSTDBY”,也正常了,
这样就解决了“ORA-04063”的错误。
接下来创建个job验证一下:
可见job创建成功。
写的这么绕关键就是缺少了system.logmnr_session$和system.logmnr_log$这两张表。
作者 cuihaiyang