Troubleshooting Oracle 19c PDB受限,SQL patch ID/UID xxx … ROLLBACK with status WITH ERRORS in the xxx.
oracle最近的问题遇到了越来越少, 今日一客户oracle 19c数据库重启后pdb进入受限模式(restricted), 回想前几日有安装一个小补丁one-off patch,运行过datapatch当时没有重启应该是问题没有暴露出来,查看pdb_plug_in_violations确认问题原因并非该one-off patch,因早期该库是Dataguard standby激活,软件RU新于原主库。
该库oracle 12.1 RAC从原库dataguard 的standby激活,原primary安装的12.1 是19年PSU, 这套库今年安装时软件选择了22年的PSU, 但是忽略了数据库中字典记录的PSU信息与SQL patch可能与软件不匹配问题。 更新的PSU,从创建standby 到激活没有任何问题,直到最近修复一datapump bug,安装了one-off patch, 运行了datapatch (未指定参数). 最近重启pdb出现了受限。
SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY YES 3 PDB1 READ WRITE NO 4 PDB2 READ WRITE YES
查看pdb_plug_in_violations
select name, cause, type, message, status, action from PDB_PLUG_IN_VIOLATIONS where type like 'ERROR%' and status like 'PENDING' ; PDB2 SQL patch error SQL patch ID/UID 29774383/22961858 (Database PSU 12.1.0.2.190716, Oracle JavaVM Component (JUL2019)): ROLLBACK with status WITH ERRORS in the CDB.
重跑datapatch
$ datapatch -verbose
note:
执行不报错,但日志有报错,同时pdb_plug_in_violations还是相同的错误, datapatch 会自动apply或rollback
检查sql patch
select * from sys.dba_registry_sqlpatch; 或 SQL> set serverout on; SQL> exec dbms_qopatch.get_sqlpatch_status;
查看应该是包含了从原primary DB 带着dictionary里的有原库的ojvm ru ,出现db dict与db 软件不一致现象, 跑datapatch会验证dict,重启出现该问题。
解决方法
rollback SQL from db (via force rollback)
# $ORACLE_HOME/OPatch/datapatch -rollback 29774383/22961858 -force -verbose
note:
如果提示缺失SQL file,去源库传输过来。
对不起,这篇文章暂时关闭评论。