Zurück

Oracle Backup und Recovery Anleitung

Die folgende Zusammenfassung dokumentiert die wichtigsten Sachverhalte eines Oracle Backup Konzepts und demonstriert alle möglichen Recovery Szenarien.

Inhalt

Wichtiger Sachverhalt

- Backup Methoden
- Umstellung auf ARCHIVELOG Mode
- Ablauf des Online Backups
- Was muss gesichert werden ?
- Log-Sequence Nummer
- Recovery Methoden
- Wichtigste V$-Views für Backup und Recovery

Typische Recovery Szenarien, Kommands, Scripts

- Crash während Online Backup
- Verlust eines normalen Tablespaces
- Verlust des SYSTEM oder ROLLBACK Segment Tablespaces
- Verlust der Controlfiles
- Verlust der Online Redolog Files
- Datenbank mit fehlendem (normalen) Tablespace starten
- Archivelog Destination wechseln im laufenden Betrieb
- Alle momentan nicht archivierten Online Redologfiles manuell archivieren
- Online Redolog Swich erzwingen
- Status der Redologfiles abfragen (Logsequence)
- Manueller Checkpoint durchführen
- Einfaches Shellscript zum Testen des Online Backups
- Flush des Shared Pools

Oracle bietet verschiedene Möglichkeiten zur Datensicherung an, eine Übersicht zeigt die folgende Zusammenstellung.

Backup Methoden

Backup Methoden

Wie bereits gesehen sichern die Redologfiles die Konsistenz der Datenbank. Diese Redologfiles werden zyklisch immer wieder neu beschrieben. Der einzige Unterschied zwischen Online Backup (ARCHIVELOG) und Offline Backup (NOARCHIVELOG) besteht also darin, bei einem Log­switch das Redologfile zu sichern. Eine Umstellung auf eine der Betriebsarten kann jederzeit erfolgen.

Umstellung auf ARCHIVELOG Mode

Bei der Umstellung auf ARCHIVELOG Mode sind zwei Sachen zu tun:

  • Änderung des Log Modes
  • Automatische Archivierung der Redologfiles

Vorgehen:

Datenbank stoppen.
Datenbankparameter setzen in: init<SID>.ora

log_archive_start = true
log_archive_dest = /oracle7/kurs/arch/log

Mit dem Parameter log_archive_start wird das automatische Archivieren der Redologfiles aktiviert. Der Parameter log_archive_dest definiert das Archivelogdirectory.

ARCHIVELOG Mode im Datadictionary aktivieren

svrmgrl
connect internal
startup mount
alter database archivelog
alter system archivelog start
archive log list

Ablauf des Online Backups

Im ARCHIVELOG Mode erfolgt der Backup der Datenbank während des laufenden Betriebes, die Datenbank wird nicht mehr gestoppt. Jeder Tablespace wird einzeln gesichert mit den zugehörigen Datenbankfiles.

Während des Online Backups werden die «Checkpoint Timestamps» nicht mehr in die Header der Datenbankfiles geschrieben. Alle Datenbank-Objekte welche gesichert werden weisen also die Zeit (Timestamp) des letzten Checkpoints auf. Damit kann Oracle bei einem Recovery automatisch feststellen, welche Offline Redolog Files zurückappliziert werden müssen

online_backup.gif (4529 bytes)

Was muss gesichert werden ?

Nebst den Datenbankfiles müssen auch die archivierten Offline Redologfiles und ein Controlfile gesichert werden. Die Online Redologfiles sind nicht zu sichern, da diese nicht in einem konsistenten Zustand sind. Sie dürfen grundsätzlich nicht verloren gehen, deshalb sind diese äusserst wichtigen Files allenfalls auf eine andere Disk zu duplizieren (Duplexed Redolog Files). Verliert man die Online Redologfiles, so verliert man immer Transaktionen, ein Cancel based Recovery muss angewendet werden.

Ein Online Backup besteht also aus:

  • Allen Datenbankfiles (sämtliche Tablespaces)
  • Allen archivierten offline Redologfiles
  • Einem archivierten Controlfile
  • Parameterfile init<SID>.ora
  • Oracle Passwort-File

Inhalt Online Backup

Log-Sequence Nummer

Jedes Redologfile das archiviert wird, bekommt eine Log-Sequence Nummer, die fortlaufend numeriert ist. Diese Nummer ist für ein Recovery von großer Bedeutung, sie muss deshalb zusammen mit dem Online Backup protokolliert werden.

Log Sequence Nummer

Wenn der Online Backup mit BEGIN BACKUP gestartet wird muss die Nummer «Oldest online log sequence» protokolliert werden. Sie definiert den Beginn der archivierten Redologfiles. Alle älteren archivierten Redologfiles können nach dem Backup auf der Harddisk gelöscht werden. Die Online Redologfiles dürfen im Online Backup Mode nicht mitgesichert werden, da sie keinen definierten Zustand aufweisen. Ein konsistenter Online Backup weist zudem immer ein mit ALTER DATABASE BACKUP CONTOLFILE gesichertes Controlfile auf.

Recovery Methoden

Es existieren verschiedene Recoverymethoden, abhängig davon welche Datenbankfiles verloren gehen.

Recovery Methoden

Wichtigste V$-Views für Backup und Recovery

V$-View

Beschreibung

Informationen bezüglich Transaktionen

V$THREAD

Ein Thread kennzeichnet eine bestimmte Instance in einem Oracle Parallel Server Umfeld. Da jede Instance eines Parallel Servers ihre eigenen Online Redolog Files hat, kann in dieser View Informationen zu den Log-Group Members, der SCN Nummer des letzten Checkpoints etc eingesehen werden.

V$TRANSACTION

Zeigt die offenen Transaktionen (zB SCN-Nummer der Transaktion)

Informationen bezüglich Redolog Files

V$LOG

Informationen aus dem Controlfile zu den Redolog Files. Interessant sind lowest SCN und time of first SCN. Man erkennt auch ob ein Redologfile bereits archiviert wurde (ARCHIVED=TRUE) und ob es für ein Instance Recovery noch gebraucht wird (STATUS=ACTIVE).

V$LOGFILE

Namen der Redolog Members

V$LOG_HISTORY

History der archivierten Redolog Files

V$ARCHIVE

Group-Nr, Sequence-Nr, First SCN-Nr der archivierten Redologs

Informationen bezüglich Backup und Recovery

V$BACKUP

Stati der DB-Files (BEGIN / END Backup). Kann sehr hilfreich sein um herauszufinden, welche DB-Files im BEGIN BACKUP Mode sind.

V$DATAFILE

Informationen zu den DB-Files aus dem Controlfile

V$CONTROLFILE

Namen und Status der Controlfiles

V$DATABASE

Informationen zur DB-Instance wie last SCN checkpointed und last SCN archived sowie Angaben ob DB im Archivelog Mode ist.

V$RECOVERY_LOG

Redologfiles welche für ein Complete Media Recovery benötigt werden

V$RECOVER_FILE

Welche Files brauchen ein Media Recovery ?

V$RECOVERY_STATUS

Informationen zum aktuellen Recovery Prozess

Typische Recovery Methoden

Crash während Online Backup

Der Online Backup wird bekanntlich mit BEGIN BACKUP gestartet. Nach dem Backup muss die Datenbank zwigend wieder in den END BACKUP Zustand versetzt werden. Was passiert jedoch wenn während dem Online Backup ein Crash erfolgt oder die DB mit shutdown abort heruntergefahren wird. Beim nächsten Startup meldet Oracle, dass die betroffenden Files noch im BEGIN BACKUP Mode sind. Mit dem Kommando alter database datafile 'dbfile(s)' end backup; wird manuell auf END BACKUP geschaltet und der Backup muss wiederholt werden.

crash_online_backup.gif (3528 bytes)

Beim Startup meldet Oracle:

connect internal
startup

ORA-01113: Fur Datei '5' ist Datentrager-Recovery notwendig
ORA-01110: Datendatei 5: '/opt/oracle/oradata/TOL2/tab/TOL2_tab1.dbf'

Kontrolle welche DB-Files im BEGIN Backup Mode sind:

select substr(a.name,1,30) "DbFile",
       a.file# "File#",
       b.status "Status"
  from v$datafile a, v$backup b
 where a.file# = b.file#
order by a.file#;

Die beiden Files des TAB Tablespace welche den Zustand "ACTIVE" haben auf END BACKUP schalten.

alter database datafile
   '/opt/oracle/oradata/TOL2/tab/TOL2_tab1.dbf'
   end backup;
alter database datafile
   '/opt/oracle/oradata/TOL2/tab/TOL2_tab2.dbf'
   end backup;

Datenbank öffnen:

alter database open;

Verlust eines normalen Tablespaces

Die Datenbank wird im ARCHIVELOG Mode betrieben, es ist ein RECOVER TABLESPACE durchzuführen. Es müssen nur die DB-Files, welche zum verlorenen Tablespace gehören zurückgeladen werden.

Verlust eines normalen Tablespaces

  • Tablespace offline nehmen

alter tablespace tab offline immediate;

Wenn dies nicht mehr möglich ist alle betroffenen Datenfiles des Tablespace offline stellen.

alter database datafile ’xxxx.dbf’ offline;

  • Backup aller DB-Files des Tablespaces zurückladen

  • Archive Files bereithalten

  • Recover des verlorenen Tablespaces

recover tablespace tab;
alter tablespace tab online;

Man könnte in diesem Fall den Tablespace auch mit RECOVER DATABASE wieder herstellen.

Verlust des SYSTEM oder ROLLBACK Segment Tablespaces

Die Datenbank muss in diesem Fall mit SHUTDOWN ABORT gestoppt werden, es müssen sämtliche DB-Files zurückgeladen werden, es reicht nicht nur die DB-Files des SYSTEM bzw ROLLBACK Tablespaces zurückzuladen. Beachte, dass das gesicherte Controlfile NICHT zurückgeladen werden darf.

Verlust des SYSTEM oder ROLLBACK Segment Tablespaces

  • Datenbank stoppen

svrmgrl
connect internal
shutdown abort

  • Zurückladen aller DB-Files (Controlfiles auch zurückladen !)
  • Archive Files bereithalten
  • Recover der gesamten Datenbank

svrmgrl;
connect internal;
startup mount;
recover database;

Mit <AUTO> alle Offline Redologfiles applizieren

  • Datenbank wieder normal öffnen, keine Daten sind verloren

alter database open;

Verlust der Controlfiles, ev auch des SYSTEM 
und/oder ROLLBACK Segment Tablespaces

Die Datenbank muss in diesem Fall mit SHUTDOWN ABORT gestoppt werden, es müssen sämtliche DB-Files zurückgeladen werden, es reicht nicht nur die DB-Files des SYSTEM bzw ROLLBACK Tablespaces zurückzuladen. Beachte, dass auch das gesicherte Controlfile NICHT zurückgeladen werden muss. Nun erfolgt das Cancel Based Recovery, man muss die Option USING BACKUP CONTROLFILE verwenden, damit wird Oracle mitgeteilt, dass Inkonsistenzen bestehen zwischen dem Controlfile und den bestehenden Redologfiles. Nach dem Zurückapplizieren der Offline Redolog Files wird ein "Dummy" Recovery gemacht und die Datenbank mit RESETLOGS geöffnet.

Verlust der Controlfiles, ev auch des SYSTEM und/oder ROLLBACK Segment Tablespaces

  • Datenbank stoppen

svrmgrl
connect internal
shutdown abort

  • Zurückladen aller DB-Files (Controlfiles auch zurückladen !)
  • Archive Files bereithalten
  • Point-in-Time Recovery der gesamten Datenbank mit zurückgeladenem Controlfile

svrmgrl;
connect internal;
startup mount;
recover database using backup controlfile until cancel;
auto

Mit <AUTO> alle Offline Redologfiles applizieren bis Recovery automatisch stoppt.

  • "Dummy" Recovery durchführen

recover database using backup controlfile until cancel;
cancel

Man bricht das Recovery mit <CANCEL> sofort wieder ab, nur um Oracle mitzuteilen, dass ein CANCEL based Recovery durchgeführt wurde.

  • Datenbank mit RESETLOGS öffnen

alter database open resetlogs;

Verlust der Online Redolog Files

Die Datenbank muss in diesem Fall mit SHUTDOWN ABORT gestoppt werden, es müssen sämtliche DB-Files zurückgeladen werden, es reicht nicht nur die DB-Files des SYSTEM bzw ROLLBACK Tablespaces zurückzuladen. Beachte, dass das gesicherte Controlfile NICHT zurückgeladen werden darf. Nun erfolgt das Cancel Based Recovery bis zum letzten verfügbaren Offline Redolog File.

Verlust der Online Redolog Files

  • Datenbank stoppen

svrmgrl
connect internal
shutdown abort

  • Zurückladen aller DB-Files (Controlfiles NICHT zurückladen !)
  • Archive Files bereithalten
  • Point-in-Time Recovery der gesamten Datenbank mit vorhandenem Controlfile

svrmgrl;
connect internal;
startup mount;
recover database until cancel;
auto

Mit <AUTO> alle Offline Redologfiles applizieren bis Recovery automatisch stoppt.

  • "Dummy" Recovery durchführen

recover database until cancel;
cancel

Man bricht das Recovery mit <CANCEL> sofort wieder ab, nur um Oracle mitzuteilen, dass ein CANCEL based Recovery durchgeführt wurde.

  • Datenbank mit RESETLOGS öffnen

alter database open resetlogs;

Datenbank mit fehlendem (normalen) Tablespace starten

Die Datenbank kann ohne diesen fehlenden Tablespace gestartet werden.

  • Datenbank ohne fehlenden TS starten

svrmgrl
connect internal
startup mount
alter database datafile '/opt/oradata/RAB1/tab/RAB1_tab1.dbf' offline drop;
alter database datafile '/opt/oradata/RAB1/tab/RAB1_tab2.dbf' offline drop;
alter database open;

  • Tablespace droppen

drop tablespace tab including contents;

  • Kontrolle Einträge in DD (dba_data_files) und Controlfile (v$dbfile)

select * from dba_data_files order by file_id;
select name,file# from v$dbfile;

Archivelog Destination wechseln im laufenden Betrieb

Wird der vorhandene Diskplatz für die Offline Redologfiles auf der Disk knapp, und die Zeit reicht nicht mehr aus um die Offline Redologfiles wegzukopieren, so kann die Archivelog Destination während dem Betrieb gewechselt werden. Mit STOP / START kann das automatische Archivieren durch den ARCH Prozess angehalten werden und wieder gestartet werden

alter system archive log stop;
alter system archive log start to '/disk2/data/ARK';
alter system archive log start;

Man beachte, dass der String 'ARK' bei der Angabe der neuen Destination kein Directory ist, sondern der Filename-Prefix.

Alle momentan nicht archivierten Online Redologfiles manuell archivieren

alter system archive log all;

Online Redolog Swich erzwingen

alter system switch logfile;

Status der Redologfiles abfragen (Logsequence)

archive log list;

Manueller Checkpoint durchführen

Damit werden alle DB Buffer auf die Disk geschrieben.

alter system checkpoint;

Flush des Shared Pools

Nicht direkt mit dem Recovery zu tun hat der Flush des Shared Pools, zur Vervollständigung der wichtigsten ALTER SYSTEM Kommandos trotzdem an dieser Stelle dokumentiert. Damit werden alle cached Informationen aus dem Shared Pool (Data Dictionary Informationen, Shared PL/SQL und SQL, Stored Proceduren, Functions und Packages) entfernt.

alter system flush shared_pool;

Einfaches Shellscript zum Testen des Online Backups

#!/bin/ksh

ORACLE_HOME=/oracle/product/8.0.5; export ORACLE_HOME
ORACLE_SID=RAB1; export ORACLE_SID
TNS_ADMIN=/home/oracle/config/v805; export TNS_ADMIN
NLS_LANG=GERMAN_GERMANY.WE8ISO8859P1; export NLS_LANG
ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data; export ORA_NLS33
PATH=/bin:/sbin:/usr/bin:/usr/sbin:$ORACLE_HOME/bin; export PATH
BACKUPLOG=backuplog_${ORACLE_SID}.log

# Mark Tablespaces for the START of Online-Backup

svrmgrl <<-EOF >$BACKUPLOG
    connect internal;
    alter system switch logfile;
    archive log list
    alter tablespace rbs begin backup;
    alter tablespace system begin backup;
    alter tablespace tab begin backup;
    alter tablespace temp begin backup;
    alter tablespace users begin backup;
    alter database backup controlfile to '/data/ctrlRAB1.con' reuse;
    alter system switch logfile;
    alter system archive log all;
    disconnect;
    exit;
EOF

# Do the Backup

cp /data/rbs/RAB1_rbs1.dbf /data/rbs/RAB1_rbs1.dbf.backup
cp /data/sys/RAB1_sys1.dbf /data/sys/RAB1_sys1.dbf.backup
cp /data/tab/RAB1_tab1.dbf /data/tab/RAB1_tab1.dbf.backup
cp /data/tmp/RAB1_temp1.dbf    /data/tmp/RAB1_temp1.dbf.backup
cp /data/usr/RAB1_users1.dbf /data/usr/RAB1_users1.dbf.backup

# Mark Tablespaces for the END of Online-Backup

svrmgrl <<-EOF >>$BACKUPLOG
    connect internal;
    alter tablespace rbs end backup;
    alter tablespace system end backup;
    alter tablespace tab end backup;
    alter tablespace temp end backup;
    alter tablespace users end backup;
    disconnect;
    exit;
EOF

exit 0