1. Start
  2. Unternehmen
  3. Blog
  4. Autoupgrade mit Refreshable PDB

Autoupgrade mit Refreshable PDB

Überblick

In diesem Blogbeitrag wird das Upgrade von einer 12.2 NONCDB auf eine 19.X Refreshable PDB mit dem Autoupgrade Tool demonstriert. Dabei möchte ich zuerst auf die Blogeinträge meines Kollegen Jörg Sobottka zum Autoupgrade Tool verweisen, die dessen Abläufe sehr gut beschreiben
(Blogbeitrag "Von Non-CDB zur PDB innerhalb eines Releases - mit dem Autoupgrade-Tool" und 
Blogbeitrag "Oracle Datenbankupgrades mit autoupgrade.jar - Anleitung zum Überspringen von Fixups").
Bei großen Datenbanken spielt die Reduzierung der Downtime bei Upgrades ein entscheidende Rolle. Deshalb soll in diesem Beitrag gezeigt werden, wie sich die Verfügbarkeit der Quelle erhöht. Dabei wird das ab Oracle Version 12.2 bekannte Prinzip der Refreshable PDB genutzt, Quelle ist jedoch eine NONCDB Datenbank (und keine PDB).

1. Voraussetzungen auf der NONCDB Datenbank

Bevor der Upgrade-Prozess gestartet wird, sollte die Quelle komplett gesichert werden, um bei Problemen einen schnellen Rückbau des Produktionssystems zu ermöglichen. Die Quelldatenbank muss mindestens Oracle Version 12.2 haben und sich im Archivelog Modus befinden. Weiterhin wird ein Benutzer mit den entsprechenden Privilegien benötigt. 
Dieser Benutzer wird Zielnutzer des später anzulegenden Datenbanklinks.

 

$ . oraenv

ORACLE_SID = [NONCDB] ? NONCDB122

SYS> archive log list 
     Database log mode	       Archive Mode
     Automatic archival	       Enabled
...

SYS@NONCDB122> create user dblinkuser identified by <password>;
SYS@NONCDB122> grant create session, create pluggable database, select_catalog_role to dblinkuser;
SYS@NONCDB122> grant read on sys.enc$ to dblinkuser;

2. Voraussetzungen auf 19.X PDB Ziel

Auf dem Zielsystem ist der CDB Root Container mit der PDB$SEED angelegt und befindet sich ebenfalls im Archivelog-Modus.
Weiterhin ist ein Datenbanklink zur NONCDB-Quelle anzulegen und zu testen.
 

 

$ . oraenv
ORACLE_SID = [CDB2] 

SYS@CDB2> create database link clonepdb
          connect to dblinkuser
          identified by <password>
          using 'NONCDB122';

## Test Funktionalität Datenbank Link

SYS@CDB2> select name from v$datafile@clonepdb;

NAME
------------------------------------------------
/u01/app/oracle/oradata/NONCDB122/system01.dbf
/u01/app/oracle/oradata/NONCDB122/sysaux01.dbf
/u01/app/oracle/oradata/NONCDB122/undotbs01.dbf
/u01/app/oracle/oradata/NONCDB122/users01.dbf

3. Autoupgrade ausführen

Aufgrund der ständigen Weiterentwicklung sollte immer die aktuelle Version des Upgrade Tools verwendet werden (Doc ID 2485457.1).
Im Beispiel hat das Autoupgrade die folgende Version:

 

$ORACLE_HOME/jdk/bin/java -jar autoupgrade.jar -version

build.version 24.1.240315
build.date 2024/03/15 14:26:29 -0400
build.hash 9109eef02
build.hash_date 2024/03/15 13:36:47 -0400
build.supported_target_versions 12.2,18,19,21,23
build.type production
build.label (HEAD, tag: v24.1, origin/stable_devel, stable_devel)
build.MOS_NOTE 2485457.1
build.MOS_LINK support.oracle.com/epmos/faces/DocumentDisplay

 

Für die Konfiguration benötigen wir eine Textdatei. Die wichtigsten neuen Parameter sind:

--> upg1.source_dblink.NONCDB122=CLONEPDB 60
Hier wird der vorher angelegte Datenbanklink angegeben und die Refresh Intervalle. In diesem Testfall wurde 60 Sekunden angegeben, bei Produktionssystemen ist dieser Wert natürlich höher.

--> upg1.start_time=+10
Wann soll das eigentliche Upgrade gestartet werden?
In diesem Testfall wird angegeben, dass das Upgrade um 10 Minuten verzögert wird. In dieser Zeit erfolgt das Kopieren der Datendateien und es können auf der Quelle weitere Transaktionen stattfinden.

Es kann aber auch ein konkreter Startzeitpunkt angegeben werden, z.B.
--> upg1.start_time=+1h40m
--> upg1.start_time=30/12/2019 15:30:00
--> upg1.start_time=01/11/2020 01:30:15
--> upg1.start_time=2/5/2020 3:30:50


Die komplette Textdatei sieht wie folgt aus:

 

$ cat config_NONCDB_toPDB_refreshable.txt

global.autoupg_log_dir=/home/oracle/autoupgrade

#
# Database Noncdb to PDB upgrade
#
upg1.log_dir=/home/oracle/autoupgrade/kurs
upg1.sid=NONCDB122
upg1.source_home=/u01/app/oracle/product/12.2.0/dbhome_1
upg1.source_dblink.NONCDB122=CLONEPDB 60
upg1.target_cdb=CDB2
upg1.target_home=/u01/app/oracle/product/19.0.0/dbhome_1
upg1.target_pdb_name.NONCDB122=PDB23
upg1.target_pdb_copy_option=file_name_convert=('NONCDB122', 'CDB2/PDB23')
upg1.start_time=+10m
upg1.upgrade_node=localhost 
upg1.run_utlrp=yes
upg1.timezone_upg=yes

 

Im nächsten Schritt werden die Voraussetzungen der Quelldatenbank analysiert (MODE ANALYZE Kommando).

 

$ORACLE_HOME/jdk/bin/java -jar autoupgrade.jar -config config_NONCDB_toPDB_refreshable.txt -mode analyze

AutoUpgrade 24.1.240315 launched with default internal options
Processing config file ...

+--------------------------------+
| Starting AutoUpgrade execution |
+--------------------------------+
1 Non-CDB(s) will be analyzed
Type 'help' to list console commands

upg> lsj -a
upg> +----+---------+---------+---------+-------+----------+-------+----------------------------+
|Job#|  DB_NAME|    STAGE|OPERATION| STATUS|START_TIME|UPDATED|                     MESSAGE|
+----+---------+---------+---------+-------+----------+-------+----------------------------+
| 100|NONCDB122|PRECHECKS|EXECUTING|RUNNING|  14:37:03| 6s ago|Loading database information|
+----+---------+---------+---------+-------+----------+-------+----------------------------+
Total jobs 1

. . . 

The command lsj is running every 7 seconds. PRESS ENTER TO EXIT
+----+---------+---------+---------+-------+----------+-------+----------------------------+
|Job#|  DB_NAME|    STAGE|OPERATION| STATUS|START_TIME|UPDATED|                     MESSAGE|
+----+---------+---------+---------+-------+----------+-------+----------------------------+
| 100|NONCDB122|PRECHECKS|EXECUTING|RUNNING|  14:37:03|45s ago|Loading database information|
+----+---------+---------+---------+-------+----------+-------+----------------------------+
Total jobs 1

The command lsj is running every 7 seconds. PRESS ENTER TO EXIT
Job 100 completed
------------------- Final Summary --------------------
Number of databases            [ 1 ]

Jobs finished                  [1]
Jobs failed                    [0]

Please check the summary report at:
/home/oracle/autoupgrade/cfgtoollogs/upgrade/auto/status/status.html
/home/oracle/autoupgrade/cfgtoollogs/upgrade/auto/status/status.log

 

Die Analyse war erfolgreich und damit kann das eigentliche Upgrade beginnen (MODE DEPLOY Kommando).

 

$ORACLE_HOME/jdk/bin/java -jar autoupgrade.jar -config config_NONCDB_toPDB_refreshable.txt -mode deploy

upg> Copying remote database 'NONCDB12' as 'PDB23' for job 101

upg> lsj -a 10 

+----+---------+--------+---------+-------+----------+-------+---------------------------+
|Job#|  DB_NAME|   STAGE|OPERATION| STATUS|START_TIME|UPDATED|                    MESSAGE|
+----+---------+--------+---------+-------+----------+-------+---------------------------+
| 101|NONCDB122|CLONEPDB|EXECUTING|RUNNING|  13:41:38| 7s ago|Creating pluggable database|
+----+---------+--------+---------+-------+----------+-------+---------------------------+
Total jobs 1
...
The command lsj is running every 10 seconds. PRESS ENTER TO EXIT
+----+---------+----------+---------+-------+----------+-------+-------------------+
|Job#|  DB_NAME|     STAGE|OPERATION| STATUS|START_TIME|UPDATED|            MESSAGE|
+----+---------+----------+---------+-------+----------+-------+-------------------+
| 101|NONCDB122|REFRESHPDB|EXECUTING|RUNNING|  13:41:38| 2s ago|Starts in 9 minutes|
+----+---------+----------+---------+-------+----------+-------+-------------------+
...

 

In der Spalte MESSAGE ist die Zeit erkennbar, wann das Upgrade startet (hier 9 Minuten), d.h. solange können noch auf der Quelle Transaktionen durchgeführt werden. Das soll im Folgenden hier simuliert werden:

 

SYS@NONCDB122> create table after_deploy_start as select * from dba_objects;

Table created.

SYS@NONCDB122> select count(*) from after_deploy_start;

  COUNT(*)
----------
     72766

 

Diese Änderungen in der Quelle werden entsprechend des Refresh Intervalls (hier 60 Sekunden) auf der Ziel PDB PDB23 refreshed, was ein Ausschnitt aus der Alertdatei der CDB2 zeigt:

 

...
Completed: ALTER PLUGGABLE DATABASE PDB23 REFRESH
2023-11-10T13:36:51.279012+01:00
ALTER PLUGGABLE DATABASE PDB23 REFRESH
2023-11-10T13:36:54.117207+01:00
Applying media recovery for pdb-0 from SCN 3056677 to SCN 3056978
Remote log information: count-1
thr-1,seq-4,logfile-/u01/app/oracle/fast_recovery_area/NONCDB122/foreign_archivelog/NONCDB12/2023_11_10/o1_mf_1_4_3289603523_.arc,los-1449036,nxs-18446744073709551615,maxblks-0
PDB23(6):Media Recovery Start
2023-11-10T13:36:54.118144+01:00
PDB23(6):Serial Media Recovery started
PDB23(6):max_pdb is 6
2023-11-10T13:36:54.300284+01:00
PDB23(6):Media Recovery Log /u01/app/oracle/fast_recovery_area/NONCDB122/foreign_archivelog/NONCDB12/2023_11_10/o1_mf_1_4_3289603523_.arc
2023-11-10T13:36:55.047059+01:00
PDB23(6):Incomplete Recovery applied until change 3056978 time 11/10/2023 13:36:51
2023-11-10T13:36:55.051214+01:00
PDB23(6):Media Recovery Complete (CDB2)
...

 

Wenn die Wartezeit vorbei, erfolgt ein letztes Refresh, danach wird das Refresh der PDB beendet
(Kommando: ALTER PLUGGABLE DATABASE PDB23 REFRESH MODE NONE) und der Upgrade-Prozess beginnt.

Ab dieser Zeit werden Änderungen auf der Quelle nicht übernommen, sodass diese heruntergefahren werden sollte.

 

## Ausschnitt aus Alertdatei CDB2
...
Completed: ALTER PLUGGABLE DATABASE PDB23 REFRESH MODE NONE
...
alter pluggable database "PDB23" open upgrade
PDB23(6):Pluggable database PDB23 opening in read write
...
Post plug operations are now complete.
Pluggable database PDB23 with pdb id - 6 is now marked as NEW.
...
Completed: alter pluggable database "PDB23" open upgrade
...

## Autoupgrade Session ...

+----+---------+---------+---------+-------+----------+-------+----------------+
|Job#|  DB_NAME|    STAGE|OPERATION| STATUS|START_TIME|UPDATED|         MESSAGE|
+----+---------+---------+---------+-------+----------+-------+----------------+
| 101|NONCDB122|DBUPGRADE|EXECUTING|RUNNING|  13:41:38|40s ago|0%Upgraded PDB23|
+----+---------+---------+---------+-------+----------+-------+----------------+
...
## Ziel Datenbank CDB2

SYS@CDB2> show pdbs

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ----------------- ---------- ----------
	 2     PDB$SEED			  READ ONLY  NO
...
	 6     PDB23			  MIGRATE    YES

 

Nach dem Upgrade der Ziel PDB erfolgen noch die Data-Dictionary-Konvertierung und weitere Nacharbeiten:

 

...
+----+---------+-----------+---------+-------+----------+-------+-------------------+
|Job#|  DB_NAME|      STAGE|OPERATION| STATUS|START_TIME|UPDATED|            MESSAGE|
+----+---------+-----------+---------+-------+----------+-------+-------------------+
| 101|NONCDB122|NONCDBTOPDB|EXECUTING|RUNNING|  13:41:38| 1s ago|noncdb_to_pdb - 60%|
+----+---------+-----------+---------+-------+----------+-------+-------------------+

...

+----+---------+-----------+---------+-------+----------+-------+----------------+
|Job#|  DB_NAME|      STAGE|OPERATION| STATUS|START_TIME|UPDATED|         MESSAGE|
+----+---------+-----------+---------+-------+----------+-------+----------------+
| 101|NONCDB122|NONCDBTOPDB|EXECUTING|RUNNING|  13:41:38| 9s ago|80% utlrp 18,571|
+----+---------+-----------+---------+-------+----------+-------+----------------+
...
ob 101 completed
------------------- Final Summary --------------------
Number of databases            [ 1 ]

Jobs finished                  [1]
Jobs failed                    [0]
Jobs restored                  [0]
Jobs pending                   [0]

Please check the summary report at:
/home/oracle/autoupgrade/cfgtoollogs/upgrade/auto/status/status.html
/home/oracle/autoupgrade/cfgtoollogs/upgrade/auto/status/status.log

 

Die Protokolldatei upg_summary.log zeigt den Erfolg des Autoupgrades:

 

Oracle Database Release 19 Post-Upgrade Status Tool    11-10-2023 14:07:2
Container Database: CDB2
[CON_ID: 6 => PDB23]

Component                               Current         Full     Elapsed Time
Name                                    Status          Version  HH:MM:SS

Oracle Server                          UPGRADED     19.17.0.0.0  00:14:43
JServer JAVA Virtual Machine           UPGRADED     19.17.0.0.0  00:00:52
Oracle XDK                             UPGRADED     19.17.0.0.0  00:01:06
Oracle Database Java Packages          UPGRADED     19.17.0.0.0  00:00:11
OLAP Analytic Workspace                UPGRADED     19.17.0.0.0  00:00:10
Oracle Label Security                  UPGRADED     19.17.0.0.0  00:00:06
Oracle Database Vault                  UPGRADED     19.17.0.0.0  00:00:17
Oracle Text                            UPGRADED     19.17.0.0.0  00:00:28
Oracle Workspace Manager               UPGRADED     19.17.0.0.0  00:00:25
Oracle Real Application Clusters       UPGRADED     19.17.0.0.0  00:00:00
Oracle XML Database                    UPGRADED     19.17.0.0.0  00:01:10
Oracle Multimedia                      UPGRADED     19.17.0.0.0  00:00:53
Spatial                                UPGRADED     19.17.0.0.0  00:03:42
Oracle OLAP API                        UPGRADED     19.17.0.0.0  00:00:12
Datapatch                                                        00:00:23
Final Actions                                                    00:00:27
Post Upgrade                                                     00:00:00

Total Upgrade Time: 00:24:56 [CON_ID: 6 => PDB23]

Database time zone version is 26. It is older than current release time
zone version 32. Time zone upgrade is needed using the DBMS_DST package.

Grand Total Upgrade Time:    [0d:0h:25m:25s]

 

Am Ende bleibt nur noch die Überprüfung, ob unsere Testtable, die nach dem Start des Autoupgrade DEPLOY Kommandos angelegt wurde, in der Ziel PDB PDB23 angekommen ist.

 

SYS@CDB2> show pdbs

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2     PDB$SEED			  READ ONLY  NO
...
	 6     PDB23			  READ WRITE NO

SYS@CDB2> conn sys/Welcome_1@localhost/pdb23 as sysdba
Connected.

SYS@localhost/pdb23> show con_name

CON_NAME
------------------------------
PDB23

SYS@localhost/pdb23> select count(*) from after_deploy_start;

  COUNT(*)
----------
     72766

Zusammenfassung

In diesem Blogbeitrag wurde ein Autoupgrade einer 12.2 NONCDB Datenbank in eine 19.17 PDB mit Refresh gezeigt. Damit kann die Downtime der Produktionsdatenbank während des Upgrade-Vorgangs deutlich reduziert werden.
In analoger Weise kann ein Upgrade erfolgen, wenn NONCDB und CDB im gleichen Release (z.B.19.X) laufen. Das Autoupgrade dauert dann natürlich kürzer, weil kein Upgrade des Hauptreleases angewendet werden muss.

Kommentare

Keine Kommentare

Kommentar schreiben

* Diese Felder sind erforderlich