Einhängen einer “RAC-PDB” in eine Single-Instance-Datenbank

1. September 2022 Aus Von Markus Flechtner

In diesem Blog-Post geht es mal wieder um eine Frage eines Kursteilnehmers: kann man eine Pluggable Database, die in einer RAC-Datenbank angelegt wurde, in eine Single-Instance-Container-Datenbank einhängen. Also grob gesagt: wie verhält es sich mit der RAC-Option beim Umhängen?

TL; DR: Es funktioniert.

 

Testen wir das doch einmal:

Mein Labor-Setup:

Eine RAC-CDB mit zwei Instanzen:

oracle@ernie:~/ [DEMOCDB1] srvctl status database -db DEMOCDB
Instance DEMOCDB1 is running on node ernie
Instance DEMOCDB2 is running on node bert

oracle@ernie:~/ [DEMOCDB1] srvctl config database -db DEMOCDB
Database unique name: DEMOCDB
Database name: DEMOCDB
Oracle home: /u00/app/oracle/product/19.14
Oracle user: oracle
[…]

oracle@ernie:~/ [DEMOCDB1] sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Sep 1 08:59:07 2022
Version 19.14.0.0.0
Copyright (c) 1982, 2021, Oracle.  All rights reserved.

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.14.0.0.0

SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 DEMOPDB                        READ ONLY  NO
         6 MOVEPDB                        MOUNTED
SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.14.0.0.0

Dazu habe ich eine leere Single-Instance-CDB “SICDB” auf dem gleichen Rechner in der Version 19.16. Die zugehörige Software ist dabei ohne RAC-Option installiert. Wir haben also in diesem Fall nicht nur den Unterschied RAC vs. Single-Instance sondern auch unterschiedliche Patch-Stände.

Schritt 1: Aushängen der PDB MOVEPDB aus der RAC-CDB DEMOCDB

oracle@ernie:~/ [DEMOCDB1] sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Sep 1 09:33:42 2022
Version 19.14.0.0.0
Copyright (c) 1982, 2021, Oracle.  All rights reserved.

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.14.0.0.0

SQL> alter pluggable database MOVEPDB unplug into '/home/oracle/movepdb.xml';
Pluggable database altered.

SQL> drop pluggable database MOVEPDB keep datafiles;
Pluggable database dropped.

SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.14.0.0.0

Schritt 2: Einhängen der PDB in die Single-Instance CDB SICDB

oracle@ernie:~/ [SICDB] sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Sep 1 09:34:56 2022
Version 19.16.0.0.0
Copyright (c) 1982, 2022, Oracle.  All rights reserved.

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.16.0.0.0

SQL> create pluggable database MOVEPDB using '/home/oracle/movepdb.xml';
Pluggable database created.

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

Diese Meldung kommt nicht unerwartet, denn die Ausgangsversion war ja 19.14 und unsere Ziel-CDB SICDB hat die Version 19.16. Welche Probleme hat Oracle denn mit der neuen PDB?

SQL> column cause format a15
SQL> column message format a30
SQL> column action format a30
SQL> set linesize 120
SQL> set pagesize 200 
SQL> select TYPE,CAUSE,MESSAGE,ACTION from PDB_PLUG_IN_VIOLATIONS where name='MOVEPDB'
  2  and status <>'RESOLVED';

TYPE      CAUSE           MESSAGE                        ACTION
--------- --------------- ------------------------------ ------------------------------
WARNING   Parameter       CDB parameter cluster_database Please check the parameter in
                           mismatch: Previous TRUE Curre the current CDB
                          nt FALSE

WARNING   Parameter       CDB parameter _fix_control mis Please check the parameter in
                          match: Previous '29331066:1',  the current CDB
                          '28965084:1', '28776811:1', '2
                          8498976:1', '28567417:1', '285
[…]
                           '29738374:1', '33325981:1' Cu
                          rrent NULL

WARNING   Parameter       CDB parameter pga_aggregate_ta Please check the parameter in
                          rget mismatch: Previous 1600M  the current CDB
                          Current 1200M

WARNING   Oracle Opatch   Oracle opatch mismatch: opatch Install the Oracle opatch in t
                           33561310 is missing in the CD he CDB.
                          B.

WARNING   Oracle Opatch   Oracle opatch mismatch: opatch Install the Oracle opatch in t
                           33515361 is missing in the CD he CDB.
                          B.

WARNING   OPTION          Database option RAC mismatch:  Fix the database option in the
                          PDB installed version 19.0.0.0  PDB or the CDB
                          .0. CDB installed version NULL
                          .

ERROR     SQL Patch       Interim patch 34086870/2480307 Call datapatch to install in t
                          1 (OJVM RELEASE UPDATE: 19.16. he PDB or the CDB
                          0.0.220719 (34086870)): Instal
                          led in the CDB but not in the
                          PDB

ERROR     SQL Patch       Interim patch 33561310/2453886 Call datapatch to install in t
                          2 (OJVM RELEASE UPDATE: 19.14. he PDB or the CDB
                          0.0.220118 (33561310)): Not in
                          stalled in the CDB but install
                          ed in the PDB

ERROR     SQL Patch       '19.16.0.0.0 Release_Update 22 Call datapatch to install in t
                          07030222' is installed in the  he PDB or the CDB
                          CDB but '19.14.0.0.0 Release_U
                          pdate 2112251221' is installed
                           in the PDB


9 rows selected.

Ein großes Thema sind also fehlende Patches – wie erwartet. Diese werden als “ERROR” ausgegeben und verhindern das normale Öffnen der PDB.

Aber auch die fehlende RAC-Option wird bemängelt, allerdings nur als “Warning”. D.h. das sollte nach der Korrektur des Patch-Standes kein Problem mehr sein.

Wir lassen also erst einmal datapatch für die neue PDB MOVEPDB laufen:

Schritt 3: Datapatch für die PDB MOVEPDB

oracle@ernie:~/ [SICDB] $ORACLE_HOME/OPatch/datapatch -verbose -pdbs MOVEPDB
SQL Patching tool version 19.16.0.0.0 Production on Thu Sep  1 12:15:55 2022
Copyright (c) 2012, 2022, Oracle.  All rights reserved.

Log file for this invocation: /u00/app/oracle/cfgtoollogs/sqlpatch/sqlpatch_20152_2022_09_01_12_15_55/sqlpatch_invocation.log

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

[…]
Patch installation complete.  Total patches installed: 3

Validating logfiles...done
Patch 33561310 rollback (pdb MOVEPDB): SUCCESS
  logfile: /u00/app/oracle/cfgtoollogs/sqlpatch/33561310/24538862/33561310_rollback_SICDB_MOVEPDB_2022Sep01_12_17_28.log (no errors)
Patch 34133642 apply (pdb MOVEPDB): SUCCESS
  logfile: /u00/app/oracle/cfgtoollogs/sqlpatch/34133642/24865470/34133642_apply_SICDB_MOVEPDB_2022Sep01_12_17_52.log (no errors)
Patch 34086870 apply (pdb MOVEPDB): SUCCESS
  logfile: /u00/app/oracle/cfgtoollogs/sqlpatch/34086870/24803071/34086870_apply_SICDB_MOVEPDB_2022Sep01_12_17_52.log (no errors)

Automatic recompilation incomplete; run utlrp.sql to revalidate.
  PDBs: MOVEPDB

SQL Patching tool complete on Thu Sep  1 12:19:31 2022

Dann lassen wir nochmal utlrp.sql in der PDB laufen:

oracle@ernie:~/ [SICDB] sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Sep 1 12:21:24 2022
Version 19.16.0.0.0
Copyright (c) 1982, 2022, Oracle.  All rights reserved.

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.16.0.0.0

SQL> alter session set container=MOVEPDB;
Session altered.

SQL> @?/rdbms/admin/utlrp
[…]


PL/SQL procedure successfully completed.

Function dropped.

PL/SQL procedure successfully completed.


SQL> select count(*) from dba_invalid_objects;

  COUNT(*)
----------
         0

Zum Abschluß schließen und öffnen wir die PDB noch einmal:

SQL> alter pluggable database MOVEPDB close;
Pluggable database altered.

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

Und bei den “PLUG_IN_VIOLATIONS” gibt es auch keine Probleme mehr:

SQL>  select TYPE,CAUSE,MESSAGE,ACTION from PDB_PLUG_IN_VIOLATIONS where name='MOVEPDB'
  2  and status <>'RESOLVED';
no rows selected

 

Lange Rede, kurzer Sinn: Man kann eine “RAC-PDB” in eine Single-Instance-CDB einhängen. Und wenn beide CDBs den gleichen Patchstand haben, dann geht das auch mit einem einfachen Öffnen der PDB in der neuen CDB.