Die Sicherung erfolgt in einem nur vom Recovery Manager lesbaren Format und erfolgt in einer Datei oder auf Band. Für die Sicherung auf Band muss ein Medien-Manager installiert sein (z.B. der Legato Storage Manager). Nur ein Benutzer mit SYSDBA-Priviliegien kann Sicherungs- und Wiederherstellungsoperationen durchführen.
Sie haben eine Level 0-Sicherung durchgeführt.
Sie führen monatlich eine Level 1-Sicherung durch.
Sie führen wöchentlich eine Level 2-Sicherung durch.
Sie führen täglich eine Level 3-Sicherung durch.
Angenommen, es tritt ein Datenbankfehler genau nach 3 Monaten, 2 Wochen und 3 Tagen auf. In diesem Fall muß die Level 0-Sicherung zurückgesichert werden. Im Anschluß müssen die 3 monatlich durchgeführten Level 1-Sicherungen wiederhergestellt werden. Nun müssen noch die 2 wöchentlich durchgeführten Level 2-Sicherungen durchgeführt werden. Zuletzt müssen nun die 3 täglich durchgeführten Level 3-Sicherung wiederherstellen.
RMAN> configure default device type disk format '/db01/BACKUP/\$U';disk - Festplatte
Dauerhafte Konfigurationseinstellungen anzeigen
RMAN> show all;Auflisten der Backups aller Dateien in der Datenbank
RMAN> list backup of database;Alle Backup Sets mit der Datendatei users01.dbf anzeigen
RMAN> list backup of datafile "/db01/ORADATA/u03/users01.dbf";Alle Kopien der Datendateien im Tablespace SYSTEM auflisten.
RMAN> list backup of tablespace "SYSTEM";REPORT - Erstellt eine detaillierte Analyse des Repository
Anzeige der Datenbankstruktur
RMAN> report schemaFür welche Dateien ist ein Backup erforderlich?
RMAN> report need backup;Welche Backup sind veraltet und können gelöscht werden?
RMAN> report obsolete;
In unserem Beispiel gehen wir davon aus, dass die Datenbank testdb29 mit dem RMAN gesichert werden muss. Als erstes starten wir hierfür den RMAN.
rman target sys/sys@testdb29 nocatalog RMAN>Nun wird die eigentliche Sicherung der Datenbank durchgeführt. Hierfür wird als erstes ein Kanal zugewiesen.
ALLOCATE CHANNEL channelname
TYPE medientyp_des_sicherungsmediums
FORMAT Bennenungskonvention_der_Sicherungsdatei;
Wir wollen in unserem Beispiel in eine Datei des Ordners /backup01 sichern.
Der Name der Sicherungsdatei sollte folgende Variablen enthalten:
%u - 8-Zeichen-String (Nummer des Sicherungsatzes, Erstellungsdatum).
%s - Nummer des Sicherungssatzes.
%p - Teilnummer des Sicherungssatzes (beginnt bei 1).
Wir benutzen demnach folgende Anweisung für die Zuweisung eines Kanals für die Sicherung:
ALLOCATE CHANNEL s1
TYPE disk
FORMAT '/backup01/b_%u_%s_%p';
Anschließend erfolgt die eigentliche Sicherung.
BACKUP DATABASE;Diese beiden Anweisungen werden nun noch durch ein RUN zusammengefasst.
run {
ALLOCATE CHANNEL s1
TYPE disk
FORMAT '/backup01/b_%u_%s_%p';
BACKUP DATABASE;
}
create table obst(nr number(3), obstname varchar2(10)) tablespace users; insert into obst values(1,'Erdbeeren'); insert into obst values(2,'Kirschen'); insert into obst values(3,'Himbeeren'); commit;Nun fahren wir die Instanz herunter und löschen die Datendatei users01.dbf, um einen Crash zu simulieren.
shutdown immediate; host; rm /oracle/oradata/testdb29/users01.dbfAnschließend versuchen wir, die Instanz wieder hochzufahren.
startup;
...
Datenbank mit Mount angeschlossen.
ORA-01157: Datendatei 3 kann nicht identifiziert/gesperrt werden
Siehe DBWR-Trace-Datei.
ORA-01110: Datendatei 3: '/oracle/oradata/testdb29/users01.dbf'
Wir müssen nun die Datendatei mit RMAN wiederherstellen.
ALLOCATE CHANNEL s1 TYPE disk FORMAT '/backup01/b_%u_%s_%p';
RESTORE DATAFILE /oracle/oradata/testdb29/users01.dbf;
RECOVER DATAFILE /oracle/oradata/test/users01.dbf;
RUN {
ALLOCATE CHANNEL s1 TYPE disk FORMAT '/backup01/b_%u_%s_%p';
RESTORE DATAFILE '/oracle/oradata/test/users01.dbf';
RECOVER DATAFILE '/oracle/oradata/test/users01.dbf';
}
Nun versuchen wir, die Datenbank zu öffnen und schauen, ob unser Obst wieder da ist.
alter database open; select * from obst; NR OBSTNAME -------------- 1 Erdbeeren 2 Kirschen 3 Himbeeren
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ONIn folgenden Fällen wird dann die Control-Datei gesichert.
create tablespace rman_ts datafile '/rman-katalog/rman_ts01.dbf' size 20M default storage (initial 100K next 100K pctincrease 0) ;
create user rman identified by rman default tablespace users temporary tablespace temp ; grant connect to rman; grant ressource to rman; grant recovery_catalog_owner to rman;
rman catalog rman/rman@cat RMAN> create catalog tablespace 'users';
rman catalog rman/rman@cat target internal/oracle@testdb29 RMAN> register database;
Die Sicherung mit einem Recovery-Catalog bietet darüber hinaus eine Reihe von nützlichen Erweiterung. So können Sie im Recovery-Catalog Skripte speichern, welche die Sicherung einer Datenbank oder Teile der Datenbank (Tablespaces, Dateien etc.) automatisieren. Folgendes Skript führt ein Cold Backup der Datenbank testdb29 durch:
replace script 'Vollsicherung' {
shutdown immediate;
startup mount;
allocate channel ch1 type disk format '/backup/%d_DB_%u_%s_%p';
backup database include current controlfile;
release channel ch1;
alter database open;
}
Aufgerufen wird das Skript folgendermaßen:
run {execute script Vollsicherung;}
Das Listing des Skriptes können Sie sich so anschauen:
print script "Vollsicherung";
list backup;Anzeigen bzw. Löschen von Sicherungen, die nicht mehr für das Wiederherstellen benötigt werden.
report obsolete; delete obsolete;Anzeigen bzw. Löschen von Sicherungen, die nicht mehr für das Point In Time-Wiederherstellen innerhalb der letzten sieben Tage benötigt werden.
report obsolete recovery window of 7 days; delete obsolete recovery window of 7 days;Anzeigen bzw. Löschen von Sicherungen, bei denen zwei neuere Kopien zur Verfügung stehen.
report obsolete redundancy = 2 device type disk; delete obsolete redundancy = 2 device type disk;Anzeigen von Dateien, die nicht wiederhergestellt werden können.
report unrecoverable database;Synchronisierung des Kataloges mit den Control-Dateien.
resync catalogÜberprüfen, ob die Sicherungsdateien existieren.
crosscheck backup;Ein Cross-Check markiert die Sicherungen, die gemäß der Retention Policy noch benötigt werden, entweder als AVAILABLE (falls die Sicherungen vefügbar sind) oder als EXPIRED (wenn die Sicherungen nicht verfügbar sind) Mit dem folgenden Befehl können Sie sich die Sicherungen, die nicht verfügbar sind, anzeigen lassen.
LIST EXPIRED;
SET NEWNAME FOR DATAFILE x TO location;Schauen wir uns das an einem kleinen Beispiel etwas genauer an. Wir gehen von einer Datenbank aus, bei der sich die Datendatei users01.dbf auf /data_01/users01.dbf befindet. Diese Platte fällt nunmehr aus und Sie möchten die Datendatei users01.dbf auf der /data_02/ wiederherstellen.
run {
SET NEWNAME FOR DATAFILE '/data_01/users01.dbf ' TO '/data_02/users01.dbf ';
RESTORE DATAFILE x;
RECOVER DATAFILE x;
}
Durch set newname wird für die datei /data_01/users01.dbf der neue Speicherort /data_02/users01.dbf festgelegt.
Anschließend wird diese Datei wiederhergestellt (schon an dem neuen Speicherort) und alle notwendigen Transaktionen angewendet.
Danach kann die Datenbank wieder normal geöffnet werden.
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup datafile 1;
backup datafile 2;
backup datafile 3;
}
In diesem Beispiel werden zwar drei Kanäle zugeordent, es erfolgen jedoch drei unabhängige Befehle für die Sicherung
backup datafile 1; backup datafile 2; backup datafile 3;Oracle arbeitet erst eine Anweisung komplett ab, bevor weitere Anweisungen durchgeführt werden. Folglich ist immer nur ein Kanal zu aktiv. Versuchen wir, das ganze etwas umzuschreiben:
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup datafile 1, 2, 3;
}
In diesem neuen Skript führt eine Sicherungsanweisung die Sicherung für die drei Datendateien durch (BACKUP DATAFILE 1, 2, 3).
Folglich sind alle drei Kanäle aktiv und können genutzt werden.
Ähnlich verhält es sich bei der Sicherung einer gesamten Datenbank. Nehmen wir an, dass eine Datenbank aus 16 Dateien besteht. Sie führen nun folgendes kleine Skript zur Sicherung der Datenbank aus:
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup database;
}
Auch in diesem Beispiel kann nur ein Kanal genutzt werden, da die Datenbank als Ganzes in eine Datei gesichert wird.
Schreiben wir nun das Ganze etwas um:
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup database filesperset 4;
}
Da in ein Sicherungsset nur vier Dateien eingeschlossen werden können (FILESPERSET=4), erfolgt die Sicherung in vier Sicherungssets (16 Dateien - >vier Dateien je Set - >4 Sets).
In diesem Fall können alle Kanäle benutzt werden, da in vier Sets gesichert wird.
CONFIGURE DEVICE TYPE DISK PARALLELISM 4;Der Parallelitätsgrad wird hierdurch auf vier festgelegt. Das bedeutet, dass im Zuge einer Sicherung auch vier Kanäle genutzt werden können. Nehmen wir an, Sie führen folgende Anweisung zur Sicherung Ihrer Datendateien 1,2 und 3 aus:
run {
backup datafile 1, 2, 3;
}
In diesem Fall werden drei Kanäle zugeordnet und für die Sicherung benutzt.
Nachdem der Administrator nun weiß, wie viel und welche Blöcke der Redo-Log-Dateien korrupt sind, kann er entscheiden, ob er die Wiederherstellung an diesem Punkt abbricht und die Datenbank mit OPEN RESETLOGS öffnet oder ob er die Wiederherstellung weiterführt und mit ALLOW n CORRUPTION eine gewisse Anzahl korrupter Blöcke 'zulässt'.
Durch die Einstellung FAST_START_MTTR_TARGET wird also bestimmt, wann Dirty Blocks vom Cache in die Datendateien geschrieben werden. Es wird das Checkpointverhalten verändert und gemäß den getroffenen Einstellungen angepasst.
Folgende Optionen sind in diesem Fall überflüssig:
LOG_CHECKPOINT_INTERVAL
Gibt an, wie oft ein Checkpoint ausgelöst wird, basierend auf der Anzahl der in die Logs geschriebenen Betriebssystemblöcke
LOG_CHECKPOINT_TIMEOUT
Gibt an, wie oft ein Checkpoint ausgelöst wird, basierend auf Zeit seit dem letzten Checkpoint
FAST_START_IO_TARGET
Gibt die maximale Anzahl von IO-Vorgängen für ein Rollforward an, die im Fehlerfall durchgeführt werden müssten.
Ist diese Anzahl überschritten, so werden die notwendigen Schritte (Schreiben von Dirty Blocks auf Platte und Setzen von Checkpoints) durchgeführt, um die Anzahl der IO's für ein Rollforward wieder unter den Wert von FAST_START_IO_TARGET zu bringen.
blockrecover datafile 12 block 1,2,3,4,5 datafile 32 block 10120,10121
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 28 DAYS;Nun können Sie alle älteren Sicherungen löschen. Hierfür müssen Sie zuvor einen Kanal für die Wartung zuweisen und im Anschluss wieder freigeben:
ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE DISK; DELETE OBSOLETE; RELEASE CHANNEL;Hinweis: Die Default-Retention-Policy entspricht der REDUNDANCY von 1. Das bedeutet, dass 1 Sicherungs-Set jeweils aufbewahrt wird. Durch folgenden Befehl wird die Retention Policy wieder auf Ihren ursprünglichen Default-Wert (REDUNDANCY 1) gesetzt.
CONFIGURE RETENTION POLICY CLEAR;
Stefan Hietel dama.go GmbH, Robert Warnke http://rowa.giso.de