环境:
centos 7.5
oracle 12.2.0.1
报错:
执行一下报错:
更新dba_registry_sqlpatch
$ORACLE_HOME/OPatch/datapatch -verbose 将已安装的补丁写入数据库。
报错如图:
![oracle 12c 安装补丁报错 oracle 12c 安装补丁报错](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTAyNDA4OC8yMDE5MTAvMTAyNDA4OC0yMDE5MTAxNTIwMTMyNTk5MS0xMzI2NDIzNzU2LnBuZw%3D%3D.png?w=700&webp=1)
解决方法:
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
![oracle 12c 安装补丁报错 oracle 12c 安装补丁报错](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTAyNDA4OC8yMDE5MTAvMTAyNDA4OC0yMDE5MTAxNTIwMTU0NDU3My0xNDEzOTc3MzUzLnBuZw%3D%3D.png?w=700&webp=1)
这里我安装了两个补丁包,一个是update包,一个是ojvm包,我是两个正常的apply,然后verbose,都是报上面的错,然后用了上面的方法跑完脚本后,直接在第二个包的文件内跑一次 $ORACLE_HOME/OPatch/datapatch -verbose 就可以了,不用再回到之前那个补丁包下再去跑这个了。