Flashback Database und Multitenant

Beim Einspielen von Patches und Updates, sei es in der Datenbank selbst oder von Seiten der Applikation, ergibt sich oftmals die Anforderung, die Änderungen auf einfache Art rückgängig machen zu können. Dafür bietet sich das Flashback Database Feature an, mit der eine komplette Datenbank praktisch rückwärts recovered werden kann. Dazu werden zusätzlich zu den Archivelogs noch Flashbacklogs erzeugt, die ein komplettes Point In Time Recovery mit einem vollständigen Restore der Datenbank überflüssig machen. Was aber, wenn nur eine einzelne Pluggable Database zurückgesetzt werden soll, die anderen Pluggable Databases aber auf dem aktuellen Stand verbleiben müssen? Das erklären wir im Folgenden.

Voraussetzung ist, das die Container Database(CDB) im Archivelog Modus läuft. Dann kann das Flashback Database Feature aktiviert werden. Allerdings geht das nicht einzeln für jede Pluggable Database (PDB) sondern nur global für die CDB.

 

SQL> show pdbs

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


SQL> alter session set container=PDB2;

Session altered.

SQL> select log_mode, flashback_on from v$database;

LOG_MODE     FLASHBACK_ON
------------ ------------------
ARCHIVELOG   NO

SQL> alter database flashback on;
alter database flashback on
*
ERROR at line 1:
ORA-03001: unimplemented feature


SQL> conn / as sysdba
Connected.
SQL> alter database flashback on;

Database altered.

SQL> select log_mode, flashback_on from v$database;

LOG_MODE     FLASHBACK_ON
------------ ------------------
ARCHIVELOG   YES

 

Sollte sich danach die Notwendigkeit ergeben, eine einzelne PDB zurückzusetzen, so muss auch diese Operation zentral in der CDB durchgeführt werden, denn auch das ist innerhalb einer PDB nicht erlaubt.

 

SQL> conn pdbadmin/*******@"ol76-dg1:1521/pdb2" as sysdba
Connected.

SQL> shutdown immediate
Pluggable Database closed.

SQL> select status from v$instance;

STATUS
------------
MOUNTED


SQL> flashback database to timestamp to_timestamp('2020-08-25 13:00:00', 'yyyy-mm-dd hh24:mi:ss');
flashback database to timestamp to_timestamp('2020-08-25 13:00:00', 'yyyy-mm-dd hh24:mi:ss')
*
ERROR at line 1:
ORA-65040: operation not allowed from within a pluggable database

 

Innerhalb der CDB kann die PDB zurückgesetzt und anschließend per "open resetlogs" wieder geöffnet werden. Alle anderen PDBs bleiben davon unberührt. Im Beispiel befindet sich die PDB2 bereits im MOUNT Status, denn die PDB wurde ja im vorangegangenen Versuch bereits gestoppt.

 

SQL> conn / as sysdba
Connected.
SQL> show pdbs

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

SQL> flashback pluggable database pdb2 to timestamp to_timestamp('2020-08-25 13:00:00', 'yyyy-mm-dd hh24:mi:ss');

Flashback complete.

SQL> alter pluggable database pdb2 open;
alter pluggable database pdb2 open
*
ERROR at line 1:
ORA-01113: file 30 needs media recovery
ORA-01110: data file 30:
'/u01/app/oracle/oradata/ACDB/ADB28E5A4ADB4013E0531438A8C0B903/datafile/o1_mf_us
ers_hn9vm25p_.dbf'

SQL> alter pluggable database pdb2 open resetlogs;

Pluggable database altered.

 

Das bedeutet also, das der PDB Admin diese Operationen nicht selbstständig übernehmen kann. Vielmehr werden dafür Berechtigungen auf der Container Ebene benötigt.

Verwandte Blogbeiträge:

Kommentare

Keine Kommentare

Kommentar schreiben

* Diese Felder sind erforderlich