Backup mit dem Recovery Manager (RMAN for Beginners Teil 1)
von Sebastian Solbach, ORACLE Deutschland GmbH

Seit Oracle den Recovery Manager (RMAN) mit der Datenbank ausliefert, ist das Online Backup und Recovery einer Oracle Datenbank kein Hexenwerk mehr. Es ist eigentlich so einfach, dass man fragen möchte, warum immer noch Datenbanken nur "offline" gesichert werden oder gar ganz ohne ein Backup betrieben werden.

Einer der Gründe mag vielleicht sein, dass RMAN über ein anderes Interface und eine andere Syntax verfügt, als man dies von SQL*Plus her gewöhnt ist. So trifft man hier und da immer noch auf einigen Widerstand gegen den RMAN.

Gerade aber mit 10g wurden viele Kleinigkeiten in der Bedienung des RMAN verbessert, die es erlauben ein Backup in kürzester Zeit zu bewerkstelligen. Aber nicht nur das, auch Housekeeping Operationen der Backups und archivierten Redologs sind fest mit dem RMAN verknüpft und erleichtern so die Aufgaben eines DBAs.

Im nachfolgenden Tipp möchte ich kurz anhand eines platten basierten Backup zeigen:

  • Wie einfach RMAN zu verwenden ist
  • Welche Bedeutung die Flash Recovery Area (FRA) für das Backup hat
  • Welche generellen Parameter man noch beachten sollte

Anmerkung: Bilder zum Tipp werden sichtbar, indem man mit der Maus über das Brillen Icon fährt.


Um das Bild wieder zu verkleinern, auf das Bild klicken.

Minimalkonfiguration

Da mit einem RMAN Backup nur die Datenbank und alle damit zusammenhängenden Dateien gesichert werden, nicht aber die Software, macht es durchaus Sinn, die Software auf ein anderes Laufwerk respektive RAID System auszulagern. Auf jeden Fall muss aber das Backup und damit die FRA auf einem physikalisch anderen, unabhängigen Laufwerk, LUN oder RAID Verbund liegen. Ein Backup soll ja einen Schutz vor Plattenkorruption bieten, und dies macht wenig Sinn, wenn das Backup auf demselben physikalischen Laufwerk liegt, wie die zu sichernde Datenbank.
Bei kleinen Systemen würden zwar auch zwei Platten reichen, in diesem Falle würde aber entweder die Datenbank oder die FRA auf der Software/Systemplatte liegen.

Deswegen gehe ich bei meinem Szenario von mindestens 3 Platten bzw. 3 unabhängigen RAID Systemen aus.
Hierbei verteilt sich die Datenbank folgendermaßen auf die Speicherorte, um eine höchstmögliche Sicherheit zu gewährleisten (rot gekennzeichnete Dateien werden nicht von RMAN gesichert):

Speicherort 1 (Erste Platte z.B. sda1) Speicherort 2 (Zweite Platte z.B. sda2) Speicherort 3 (Dritte Platte z.B. sda3)
Flash Recovery Area enthält:
Software
Passwortfile
Logfiles/Diag Verzeichnis
SPFile
1. Controlfile
2. Controlfile
Datenfiles (System-, Undo-, User- Tablespaces)
Redolog Member 1
3. Controlfile
Redolog Member 2
Archivierte Redologs
Backup

Diese "einfache" Aufteilung wird auch verwendet, wenn ASM zum Einsatz kommt und gilt dort als "Best Practice":

  • Software liegt auf den lokalen Platten
  • Eine ASM Diskgruppe enthält alle Daten
  • Eine zweite ASM Diskgruppe enthält die FRA

Vorbereitungen

  1. Archivelog Modus
  2. Enterprise Edition: Flashback Modus
  3. Flash Recovery Area
  4. Autobackup Controlfile/SPFile

Damit ein Online Backup durchgeführt werden kann, muss die Datenbank im Archivelog Modus betrieben werden.
Verwendet man die Enterprise Edition empfiehlt es sich ebenfalls den Flashback Modus der Datenbank anzuschalten, da Flashback bei einigen Recovery Operationen immense Zeitvorteile verschafft. Des weiteren sollte man im selben Zuge die Parameter der Flash Recovery Area konfigurieren.

Im Enterprise Manager passieren diese Einstellungen alle unter: "Availability" => "Recovery Settings"

Die Größe der FRA legt man auf ca. 90% der zur Verfügung stehenden Plattenkapazität fest.
Sollten mehrere Datenbanken auf dem Rechner betrieben werden, wird empfohlen, dieselbe FRA zu verwenden. Innerhalb der FRA sollten nur Dateien der Oracle Datenbank(en) gespeichert werden: In meinem Fall eine Controlfile Kopie, jeweils ein Member der Redologs. Die FRA wird dann automatisch für die archivierten Redologs, Flashbacklogs und Backups verwendet.

RMAN speichert alle relevanten Informationen zu den Backups (den sogenannten Recovery Katalog) im Controlfile der Datenbank. Seit Oracle 10g ist dies für nahezu alle Backup/Recovery Maßnahmen ausreichend.
Hat man aber mehrere Datenbanken oder Data Guard im Einsatz, empfiehlt es sich, für den Recovery Katalog eine eigene Datenbank zu verwenden. Dieser nimmt dann Backup/Recovery Informationen zu allen Datenbanken auf und speichert diese über einen viel größeren Zeitraum, als dies mit dem Controlfile möglich wäre. Ebenfalls wird dadurch der Restore des Controlfiles und des SPFiles erheblich vereinfacht.
Verwendet man keine eigene Datenbank für den RMAN Katalog, sondern begnügt sich, wie im Beispiel, mit den Informationen im Controlfile, muss man das Autobackup von Controlfile und SPFile zwingend aktivieren, da für ein aktuelles Recovery immer das letzte Controlfile mit allen Informationen vorliegen sollte.
Dies geschieht im Enterprise Manager unter: "Availability" => "Backup Settings" => "Policy"

Einrichten der Einstellungen in SQL*Plus und RMAN:
$ sqlplus / as sysdba
SQL> shutdown immediate
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database flashback on;
SQL> alter database open;
SQL> alter system set db_recovery_file_dest='<Pfad zur FRA>';
SQL> alter system set db_recovery_file_dest_size=4G;

$ rman target /
CONFIGURE CONTROLFILE AUTOBACKUP ON;

Zwei ausgewählte Backupmethoden

Ein Backup ist über Database Control schnell eingerichtet. Hierbei gibt es 2 einfache Möglichkeiten:

  • Das Oracle Suggested Backup
  • Ein benutzerdefiniertes komplettes Backup
Beim benutzerdefinierten Backup wird einfach die komplette Datenbank inklusive der archivierten Redologs in ein Backupset gesichert. Da die Sicherung auf Platte erfolgt, empfiehlt es sich nicht ein "compressed" Backupset anzulegen, da dies nur zu Lasten der Backup Zeit gehen würde. Komprimierte Backupsets bringen nur einen Performancevorteil bei Sicherung auf Band oder wenn man zu Lasten der Backupzeit Plattenplatz sparen möchte.

Hier das RMAN Script, welches mit dem Betriebssystem Scheduler verwendet werden könnte:
$ cat backup.sc
run {
  backup incremental level 0 database plus archivelog not backed up;
}

RMAN Aufruf:
RMAN TARGET / @backup.sc
Wichtig: Die Datei des RMAN Skript muss eine Dateinamensergänzung haben (*.irgendwas), ansonsten gibt RMAN eine Fehlermeldung aus.

Selbstverständlich geht das ganze auch einfacher im Database Control: "Availability" => "Schedule Backup". Das Scheduling des Jobs übernimmt der dazugehörige Agent.
DB Control vergibt dabei dem Backup noch ein zusätzliches TAG. Da es sich bei dem Backup um eine Basis für ein inkrementelles Backup handelt, könnten nachfolgende Backups dieses als Basis nehmen. Hierzu dient das TAG sozusagen als Referenz, d.h. welches Backup dient als Basis für das nachfolgende inkrementelles Level 1 Backup.

Allerdings sind die Zeiten eines Recovery länger, wenn bei einem Restore alle Änderungen von den Archivelogs nachgezogen werden müssen. Aus diesem Grunde funktioniert das Oracle Suggested Backup auf Basis von Image Kopien der Datendateien. Diese Kopien werden beim jeweiligen neuen Backup (z.B. täglich) auf den neuesten Stand recovered, so dass im Falle eines Recovery nur die Archivelogs des letzten Tages für ein vollständiges Recovery nachgezogen werden müssen. Hiermit wird die Zeit eines Recovery erheblich verringert.

Das Backup besteht hierbei aus 2 Teilen: Dem Recovery der Image Kopien mit den vorhanden Archivelogs und der inkrementellen Level 1 Sicherung der neuen Änderungen. Hierbei kommt es zwar bei den ersten Aufrufen zu einer Warnung (beim Recovery), da noch kein Recovery stattfinden kann, dies ist aber vernachlässigbar. Folgende Tabelle verdeutlicht das Vorgehen, wenn das Backup jeden Tag läuft:

LaufRecover KommandoBackup Kommando
1Es passiert nichts, da noch kein Backup vorhanden istDa kein Backup vorhanden ist, wird ein Level 0 Backup (Basis für ein inkrementelles Backup) durchgeführt.
2Es passiert nichts, da kein inkrementelles Backup vorhanden ist, das angewendet werden könnteEin inkrementelles Backup Level 1 mit den Blockänderungen des Vortags
≥ 3Recovery der Image Kopien, mit dem inkrementellen Level 1 Backup des VortagsEin inkrementelles Backup Level 1 mit den Blockänderungen des Vortags

Hier das RMAN Skript, um dies zu bewerkstelligen:
run {
recover copy of database with tag 'DailyImage';
backup incremental level 1 cumulative for recover of copy with tag 'DailyImage' database;
}
Egal ob nun eine oder beide Varianten für das Backup eingesetzt werden - auf alle Fälle hat man mit diesen wenigen Schritten schon eine gute Grundlage zur Datensicherheit geschaffen.

Flashback Recovery Area (FRA)

Grundsätzlich muss man sich bei eingerichtetem Backup und genügend Platz für die FRA keine Gedanken um ein Housekeeping zu machen. Was heißt denn aber nun genügend Platz?

Ausgehend von den Überlegungen für das Backup aus dem vorhergehenden Teil liegt man mit folgendem Wert auf der "sicheren" Seite:
2x Datenbank + (2x archivierte Redologs pro Tag) * Flashback Retention Time (in Tagen) + Online Redologs + Controlfile

Die Standardeinstellungen für RMAN sorgen dafür, dass nicht mehr notwendige Dateien automatisch aus der FRA gelöscht werden. Dabei handelt es sich um die Einstellungen der "RETENTION POLICY" und der "ARCHIVELOG DELETION POLICY". Der Standard sieht vor, dass alle notwendigen Dateien für 1 Backup (also um 1 komplettes Recovery durchzuführen) vorhanden sind. Ältere Backups werden auf obsolete gesetzt und automatisch gelöscht, falls Platz benötigt wird. Genauso verhält es sich bei der Archivelog Deletion Policy, wenn diese auf dem Standard "NONE" steht. Alle Archivelogs, die

  • Mindestens 1x gesichert worden sind
  • Nicht mehr für ein Recovery des letzten Backups gebraucht werden
  • Nicht benötigt werden, um die Flashbackzeit oder einen garantiertem Restorepoint zu garantieren
werden auf obsolete gesetzt und können automatisch gelöscht werden. Möchte man trotzdem selber das Housekeeping betreiben, so kann man sich über die Database Control Seite "Availability" => "Manage Current Backups" eine Übersicht verschaffen und die Löschaktion durchführen (Delete Obsolete).

Das ganze funktioniert selbstverständlich auch in RMAN:
RMAN> list backup summary;
...
RMAN> delete obsolete;                                               

Ein paar wichtige Parameter fürs Backup

Die wichtigsten Backup Parameter kann man im Database Control über "Availability" => "Setup" ("Backup Settings", "Recovery Settings" und "Recovery Catalog Settings") festlegen oder über den RMAN konfigurieren:

RMAN> show all;

CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BZIP2'; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'D:\ORACLE\DB\DATABASE\SNCFORCL.ORA'; # default
Generell sind die Standards recht gut. Folgenden 2 Parametern sollte man aber immer etwas Aufmerksamkeit widmen:
  • RETENTION POLICY: Die Retention Policy kann die Anzahl an vollständigen Backups, die in der FRA gespeichert sein sollten oder ein sogenanntes Recovery Window enthalten. Konfiguriert man ein Recovery Window, so gibt dieses "Fenster" an, dass jegliches Backup innerhalb dieses Zeitrahmens liegen muss. Gleichzeitig gibt dieses "Fenster" damit aber auch an, dass für diesen Zeitraum ein Point in Time Recovery möglich ist.
    RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
    
    Der Befehl gibt somit an, dass alle Informationen vorgehalten werden um mit einem Point in Time Recovery zu einem beliebigen Zeitraum in diesen Tagen zu gelangen. Allerdings sollte dabei auch der Parameter control_file_record_keep_time der Datenbank berücksichtigt werden. Dieser gibt an, wie alt die Informationen im Controlfile der Datenbank sein dürfen, bevor diese überschrieben werden. Der Parameter sollte an das Recovery Window angepasst werden. Da das Controlfile aber nur beschränkten Speicher für die Backup Einträge hat, empfiehlt sich bei größeren Recovery Windows eine Datenbank für den Recovery Katalog zu verwenden.
  • CONTROLFILE AUTOBACKUP: Wie oben schon erwähnt muss dieser Parameter auf ON gesetzt werden, wenn keine Datenbank für den Recovery Katalog verwendet wird.
Einem erfolgreichen Backup steht nun nichts mehr im Wege. In einem der nächsten Tipps werden einige typische Recovery Szenarien bei diesem Setup behandelt.

Nützliche Links und Referenzen

  • Oracle Dokumentation: Backup and Recovery User's Guide
  • Zurück zur Community-Seite