Downgrade einer RAC-Datenbank mittels garantiertem Restore-Punkt

19. April 2020 Aus Von Markus Flechtner

Erfahrungsgemäß versucht man, nach einem Datenbank-Upgrade meistens, in jedem Fall auf der höheren Version zu bleiben und evtl. auftretende Anwendungsprobleme in der neuen Umgebung zu löschen. Aber wenn “alle Stricke reißen” oder wenn unmittelbar während oder nach des Upgrades etwas schiefgeht und man schnell zur alten Version zurück muss, dann ist ein Downgrade die Methode der Wahl. Eine Methode dazu ist der Downgrade zu einem garantierten Restore-Punkt. Wie funktioniert das bei einer RAC-Datenbank?

Schauen wir uns das Ganze einmal am Beispiel eines Upgrades von Oracle 11.2.0.4 nach Oracle 19c bzw. dem darauf folgenden Downgrade an:

Wichtig: Damit ein Downgrade möglich sein soll, darf der COMPATIBLE-Parameter der Datenbank nach dem Upgrade nicht geändert (erhöht) werden.

Vorbereitung

Ausgangspunkt ist eine Oracle 11.2.0.4-Datenbank:

oracle@geri:~/ [UPGR1] srvctl status database -d UPGR
Instance UPGR2 is running on node freki
Instance UPGR1 is running on node geri

oracle@geri:~/ [UPGR1] /u00/app/oracle/product/11.2.0.4/OPatch/opatch lspatches
30298532;Database Patch Set Update : 11.2.0.4.200114 (30298532)

OPatch succeeded.

Vor dem Upgrade wird ein garantierter Restore-Punkt gesetzt. Wenn man mit eigenen Skripten („manual upgrade“) arbeitet, dann muss man diesen Schritt selbst in seine Upgrade-Prozedur einbauen. „autoupgrade“ erzeugt automatisch einen garantierten Restore-Punkt.
Beim Database Upgrade Assistant („dbua“) ist das Recovery über einen Restore-Punkt eine der Varianten, die man auswählen kann:

Wenn man einen garantierten Restore-Punkt manuell anlegen möchte, dann ist der Syntax wie folgt:

CREATE RESTORE POINT <restore point name> GUARANTEE FLASHBACK DATABASE;

Stand nach dem Upgrade

oracle@geri:~/ [UPGR1] sqlplus "/ as sysdba"

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Apr 9 15:20:06 2020
Version 19.6.0.0.0
Copyright (c) 1982, 2019, Oracle.  All rights reserved.

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

SQL> show parameter compatible

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
compatible                           string      11.2.0.4.0
noncdb_compatible                    boolean     FALSE

SQL> select scn,time,name,GUARANTEE_FLASHBACK_DATABASE from v$restore_point;
       SCN TIME                                NAME                 GUA
---------- ----------------------------------- -------------------- ---
    671558 09-APR-20 02.15.24.000000000 PM     GRP_1586434524412    YES

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

Flashback der Datenbank

Der Flashback der Datenbank erfolgt in der 19c-Umgebung:

oracle@geri:~/ [UPGR1] srvctl stop database -d UPGR

oracle@geri:~/ [UPGR1] sqlplus "/ as sysdba"

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Apr 9 20:34:35 2020
Version 19.6.0.0.0
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
Connected to an idle instance.

SQL> startup mount;
ORACLE instance started.

Total System Global Area 3154113400 bytes
Fixed Size                  8901496 bytes
Variable Size             704643072 bytes
Database Buffers         2432696320 bytes
Redo Buffers                7872512 bytes
Database mounted.

SQL>  flashback database to restore point GRP_1586434524412;
Flashback complete.

SQL> shutdown immediate;
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.

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

Wechsel zurück in die Oracle 11.2-Umgebung

Beim Cluster muss dabei zusätzlich das in der Cluster-Registry (OCR) gespeicherte ORACLE_HOME auf die alte Version zurückgesetzt werden. Dafür muss srvctl in der 19c-Variante verwendet werden.

oracle@geri:~/ [UPGR1] srvctl downgrade database -db UPGR -oraclehome /u00/app/oracle/product/11.2.0.4 -targetversion 11.2.0.4

Zurücksetzen des ORACLE_HOMEs:

oracle@geri:~/ [UPGR1] echo $ORACLE_HOME
/u00/app/oracle/product/11.2.0.4

Öffnen der Datenbank mit RESETLOGS

oracle@geri:~/ [UPGR1] sqlplus "/ as sysdba"

SQL*Plus: Release 11.2.0.4.0 Production on Thu Apr 9 20:43:26 2020
Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup mount;
ORA-01078: failure in processing system parameters
LRM-00101: unknown parameter name '__unified_pga_pool_size'
ORA-01078: failure in processing system parameters
LRM-00101: unknown parameter name '__unified_pga_pool_size'

Oracle 19c hat also ein paar neue Parameter in das spfile geschrieben, die Oracle 11g nicht kennt. Bevor wir die Datenbank als 11.2-Datenbank starten können, müssen wir diese Parameter also erstmal entfernen:

SQL> create pfile='/tmp/initUPGR.ora' from spfile='+DATA/upgr/spfileupgr.ora';
File created.

SQL> !vi /tmp/initUPGR.ora

Danach können wir die Datenbank mit RESETLOGS öffnen und legen anschließend noch ein Oracle 11.2-kompatibles spfile an:

SQL> startup mount pfile='/tmp/initUPGR.ora';
ORACLE instance started.

Total System Global Area 3140026368 bytes
Fixed Size                  2257352 bytes
Variable Size             822087224 bytes
Database Buffers         2298478592 bytes
Redo Buffers               17203200 bytes
Database mounted.
SQL> alter database open resetlogs;

Database altered.

SQL> create spfile='+DATA/upgr/spfileupgr.ora' from pfile='/tmp/initUPGR.ora';
File created.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

Zum Abschluß starten wir die Datenbank mit srvctl als RAC-Datenbank:

oracle@geri:~/ [UPGR1] srvctl start database -d UPGR

oracle@geri:~/ [UPGR1] srvctl status database -d UPGR
Instance UPGR2 is running on node freki
Instance UPGR1 is running on node geri

Anschließend droppen wir noch den Restore-Point:

oracle@geri:~/ [UPGR1] sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Thu Apr 9 20:58:38 2020
Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

SQL> drop restore point GRP_1586434524412;
Restore point dropped.

SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

Zusammenfassung

Der Downgrade mittels einem garantierten Restore-Point ist eine schnelle und einfache Methode um einen Datenbank-Downgrade durchzuführen. Dabei sind aber einige Punkte zu beachten:

  1. Der COMPATIBLE-Parameter muss auf dem Ursprungswert bleiben, d.h. in der höheren Version stehen die neuen Features nicht bzw. nur teilweise zur Verfügung.
  2. Bei einem Downgrade wird die Datenbank auf den Stand VOR dem Upgrade zurückgesetzt, d.h. eventuelle Datenänderungen gehen verloren. Die Auswertung der Redolog- und Archivelog-Dateien mittels LogMiner kann hier Abhilfe schaffen; damit kann man die Datenänderungen ggf. rekonstruieren
  3. Bei einem garantierten Restore-Point werden die Flashback-Logs nicht überschrieben, d.h. es muss genug Platz in der Fast-Recovery-Area vorhanden sein. Aus diesem Grund sollte man den Restore-Point auch löschen, sobald man ihn nicht mehr benötigt.
  4. Vom Downgrade einer Datenbank ohne Clusterware unterscheidet sich das Vorgehen bei einer RAC-Datenbank nur durch die beiden Schritte mit srvctl, insbesondere dem “srvctl downgrade”.

 

Referenzen / weitere Informationen

 

 

Amazon Partner Link: