Einfaches Recovery mit Oracle Data Recovery Advisor
von Ralf Durben, ORACLE Deutschland GmbH

Ein wesentliches Merkmal einer Datenbank ist die Möglichkeit zur Wiederherstellung im Fehlerfall. Ausfälle von Rechnern, Hauptspeicher, Festplatten, o.ä. dürfen nicht im Datenverlust enden. Die Oracle Datenbank bietet hierzu schon seit den frühesten Versionen robuste und erprobte Methoden des sogenannten Recoverys an. Basierend auf Sicherungen und Änderungsprotokolle können Schäden durch Dateiausfälle behoben werden.

Das Erstellen von Sicherungen, den sogenannten Backups ist im Allgemeinen ein regelmäßiger Vorgang, der typischerweise automatisiert wird. Die Durchführung von Backups stellt daher kein Problem dar.

Anders sieht das bei einem Recovery aus. Eine solche Reparatur ist nur sehr selten notwendig und Datenbankadministratoren fehlt oft die wünschenswerte Routine. Oracle bietet für die verschiedenen Fehlerszenarien entsprechende Recoverymethoden an und die Wahl der richtigen Methode beeinflußt die Dauer des Recoverys und damit die Downtime. Je nach Fehler braucht man zum Beispiel nur Teile der Datenbank reparieren während andere Teile der Datenbank weiterhin zur Verfügung stehen. Man kann aber auch die gesamte Datenbank herunterfahren und entsprechend reparieren.

Die Wahl der richtigen Methode ist wichtig bei einem Recovery. Fehlende Routine sorgt bei einigen Datenbankadministratoren aber für Unsicherheit, der man bislang nur durch regelmäßiges Training vorbeugen konnte. Datenbankadministratoren sollen demnach mit Testdatenbanken ein Recovery einüben. Regelmäßig durchgeführt geben diese Tests die wünschenswerte Erfahrung.

In Oracle 11g wird die Wahl der richtigen Recoverymethode sehr stark vereinfacht. Die Oracle Datenbank erkennt automatisch die aufgetretenen Fehler und kann Skripte erstellen mit denen der Fehler repariert werden kann. Diese Funktionalität nennt sich Data Recovery Advisor und steht primär in dem Line Mode Tool RMAN zur Verfügung, aber auch Oracle Enterprise Manager bietet eine grafische Oberfläche für diese Funktionalität an.

Der Data Recovery Advisor ist in den Editionen Enterprise Edition, Standard Edition und Standard Edition one verfügbar.

Statt nun die einzelnen Kommandos zum Einspielen des Backups, bzw. der notwendigen Backupbestandteile, sowie des Recoverys zu benutzen, muss ein Administrator nur noch drei Kommandos kennen:

list   failure
advise failure
repair failure
Die Details der Recoverymethode werden dabei angezeigt und können somit jederzeit verfolgt werden. Letztlich ist es aber nicht mehr notwendig die einzelnen Restore- und Recover-Kommandos einzugeben.

Die Verwendung dieser neuen Kommandos soll nun an verschiedenen Beispielen demonstriert werden:


Fallbeispiel 1: Eine Datendatei (nicht der System Tablespace) ist defekt

In diesem Fall ist ein Teil der Datenbank betroffen, ohne dessen die Datenbank auch weiter betrieben werden kann. Nur sind Teile der Datenbank nicht benutzbar. Diese Teile müssen nun wiederhergestellt werden.

Dazu starten Sie RMAN und verbinden sich mit der Datenbank:
> RMAN
RMAN> connect target
Als nächstes lassen Sie sich den Fehler analysieren und anzeigen:
RMAN> list failure;
List of Database Failures
=========================

Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
142        HIGH     OPEN      21-AuG-07     one or more non-system datafiles are corrupt
Der nächste Schritt ist nun die Wahl der richtigen Recoverymethode. Dazu geben Sie in RMAN folgendes ein:
RMAN> advise failure;
List of Database Failures
=========================
Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
142        HIGH     OPEN      21-AuG-07     one or more non-system datafiles are corrupt
analyzing automatic repair options; this may take some time
allocated channel: ORA_DISK_1channel ORA_DISK_1: SID=151 device type=DISK
analyzing automatic repair options complete
Mandatory Manual Actions
========================
no manual actions available

Automated Repair options
========================
Option Repair Description
------ ------------------
1      Restore and recover datafile 6  
  Strategy: The repair includes complete media recovery with no data loss  
  Repair script:
     /oracle/installations/diag/rdbms/orcl/orcl/hm/reco_2990894645.hm
Der Data Recovery Advisor hat also eine Methode gefunden, die im Ergebnis eine Reparator ohne Datenverlust hat. Dieser Reparatur starten Sie mit
RMAN> repair failure;
contents of repair script:
# restore and recover datafile
sql 'alter database datafile 6 offline';
restore datafile 6;
recover datafile 6;
sql 'alter database datafile 6 online';
:
executing repair script
sql statement: 
 alter database datafile 6 offline
Starting restore at 21-AuG-07
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00006 to /home/oracle/wichtig.dbf
channel ORA_DISK_1: reading from backup piece 
:
Starting recover at 21-AuG-07
using channel ORA_DISK_1
starting media recovery
archived log for thread 1 with sequence 35 is already on disk as file 
+DGROUP1/orcl/archivelog/2007_08_21/thread_1_seq_35.308.631152721
:
media recovery complete, elapsed time: 00:00:19
Finished recover at 21-AuG-07
sql statement: alter database datafile 6 online
repair failure complete
Dieser Ausschnitt ist gekürzt um die Lesbarkeit zu erhalten. Der Benutzer wird auch nach der Anzeige des Skripts gefragt, ob die Reparatur wirklich gestartet werden soll. Eine reine Anzeige des Skripts erhält man mit
RMAN> repair failure preview;
contents of repair script:
# restore and recover datafile
sql 'alter database datafile 6 offline';
restore datafile 6;
recover datafile 6;
sql 'alter database datafile 6 online';



Fallbeispiel 2: Eine Datendatei ist defekt und zusätzlich alle Online Redo Log Gruppen

In diesem Fall ist die gesamte Datenbank betroffen, die auch nach kurzer Zeit zum Stillstand kommt. Der komplette Verlust der Online Redo Log Gruppen dürfte eigentlich nicht auftreten, da diese unbedingt gespiegelt werden sollten. Dennoch habe ich hier dieses Beispiel gewählt um zu zeigen, dass auch in dieser Situation der Data Recovery Advisor gute Dienste leistet.

Dazu starten Sie RMAN und verbinden sich mit der Datenbank:
> RMAN
RMAN> connect target
Als nächstes lassen Sie sich den Fehler analysieren und anzeigen:
RMAN> list failure;

List of Database Failures
=========================

Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
788        CRITICAL OPEN      22-AuG-07     Redo log group 3 is unavailable
779        CRITICAL OPEN      22-AuG-07     Redo log group 2 is unavailable
770        CRITICAL OPEN      22-AuG-07     Redo log group 1 is unavailable
563        HIGH     OPEN      22-AuG-07     one or more non-system datafiles are missing
794        HIGH     OPEN      22-AuG-07     Redo log file +DGROUP1/orcl/onlinelog/group_3.266.631024719 is missing
791        HIGH     OPEN      22-AuG-07     Redo log file +DGROUP1/orcl/onlinelog/group_3.267.631024719 is missing
785        HIGH     OPEN      22-AuG-07     Redo log file +DGROUP1/orcl/onlinelog/group_2.264.631024719 is missing
782        HIGH     OPEN      22-AuG-07     Redo log file +DGROUP1/orcl/onlinelog/group_2.265.631024719 is missing
776        HIGH     OPEN      22-AuG-07     Redo log file +DGROUP1/orcl/onlinelog/group_1.262.631024719 is missing
773        HIGH     OPEN      22-AuG-07     Redo log file +DGROUP1/orcl/onlinelog/group_1.263.631024719 is missing
268        HIGH     OPEN      21-AuG-07     Datafile 6: '/home/oracle/wichtig.dbf' contains one or more corrupt blocks
Der Verlust der online Redo Log Gruppen führt dazu, daß die Datenbank nicht vollständig repariert werden kann. Ein gewisses Maß an Datenverlust wird hinzunehmen sein. Wie schon ausgeführt, wird dieses durch Spiegelung der online Redo Log Dateien verhindert.

Bei einem hier vorliegenden unvollständigen Recovery muß man erst einmal feststellen bis zu welchem Zeitpunkt das Recovery durchgeführt werden kann. Dieses ist in der Regel recht aufwendig. Nicht so mit dem Data Recovery Advisor:
> RMAN
RMAN> connect target
Als nächstes lassen Sie sich den Fehler analysieren und anzeigen:
RMAN> list failure;

List of Database Failures
=========================

Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
788        CRITICAL OPEN      22-AuG-07     Redo log group 3 is unavailable
779        CRITICAL OPEN      22-AuG-07     Redo log group 2 is unavailable
770        CRITICAL OPEN      22-AuG-07     Redo log group 1 is unavailable
563        HIGH     OPEN      22-AuG-07     one or more non-system datafiles are missing
794        HIGH     OPEN      22-AuG-07     Redo log file +DGROUP1/orcl/onlinelog/group_3.266.631024719 is missing
791        HIGH     OPEN      22-AuG-07     Redo log file +DGROUP1/orcl/onlinelog/group_3.267.631024719 is missing
785        HIGH     OPEN      22-AuG-07     Redo log file +DGROUP1/orcl/onlinelog/group_2.264.631024719 is missing
782        HIGH     OPEN      22-AuG-07     Redo log file +DGROUP1/orcl/onlinelog/group_2.265.631024719 is missing
776        HIGH     OPEN      22-AuG-07     Redo log file +DGROUP1/orcl/onlinelog/group_1.262.631024719 is missing
773        HIGH     OPEN      22-AuG-07     Redo log file +DGROUP1/orcl/onlinelog/group_1.263.631024719 is missing
268        HIGH     OPEN      21-AuG-07     Datafile 6: '/home/oracle/wichtig.dbf' contains one or more corrupt blocks
analyzing automatic repair options; this may take some time
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=154 device type=DISK
analyzing automatic repair options complete

Not all specified failures can currently be repaired.
The following failures must be repaired before advise for others can be given.

Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
788        CRITICAL OPEN      22-AuG-07     Redo log group 3 is unavailable
779        CRITICAL OPEN      22-AuG-07     Redo log group 2 is unavailable
770        CRITICAL OPEN      22-AuG-07     Redo log group 1 is unavailable
563        HIGH     OPEN      22-AuG-07     one or more non-system datafiles are missing
794        HIGH     OPEN      22-AuG-07     Redo log file +DGROUP1/orcl/onlinelog/group_3.266.631024719 is missing
791        HIGH     OPEN      22-AuG-07     Redo log file +DGROUP1/orcl/onlinelog/group_3.267.631024719 is missing
785        HIGH     OPEN      22-AuG-07     Redo log file +DGROUP1/orcl/onlinelog/group_2.264.631024719 is missing
782        HIGH     OPEN      22-AuG-07     Redo log file +DGROUP1/orcl/onlinelog/group_2.265.631024719 is missing
776        HIGH     OPEN      22-AuG-07     Redo log file +DGROUP1/orcl/onlinelog/group_1.262.631024719 is missing
773        HIGH     OPEN      22-AuG-07     Redo log file +DGROUP1/orcl/onlinelog/group_1.263.631024719 is missing
Mandatory Manual Actions
========================
no manual actions available

optional Manual Actions
=======================
1. If file +DGROUP1/orcl/onlinelog/group_3.266.631024719 was unintentionally renamed or moved, restore it
2. If file +DGROUP1/orcl/onlinelog/group_3.267.631024719 was unintentionally renamed or moved, restore it
3. If file +DGROUP1/orcl/onlinelog/group_2.264.631024719 was unintentionally renamed or moved, restore it
4. If file +DGROUP1/orcl/onlinelog/group_2.265.631024719 was unintentionally renamed or moved, restore it
5. If file +DGROUP1/orcl/onlinelog/group_1.262.631024719 was unintentionally renamed or moved, restore it
6. If file +DGROUP1/orcl/onlinelog/group_1.263.631024719 was unintentionally renamed or moved, restore it

Automated Repair options
========================
option Repair Description
------ ------------------
1      Perform incomplete database recovery to SCN 1273989; Drop and re-create redo log group member 
       +DGROUP1/orcl/onlinelog/group_2.264.631024719; Drop and re-create redo log group member 
       +DGROUP1/orcl/onlinelog/group_2.265.631024719; ...
  Strategy: The repair includes point-in-time recovery with some data loss
  Repair script: /oracle/installations/diag/rdbms/orcl/orcl/hm/reco_1616622346.hm
Der Data Recovery Advisor hat als Recovery-Zielzeitpunkt die System Change Number (SCN) 1273989 ermittelt. Das Skript ist schon fertig und muss nur noch genutzt werden mit
RMAN> repair failure;

Strategy: The repair includes point-in-time recovery with some data loss
Repair script: /oracle/installations/diag/rdbms/orcl/orcl/hm/reco_1616622346.hm

contents of repair script:
# database point-in-time recovery
   restore database until scn 1273989;
   recover database until scn 1273989;
   alter database open resetlogs;
   # drop/recreate redo log group member
   sql "begin sys.dbms_ir.execsqlscript
(filename => ''/oracle/installations/diag/rdbms/orcl/orcl/hm/reco_3736159746.hm'' ); end;";
   # drop/recreate redo log group member
   sql "begin sys.dbms_ir.execsqlscript
(filename => ''/oracle/installations/diag/rdbms/orcl/orcl/hm/reco_1623655871.hm'' ); end;";
   # drop/recreate redo log group member
   sql "begin sys.dbms_ir.execsqlscript
(filename => ''/oracle/installations/diag/rdbms/orcl/orcl/hm/reco_2432102512.hm'' ); end;";
   # drop/recreate redo log group member
   sql "begin sys.dbms_ir.execsqlscript
(filename => ''/oracle/installations/diag/rdbms/orcl/orcl/hm/reco_2462880842.hm'' ); end;";
   :

Do you really want to execute the above repair (enter YES or No)? YES
executing repair script

Starting restore at 22-AuG-07
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00002 to +DGROUP1/orcl/datafile/sysaux.257.631024635
channel ORA_DISK_1: restoring datafile 00003 to +DGROUP1/orcl/datafile/undotbs1.258.631024635
channel ORA_DISK_1: restoring datafile 00005 to +DGROUP1/orcl/datafile/example.268.631212239
channel ORA_DISK_1: restoring datafile 00006 to /home/oracle/wichtig.dbf
channel ORA_DISK_1: reading from backup piece 
+DGROUP2/orcl/backupset/2007_08_21/nnndf0_backup_orcl_000003_0821070335_0.256.631208209
channel ORA_DISK_1: piece handle=
+DGROUP2/orcl/backupset/2007_08_21/nnndf0_backup_orcl_000003_0821070335_0.256.631208209 
tag=BACKuP_oRCL_000003_
82107033549
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:55
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to +DGROUP1/orcl/datafile/system.256.631212275
channel ORA_DISK_1: reading from backup piece 
+DGROUP2/orcl/backupset/2007_08_21/nnndf0_backup_orcl_000003_0821070335_0.257.631208269
channel ORA_DISK_1: piece handle=
+DGROUP2/orcl/backupset/2007_08_21/nnndf0_backup_orcl_000003_0821070335_0.257.631208269 
tag=BACKuP_oRCL_000003_
82107033549
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:45
:
archived log file name=+DGROUP2/orcl/archivelog/2007_08_21/thread_1_seq_51.269.631211719 thread=1 sequence=51
archived log file name=+DGROUP2/orcl/archivelog/2007_08_21/thread_1_seq_52.270.631212357 thread=1 sequence=52
archived log file name=+DGROUP2/orcl/archivelog/2007_08_22/thread_1_seq_53.271.631288819 thread=1 sequence=53
media recovery complete, elapsed time: 00:00:15
Finished recover at 22-AuG-07

database opened
Mit dem Data Recovery Advisor wird das Recovery einer Oracle Datenbank ab Oracle Datenbank 11g viel einfacher. Statt der einzelnen Kommandos zum Restore und Recovery fordert man die Datenbank auf sich zu reparieren. Letztlich bekommt man dadurch eine optimierte Auswahl der besten Recoverymethode. Das eigentliche Recovery findet wie gewohnt mit den erprobten und robusten Methoden statt, die Oracle schon seit langer Zeit zur Verfügung stellt. Die Auswahlalgorithmen sind in der Datenbank selbst implementiert und nicht in einem externen Tool. Das ergibt immer eine optimale Nutzung der gerade vorliegenden Datenbankversion.

Zurück zur Community-Seite