Skip to main content

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.

Größe anzeigen lassen
SHOW PARAMETER db_recovery;
Größe ändern
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.

Archivelog Mode
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.

/opt/oracle/oradata/rman/backupOnlineFull.rman
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).

/opt/oracle/oradata/rman/backupOnlineFull.sh
#!/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.

Backups anzeigen  Quelle erweitern
Backups anzeigen
RMAN> list backup;
 
using target database control file instead of recovery catalog
 
List of Backup Sets
===================
 
 
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
45      Full    9.33G      DISK        00:26:32     21-JAN-21
        BP Key: 45   Status: AVAILABLE  Compressed: YES  Tag: TAG20210121T121040
        Piece Name: /opt/oracle/oradata/fast_recovery_area/EXXDB1/backupset/2021_01_21/o1_mf_nnndf_TAG20210121T121040_j0lvt1wc_.bkp
  List of Datafiles in backup set 45
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  1       Full 1372163982 21-JAN-21 /opt/oracle/oradata/exxdb1/system01.dbf
  2       Full 1372163982 21-JAN-21 /opt/oracle/oradata/exxdb1/mtsnomtrade01.dbf
  3       Full 1372163982 21-JAN-21 /opt/oracle/oradata/exxdb1/sysaux01.dbf
  4       Full 1372163982 21-JAN-21 /opt/oracle/oradata/exxdb1/undotbs01.dbf
  5       Full 1372163982 21-JAN-21 /opt/oracle/oradata/exxdb1/mtsnom.dbf
  6       Full 1372163982 21-JAN-21 /opt/oracle/oradata/exxdb1/users01.dbf
  7       Full 1372163982 21-JAN-21 /opt/oracle/oradata/exxdb1/mts_daten.dbf
  8       Full 1372163982 21-JAN-21 /opt/oracle/oradata/exxdb1/mts_index.dbf
  9       Full 1372163982 21-JAN-21 /opt/oracle/oradata/exxdb1/mts_daten_02.dbf
 
BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ ---------------
46      1.23M      DISK        00:00:01     21-JAN-21
        BP Key: 46   Status: AVAILABLE  Compressed: YES  Tag: TAG20210121T123716
        Piece Name: /opt/oracle/oradata/fast_recovery_area/EXXDB1/backupset/2021_01_21/o1_mf_annnn_TAG20210121T123716_j0lxcwsp_.bkp
 
  List of Archived Logs in backup set 46
  Thrd Seq     Low SCN    Low Time  Next SCN   Next Time
  ---- ------- ---------- --------- ---------- ---------
  1    3324    1372163910 21-JAN-21 1372165404 21-JAN-21
 
BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ ---------------
48      373.60M    DISK        00:00:50     21-JAN-21
        BP Key: 48   Status: AVAILABLE  Compressed: YES  Tag: TAG20210121T123720
        Piece Name: /opt/oracle/oradata/fast_recovery_area/EXXDB1/backupset/2021_01_21/o1_mf_annnn_TAG20210121T123720_j0lxd0q1_.bkp
 
  List of Archived Logs in backup set 48
  Thrd Seq     Low SCN    Low Time  Next SCN   Next Time
  ---- ------- ---------- --------- ---------- ---------
  1    3299    1371331509 15-JAN-21 1371369779 15-JAN-21
  1    3300    1371369779 15-JAN-21 1371388006 16-JAN-21
  1    3301    1371388006 16-JAN-21 1371428465 16-JAN-21
  1    3302    1371428465 16-JAN-21 1371474413 16-JAN-21
  1    3303    1371474413 16-JAN-21 1371508878 17-JAN-21
  1    3304    1371508878 17-JAN-21 1371530360 17-JAN-21
  1    3305    1371530360 17-JAN-21 1371571257 17-JAN-21
  1    3306    1371571257 17-JAN-21 1371616839 17-JAN-21
  1    3307    1371616839 17-JAN-21 1371634288 18-JAN-21
  1    3308    1371634288 18-JAN-21 1371659242 18-JAN-21
  1    3309    1371659242 18-JAN-21 1371660145 18-JAN-21
  1    3310    1371660145 18-JAN-21 1371661214 18-JAN-21
  1    3311    1371661214 18-JAN-21 1371662781 18-JAN-21
  1    3312    1371662781 18-JAN-21 1371665032 18-JAN-21
  1    3313    1371665032 18-JAN-21 1371694134 18-JAN-21
  1    3314    1371694134 18-JAN-21 1371923230 18-JAN-21
  1    3315    1371923230 18-JAN-21 1371947124 19-JAN-21
  1    3316    1371947124 19-JAN-21 1371974662 19-JAN-21
  1    3317    1371974662 19-JAN-21 1372009927 19-JAN-21
  1    3318    1372009927 19-JAN-21 1372024132 20-JAN-21
  1    3319    1372024132 20-JAN-21 1372056786 20-JAN-21
  1    3320    1372056786 20-JAN-21 1372085327 20-JAN-21
  1    3321    1372085327 20-JAN-21 1372125303 21-JAN-21
  1    3322    1372125303 21-JAN-21 1372149441 21-JAN-21
  1    3323    1372149441 21-JAN-21 1372163910 21-JAN-21
  1    3324    1372163910 21-JAN-21 1372165404 21-JAN-21
  1    3325    1372165404 21-JAN-21 1372165433 21-JAN-21
 
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
49      Full    12.30M     DISK        00:00:00     21-JAN-21
        BP Key: 49   Status: AVAILABLE  Compressed: NO  Tag: TAG20210121T123817
        Piece Name: /opt/oracle/oradata/fast_recovery_area/EXXDB1/autobackup/2021_01_21/o1_mf_s_1062419897_j0lxfsmw_.bkp
  SPFILE Included: Modification time: 13-OCT-20
  SPFILE db_unique_name: EXXDB1
  Control File Included: Ckp SCN: 1372165500   Ckp time: 21-JAN-21
Backup explizit löschen
delete backup tag 'TAG20151109T124148';