Oracle DB RMAN Backup
1. Allgemeines
Ich gehe in dieser Anleitung davon aus, dass die jeweilige OracleDB läuft und die Umgebung sowie RMAN eingerichtet sind. Soll heißen man kann sich von der Konsole aus mit der DB verbinden, und RMAN starten.
Im Test lief die DB in einem Container. In dieser Anleitung sind immer nur Aktionen und Pfade innerhalb des Containers beschrieben. Die einzigen Aktionen die ggf. außerhalb des Containers nötig sind, sind das Bearbeiten und Kopieren von Dateien. Dazu ist Zugriff von außen auf /opt/oracle/oradata des Containers nötig.
Diese Anleitung ist für ein online Vollbackup (häufigster Anwendungsfall). Offline und inkrementelle Backups werden nicht behandelt, wenngleich einiges ähnlich wäre.
1.1. Nutzung RMAN
Es gibt verschiedene Möglichkeiten, RMAN zu starten, folgende ist zu empfehlen (<passwort> durch das Passwort ersetzen):
rman target '"sys/<passwort> as sysdba"' |
Das target kann auch weggelassen werden, und stattdessen der RMAN "connect" Befehl genutzt werden. Oder man kann sich auch direkt mit einer DB verbinden (sys/passwort@dbsid). Diese Vorgehensweisen haben jedoch Tücken (z.B. kann bei zweiterer die DB nicht in den nomount state gebracht werden).
Standardmäßig öffnet RMAN eine interaktive Session (in der keine Pfeiltasten genutzt werden können!), das Beenden ist mit EOF (Strg+D) möglich. Für Scripts kann das mit dem cmdfile Parameter umgangen werden, siehe "Scripts" Abschnitt. Es ist außerdem zu beachten, dass jeder Befehl mit einem Semikolon abgeschlossen werden muss. Befehle werden standardmäßig sofort ausgeführt. Ausnahme ist ein Run-Block (Befehle innerhalb run{}), dessen Befehle erst mit der schließenden Klammer ausgeführt werden.
Man kann sich die Konfiguration anzeigen lassen:
RMAN> show all; |
Die angezeigten Zeilen können genau so kopiert werden um ggf. genau diesen Stand wiederherzustellen.
Für die Konfiguration gilt allgemein: CONFIGURE Befehle sind permanent, SET Befehle sind temporär.
2. Vorbereitung
Es müssen einige Bedingungen erfüllt sein, damit Backups erstellt werden können. Diese Schritte müssen nur einmalig durchgeführt werden. Es ist zu beachten, dass es eine kurze Downtime gibt, wenn online Backups erstellt werden sollen.
2.1. Konfiguration
Folgende Konfiguration wird für das Backup vorausgesetzt:
|
1
2
3
4
|
CONFIGURE DEFAULT DEVICE TYPE TO disk;CONFIGURE CONTROLFILE AUTOBACKUP ON;CONFIGURE RETENTION POLICY TO REDUNDANCY 2;CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO COMPRESSED BACKUPSET; |
Zeile 2 ist existenziell wichtig, weil sonst zwar die Daten, aber nicht das Controlfile gesichert wird. Ohne das Controlfile können die Daten aber nicht für eine Disaster Recovery genutzt werden. Der Wert von Zeile 3 kann abgeändert werden (auf 1 oder >2). Zeile 4 ist vermutlich nicht unbedingt nötig aber gut.
2.2. Recovery Area
Die Recovery Area ist der Speicherort der Backups. Dieser muss groß genug sein, dass die Backups darin Platz finden.
SHOW PARAMETER db_recovery; |
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=100G SCOPE=BOTH; |
2.3. Archivelog Mode
Die Datenbank kann keine Online Backups durchführen, insofern sie nicht im Archivelog Mode läuft. Dieser muss also eingeschaltet sein, sonst muss die DB für jedes Backup gesperrt werden, um konsistente Backups zu ermöglichen.
RMAN> SHUTDOWN IMMEDIATE;RMAN> STARTUP MOUNT;RMAN> ALTER DATABASE ARCHIVELOG;RMAN> ALTER DATABASE OPEN; |
3. Backup
3.1. Scripts
Am besten das Backup gleich mit Scripts durchführen. Anpassungen nur am Shellscript nötig.
CREATE PFILE='pfile_recovery.ora' FROM SPFILE;
BACKUP DATABASE PLUS ARCHIVELOG;
backup archivelog all delete all input;
delete force noprompt obsolete;
CREATE PFILE='pfile_recovery.ora' FROM SPFILE;BACKUP DATABASE PLUS ARCHIVELOG;backup archivelog all delete all input;delete force noprompt obsolete; |
Dieses Script weißt RMAN an, ein aktuelles Pfile zu speichern (wird für Disaster Recovery benötigt), ein Backup durchzuführen, und anschließend unnötig gewordene Archivelogs zu löschen.
RMAN wird durch das nachfolgende Shellscript angestoßen, welches das Pfile Backup dann auch noch mit in den Backup Ordner schiebt (sicher nicht so gedacht, funktioniert aber). Anpassungen an diesem Script sind nötig (SID, Passwort, SID).
#!/bin/bash
export ORACLE_SID=exxdb1
export WORKDIR=/opt/oracle/oradata/rman
rman target '"sys/passwort@exxdb1 as sysdba"' cmdfile=${WORKDIR}/backupOnlineFull.rman log=${WORKDIR}/backupOnlineFull.log
# Copy Pfile to the other data directory
cp /opt/oracle/product/12.1.0.1/dbhome_1/dbs/pfile_recovery.ora /opt/oracle/oradata/fast_recovery_area/
Für das Backup also einfach das Shellscript anstoßen. Dauert ca. 30min für 60GB Daten in der DB. Die Backupsets sind (siehe Konfiguration oben) komprimiert und dadurch erheblich kleiner.
Mit dem log Parameter schreibt Rman alle Befehle und deren Ergebnisse in das spezifizierte Logfile - sensible Daten (Connect String z.B.) werden durch ein Asterisk ersetzt.
3.2. Verwaltung
Für Troubleshooting o.ä. nur zur Information.
Anzeige aller verfügbaren Backups (erstellte und ggf. eingespielte von anderen Hosts) inkl. Dateipfade, Größen, Inhalt etc. - das Backupset mit den Dateien ist das eigentliche Backup, im Autobackup ist u.a. das Controlfile enthalten, welches im Falle einer Disaster Recovery benötigt wird.
delete backup tag 'TAG20151109T124148';