环境:

centos 7.5

oracle 12.2.0.1

报错:

执行一下报错:

更新dba_registry_sqlpatch

$ORACLE_HOME/OPatch/datapatch -verbose 将已安装的补丁写入数据库。
报错如图:

 解决方法:

sqlplus / as sysdba
SQL> spool fix_cat_logfile.txt
SQL> startup upgrade
SQL> spool fix_cat_logfile.txt
SQL > @?/rdbms/admin/catproc.sql
SQL > @?/rdbms/admin/utlrp.sql
SQL> spool off

 注:

utlrp.sql脚本可以在数据库运行的状态下执行以编译、数据库中的invalid对象.

oracle建议在对数据库进行迁移、升级、降级后都运行一遍utlrp.sql以编译无效对象。
上述方法解决问题后,再重新跑一下。
$ORACLE_HOME/OPatch/datapatch -verbose
 

这里我安装了两个补丁包,一个是update包,一个是ojvm包,我是两个正常的apply,然后verbose,都是报上面的错,然后用了上面的方法跑完脚本后,直接在第二个包的文件内跑一次 $ORACLE_HOME/OPatch/datapatch -verbose 就可以了,不用再回到之前那个补丁包下再去跑这个了。

02-13 10:16