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