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.
Kommentare
Keine Kommentare