News
DBA-Tipp: Oracle Database 12c New Feature - RECOVER TABLE

Die Information ist ein schnelllebiges Gut. Jeden Tag werden wir mit hunderten Informationen zugemüllt. Deshalb sind wir bestrebt uns auf das Wesentliche zu konzentrieren und nur substantiell nachhaltige Informationen bereitzustellen.

Icon Unternehmen

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:

  1. Flashback Table / Database
  2. der Import der Tabelle aus einem logischen Datenexport mittels import/impdp
  3. 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.