Mit der Oracle Datenbank 12c wurde unter anderem die Funktion RECOVER TABLE als ein Point-In-Time-Recovery (PITR) eingeführt. Das klingt interessant und dürfte bei vielen Nutzern auf Interesse stoßen.
Doch der Reihe nach: Wie wurde eine Tabelle bisher wiederhergestellt? Im Prinzip gab es bis 11gR2 drei Möglichkeiten:
- Flashback Table / Database
- der Import der Tabelle aus einem logischen Datenexport mittels import/impdp
- die Erstellung einer Datenbank aus einem alten RMAN-Backup auf dem System, der Export der benötigten Tabelle und der Import dieser Tabelle in die produktive Datenbank
Für den Einsatz von RECOVER TABLE müssen folgende Voraussetzungen erfüllt sein:
- die Tabelle darf nicht dem Benutzer SYS gehören
- die Tabelle darf nicht im Tablespace SYSAUX oder SYSTEM liegen
RECOVER TABLE kann nicht verwendet werden, wenn
- NOT NULL Constraints auf mindestens einer der Tabellenspalten vorliegen und die REMAP-Option verwenden werden soll oder muss
- Tabellen auf Standby Datenbanken wiederhergestellt werden sollen
Folgendes ist gegeben:
- In der Pluggable Database PDB2 wurde die Tabelle XYZ aus dem Schema FOO vor etwa einer Stunde massiv fehlerhaft abgeändert.
- Der Datenbestand der Tabelle von vor zwei Stunden ist ausreichend.
- Es liegen stündliche Archivelogsicherungen vor.
- Unter /backup ist ausreichend Speicherplatz für mindestens eine weitere Kopie der Datenbank vorhanden.
- Die Tabelle soll die aktuelle Tabelle nicht überschreiben.
Mit dem nachfolgenden RMAN Befehl kann die Tabelle wiederherstellt werden.
recover table FOO.XYZ of pluggable database PDB2 until time 'sysdate - 2/24' auxiliary destination '/backup/tmp' remap table 'FOO'.'XYZ':'XYZ_OLD';
Dabei wird die Tabelle XYZals Tabelle XYZ_OLD im Schema FOO der PDB2 wiederhergestellt.
Wie macht Oracle das?
Die manuellen Schritte, die unter Punkt 3 kurz angerissen sind und bisher manuell durchgeführt werden mussten, laufen automatisiert ab:
- Es wird eine temporäre Container Database aus dem Backup erzeugt.
- Das dafür notwendige Controlfile wird mit dem Parameter set until time "sysdate–2/24" restored.
- Die Datafiles werden dabei unter /backup/tmp angelegt.
- Ein Restore der Container Database und anschließend der benötigten Pluggable Database PDB2 wird gefahren.
- Die Container Database sowie die Pluggable Database werden geöffnet und ein Export der Tabelle FOO.XYZ mittels expdp durchgeführt.
- Dieser Export wird dann in die produktive Datenbank mit impdp wieder eingelesen.
- Im Anschluss werden die temporär angelegte und wiederhergestellte Datenbank beendet und gelöscht.
Fazit: Oracle erleichtert mit diesem 'neuen' Befehl das Wiederherstellen einer Tabelle. Viele einzelne Schritte müssen nicht mehr manuell durchgeführt werden. Einziger Wermutstropfen: Für den Einsatz von RECOVER TABLE ist zwingend eine Oracle Database Enterprise Edition erforderlich.