首页 » ORACLE 9i-23c » Troubleshooting Oracle 19c PDB受限,SQL patch ID/UID xxx … ROLLBACK with status WITH ERRORS in the xxx.

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,去源库传输过来。

打赏

, ,

对不起,这篇文章暂时关闭评论。