Oracle创建Job时遇到ORA-04063 SYS.DBMS_INTERNAL_LOGSTDBY的解决办法

  项目上需要使用job在每月月初重置序列,在我本机的Oracle上创建job成功了,但在项目的测试平台上创建却报了ORA-04063的错误,详见下图:

在网上搜索,有人说要重新编译DBMS_INTERNAL_LOGSTDBY这个包体,尝试了一下,编译后还是有错。

在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”。

回头查看“DBMS_INTERNAL_LOGSTDBY”发现其依赖仍有错误,这次是视图“DBA_LOGSTDBY_LOG”:

重新执行“DBA_LOGSTDBY_LOG”的DDL语句竟然成功了,没有报错,但是红叉还在,将其重新编译,红叉消失了。再重新编译“DBMS_INTERNAL_LOGSTDBY”,也正常了,这样就解决了“ORA-04063”的错误。

接下来创建个job验证一下:

可见job创建成功。

写的这么绕关键就是缺少了system.logmnr_session$和system.logmnr_log$这两张表,具体什么原因导致的我也不清楚。

 

你可能感兴趣的:(Oracle)