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.


Über den Autor

Marco Mischke

Weitere Beiträge dieses Autors

Kommentare

Keine Kommentare

Kommentar schreiben

* Diese Felder sind erforderlich