How To fix Oracle 19c PDB clone cross differente RU CDB, Then PDB in restricted

几年前12c刚release时测试过一系列pdb的功能,其中<Oracle 12c R2 New Feature: Hot Clone A PDB (12.2热克隆)>有小测试一下12.2的pdb hot clone,最近看到一个案例是19c 在不同的RU版本的CDB之间通过PDB clone迁移的数据库,从19.6 clone到19.11后PDB 变为restricted受限模式,查询PDB_PLUG_IN_VIOLATIONS看到如下错误:

‘19.11.0.0.0 Release_Update 2104130040’ is installed in the CDB but ‘19.6.0.0.0 Release_Update 1912171550’ is installed in the PDB

那测试2个场景:
1,19.6 RU to 19.11 RU
2, 19.6 RU带一个oneoff patch(19.11 fixed) to 19.11 RU

19.6 RU to 19.11 RU

[oracle@anbob OPatch]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Dec 8 01:01:51 2022
Version 19.6.0.0.0
Copyright (c) 1998, 2019, Oracle.  All rights reserved.
SQL> create pluggable database pdbtt admin user pdb1admin identified by pdb1admin file_name_convert=('/u01/app/oracle/oradata/ORCLTT/pdbseed','/u01/app/oracle/oradata/ORCLTT/pdbtt');
SQL> alter pluggable database all open;

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB                            READ WRITE NO
         4 PDBTT                          READ WRITE NO

[oracle@anbob OPatch]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Dec 8 01:02:04 2022
Version 19.11.0.0.0
Copyright (c) 1982, 2020, Oracle.  All rights reserved.

SQL> create public database link dblink_clone_pdb connect to system identified by "oracle" using '192.168.0.51:1521/orcltt'; 

SQL> create pluggable database clone_pdb from pdbtt@dblink_clone_pdb file_name_convert=('/u01/app/oracle/oradata/ORCLTT/pdbtt','/u01/app/oracle/oradata/ORCLTT/clone_pdb');
Pluggable database created.

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB                            READ WRITE NO
         4 CLONE_PDB                      MOUNTED

SQL> alter pluggable database CLONE_PDB open;
Warning: PDB altered with errors.

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB                            READ WRITE NO
         4 CLONE_PDB                      READ WRITE YES


SQL> select name, cause, type, message, status, action from PDB_PLUG_IN_VIOLATIONS where type like 'ERROR%' and status like 'PENDING';
NAME        CAUSE       TYPE    MESSAGE   
--------    ---------  -----    --------------------------------------------------------------------                                                                                                                           STATUS    ACTION
CLONE_PDB   SQL Patch   ERROR   '19.11.0.0.0 Release_Update 2104130040' is installed in the CDB but '19.6.0.0.0 Release_Update 1912171550' is installed in the PDB   PENDING   Call datapatch to install in the PDB or the CDB


解决

[oracle@anbob OPatch]$ ./datapatch -verbose
SQL Patching tool version 19.11.0.0.0 Production on Thu Dec  8 01:31:47 2022
Copyright (c) 2012, 2021, Oracle.  All rights reserved.

Log file for this invocation: /u01/app/oracle/cfgtoollogs/sqlpatch/sqlpatch_36866_2022_12_08_01_31_47/sqlpatch_invocation.log

Connecting to database...OK
Gathering database info...done

Note:  Datapatch will only apply or rollback SQL fixes for PDBs
       that are in an open state, no patches will be applied to closed PDBs.
       Please refer to Note: Datapatch: Database 12c Post Patch SQL Automation
       (Doc ID 1585822.1)

Bootstrapping registry and package to current versions...done
Determining current state...done

Current state of interim SQL patches:
  No interim patches found

Current state of release update SQL patches:
  Binary registry:
    19.11.0.0.0 Release_Update 210413004009: Installed
  PDB CDB$ROOT:
    Applied 19.11.0.0.0 Release_Update 210413004009 successfully on 08-DEC-22 01.09.42.503697 AM
  PDB CLONE_PDB:
    Applied 19.6.0.0.0 Release_Update 191217155004 successfully on 08-DEC-22 01.05.58.491994 AM
  PDB PDB:
    Applied 19.11.0.0.0 Release_Update 210413004009 successfully on 08-DEC-22 01.09.48.660777 AM
  PDB PDB$SEED:
    Applied 19.11.0.0.0 Release_Update 210413004009 successfully on 08-DEC-22 01.09.45.566126 AM

Adding patches to installation queue and performing prereq checks...done
Installation queue:
  For the following PDBs: CDB$ROOT PDB$SEED PDB
    No interim patches need to be rolled back
    No release update patches need to be installed
    No interim patches need to be applied
  For the following PDBs: CLONE_PDB
    No interim patches need to be rolled back
    Patch 32545013 (Database Release Update : 19.11.0.0.210420 (32545013)):
      Apply from 19.6.0.0.0 Release_Update 191217155004 to 19.11.0.0.0 Release_Update 210413004009
    No interim patches need to be applied

Installing patches...
Patch installation complete.  Total patches installed: 1

Validating logfiles...done
Patch 32545013 apply (pdb CLONE_PDB): SUCCESS
  logfile: /u01/app/oracle/cfgtoollogs/sqlpatch/32545013/24175065/32545013_apply_ORCLTT_CLONE_PDB_2022Dec08_01_32_04.log (no errors)
SQL Patching tool complete on Thu Dec  8 01:35:15 2022


[oracle@anbob OPatch]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Dec 8 01:35:24 2022
Version 19.11.0.0.0
Copyright (c) 1982, 2020, Oracle.  All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.11.0.0.0

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB                            READ WRITE NO
         4 CLONE_PDB                      READ WRITE YES
SQL> alter pluggable database CLONE_PDB close immediate;
Pluggable database altered.

SQL> alter pluggable database CLONE_PDB open;
Pluggable database altered.

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB                            READ WRITE NO
         4 CLONE_PDB                      READ WRITE NO
SQL>

19.6 RU带一个oneoff patch(19.11 fixed) to 19.11 RU

# 19.6 找一个小oneoff patch 31142749,该patch在19.11是修复的测试是否影响
[oracle@anbob 31142749]$ ll
total 8
drwxr-x--- 3 oracle oinstall   20 Aug 13  2021 etc
drwxr-x--- 4 oracle oinstall   30 Aug 13  2021 files
-rw-rw-r-- 1 oracle oinstall 6213 Aug 13  2021 README.txt

[oracle@anbob 31142749]$ /u01/app/oracle/product/19.3.0/db_1/OPatch/opatch apply
...
Is the local system ready for patching? [y|n]
Y (auto-answered by -silent)
User Responded with: Y
Backing up files...
Applying interim patch '31142749' to OH '/u01/app/oracle/product/19.3.0/db_1'

Patching component oracle.rdbms.rsf, 19.0.0.0.0...

Patching component oracle.rdbms.rman, 19.0.0.0.0...

Patching component oracle.rdbms, 19.0.0.0.0...
Patch 31142749 successfully applied.
OPatch succeeded.

[oracle@anbob trace]$ opatch lspatches
31142749;QUERY ON ALL_ARGUMENTS SLOW IN 19.6 PDB
30557433;Database Release Update : 19.6.0.0.200114 (30557433)
29585399;OCW RELEASE UPDATE 19.3.0.0.0 (29585399)

OPatch succeeded.

# 19.11 RU
SQL> create pluggable database clone_pdb2 from pdbtt@dblink_clone_pdb file_name_convert=('/u01/app/oracle/oradata/ORCLTT/pdbtt','/u01/app/oracle/oradata/ORCLTT/clone_pdb2');
Pluggable database created.


SQL> alter pluggable database CLONE_PDB2 open;
Warning: PDB altered with errors.

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB                            READ WRITE NO
         4 CLONE_PDB                      READ WRITE NO
         6 CLONE_PDB2                     READ WRITE YES



SQL> select name, cause, type, message, status, action from PDB_PLUG_IN_VIOLATIONS where type like 'ERROR%' and status like 'PENDING';
NAME         CAUSE       TYPE    MESSAGE                                                                                                                              STATUS    ACTION
CLONE_PDB2   SQL Patch   ERROR   '19.11.0.0.0 Release_Update 2104130040' is installed in the CDB but '19.6.0.0.0 Release_Update 1912171550' is installed in the PDB   PENDING   Call datapatch to install in the PDB or the CDB

解决

[oracle@anbob OPatch]$ ./datapatch -verbose
SQL Patching tool version 19.11.0.0.0 Production on Thu Dec  8 01:56:36 2022
Copyright (c) 2012, 2021, Oracle.  All rights reserved.

Log file for this invocation: /u01/app/oracle/cfgtoollogs/sqlpatch/sqlpatch_43830_2022_12_08_01_56_36/sqlpatch_invocation.log

Connecting to database...OK
Gathering database info...done

Note:  Datapatch will only apply or rollback SQL fixes for PDBs
       that are in an open state, no patches will be applied to closed PDBs.
       Please refer to Note: Datapatch: Database 12c Post Patch SQL Automation
       (Doc ID 1585822.1)

Bootstrapping registry and package to current versions...done
Determining current state...done

Current state of interim SQL patches:
  No interim patches found

Current state of release update SQL patches:
  Binary registry:
    19.11.0.0.0 Release_Update 210413004009: Installed
  PDB CDB$ROOT:
    Applied 19.11.0.0.0 Release_Update 210413004009 successfully on 08-DEC-22 01.09.42.503697 AM
  PDB CLONE_PDB:
    Applied 19.11.0.0.0 Release_Update 210413004009 successfully on 08-DEC-22 01.35.11.641369 AM
  PDB CLONE_PDB2:
    Applied 19.6.0.0.0 Release_Update 191217155004 successfully on 08-DEC-22 01.05.58.491994 AM
  PDB PDB:
    Applied 19.11.0.0.0 Release_Update 210413004009 successfully on 08-DEC-22 01.09.48.660777 AM
  PDB PDB$SEED:
    Applied 19.11.0.0.0 Release_Update 210413004009 successfully on 08-DEC-22 01.09.45.566126 AM

Adding patches to installation queue and performing prereq checks...done
Installation queue:
  For the following PDBs: CDB$ROOT PDB$SEED PDB CLONE_PDB
    No interim patches need to be rolled back
    No release update patches need to be installed
    No interim patches need to be applied
  For the following PDBs: CLONE_PDB2
    No interim patches need to be rolled back
    Patch 32545013 (Database Release Update : 19.11.0.0.210420 (32545013)):
      Apply from 19.6.0.0.0 Release_Update 191217155004 to 19.11.0.0.0 Release_Update 210413004009
    No interim patches need to be applied

Installing patches...
Patch installation complete.  Total patches installed: 1

Validating logfiles...done
Patch 32545013 apply (pdb CLONE_PDB2): SUCCESS
  logfile: /u01/app/oracle/cfgtoollogs/sqlpatch/32545013/24175065/32545013_apply_ORCLTT_CLONE_PDB2_2022Dec08_01_56_53.log (no errors)
SQL Patching tool complete on Thu Dec  8 02:00:04 2022



[oracle@anbob OPatch]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Dec 8 02:00:29 2022
Version 19.11.0.0.0
Copyright (c) 1982, 2020, Oracle.  All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.11.0.0.0

SQL> show pdbs;
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB                            READ WRITE NO
         4 CLONE_PDB                      READ WRITE NO
         6 CLONE_PDB2                     READ WRITE YES
SQL> alter pluggable database CLONE_PDB2 close immediate;
Pluggable database altered.

SQL> alter pluggable database CLONE_PDB2 open;
Pluggable database altered.

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB                            READ WRITE NO
         4 CLONE_PDB                      READ WRITE NO
         6 CLONE_PDB2                     READ WRITE NO

Summary:
当从低RU向高版本RU clone PDB时,PDB open后会因为数据字典的版本不一致,启动到受限模式,无论是否有不兼容oneoff patch, 直接在目标执行datapatch -verbose时会自动更新RU不一致的PDB, 同时也会检查是否有需要回滚的patch. 应用完opatch后,需要再重启一下PDB 恢复正常模式。