====== Szenario 1 -- Eine/oder mehrere Datendatei(en) ist/sind defekt ====== Für Übungszwecke kann eine geöffnete Datei unter MS Windows mit dem Befehl ocopy „zerstört“ werden, ocopy kann auch geöffnete Dateien kopieren (mit ocopy von Oracle mit ausgeliefert). Übersicht, wann eine Datenbank in welchem Modus wiederhergestellt werden kann:\\ {{:datenbank_ruecksierungen_modus.png|}} ====== A) DB läuft noch ====== Die Datenbank kann auch im Modus „offen“ wiederhergestellt werden. \\ ABER: es darf kein Anwender mit dem defekten Bereich arbeiten. Will die DB dorthin schreiben, neigt die DB dazu, abzustürzen. Ablauf: * Im Alert Log nach der Dateinummer suchen, Nr. merken * SQLPlus V$datafile den "verlust“ bestimmen lassen, Nr. merken * Tablespace offline setzen * Über RMAN die Datendatei wiederherstellen * Tablespace online setzen Beispiel: Anwender versucht aus einer defekten Dateidatei zu lesen SQL> select count(*) from infodba.t; select count(*) from infodba.t * FEHLER in Zeile 1: ORA-01115: EA-Fehler beim Lesen von Block aus Datei 5 (Block Nr. 17) ORA-01110: Datendatei 5: 'D:\ORACLE\ORADATA\ORACLE_SID\USERS01.DBF' ORA-27091: skgfqio: E/A kann nicht in Queue gestellt werden ORA-27070: skgfdisp: Asynchrones Lesen/Schreiben misslungen OSD-04006: ReadFile()-Fehler, aus Datei kann nicht gelesen werden O/S-Error: (OS 38) Ende der Datei (EOF) erreicht. Status der Datendateien prüfen SQL> column name format a60 SQL> select file#,name,status from v$datafile; FILE# NAME STATUS ---------- ------------------------------------------------------------ ------- 1 D:\ORACLE\ORADATA\ORACLE_SID\SYSTEM01.DBF SYSTEM 2 D:\ORACLE\ORADATA\ORACLE_SID\UNDOTBS01.DBF ONLINE 3 D:\ORACLE\ORADATA\ORACLE_SID\INDX01.DBF ONLINE 4 D:\ORACLE\ORADATA\ORACLE_SID\TOOLS01.DBF ONLINE 5 D:\ORACLE\ORADATA\ORACLE_SID\USERS01.DBF RECOVER Die Alert-Log Datei auf den folgenden Eintrag prüfen: ... Sat Aug 26 16:55:02 2006 Errors in file d:\oracle\admin\ORACLE_SID\bdump\ORACLE_SID_ckpt_4032.trc: ORA-01171: datafile 5 going offline due to error advancing checkpoint ORA-01122: database file 5 failed verification check ORA-01110: data file 5: 'D:\ORACLE\ORADATA\ORACLE_SID\USERS01.DBF' ORA-01251: Unknown File Header Version read for file number 5 .... Wiederherstellen mit Oracle RMAN cmd> rman Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved. RMAN> connect target / Mit Ziel-Datenbank verbunden: ORACLE_SID (DBID=944794439) RMAN> restore datafile 5; Starten restore um 26.08.06 Kontrolldatei der Zieldatenbank wird anstelle des Recovery-Katalogs verwendet Zugewiesener Kanal: ORA_DISK_1 Kanal ORA_DISK_1: SID=18 Gerõtetyp=DISK Kanal ORA_DISK_1: Wiederherstellung von Datendatei-Backup-Satz beginnt Kanal ORA_DISK_1: Datendatei(en) werden zum Wiederherstellen aus Backup-Satz angegeben Datendatei 00005 wird wiederhergestellt zu D:\ORACLE\ORADATA\ORACLE_SID\USERS01.DBF Kanal ORA_DISK_1: Backup-Piece 1 wurde wiederhergestellt Piece-Handle=H:\oracle\flash_recovery_area\ORACLE_SID\BACKUPSET\ORACLE_SID_0DHRN8H1_1_1 Tag=TAG20060826T153457 Parameter=NULL Kanal ORA_DISK_1: Wiederherstellung abgeschlossen Beendet restore um 26.08.06 RMAN> recover datafile 5; Starten recover um 26.08.06 Kanal ORA_DISK_1 wird benutzt Starte Wiederherstellung des Datentrõgers Archive-Log-Thread 1 Sequenz 83 bereits auf Platte als Datei H:\oracle\flash_recovery_area\ORACLE_SID\ARCHIVELOG\ORACLE_SID_1_83.DBF vorhanden Archive-Log-Thread 1 Sequenz 84 bereits auf Platte als Datei H:\oracle\flash_recovery_area\ORACLE_SID\ARCHIVELOG\ORACLE_SID_1_84.DBF vorhanden Archive-Log-Thread 1 Sequenz 85 bereits auf Platte als Datei H:\oracle\flash_recovery_area\ORACLE_SID\ARCHIVELOG\ORACLE_SID_1_85.DBF vorhanden Archive-Log-Thread 1 Sequenz 86 bereits auf Platte als Datei H:\oracle\flash_recovery_area\ORACLE_SID\ARCHIVELOG\ORACLE_SID_1_86.DBF vorhanden Archive-Log-Thread 1 Sequenz 87 bereits auf Platte als Datei H:\oracle\flash_recovery_area\ORACLE_SID\ARCHIVELOG\ORACLE_SID_1_87.DBF vorhanden Archive-Log-Dateiname=H:\oracle\flash_recovery_area\ORACLE_SID\ARCHIVELOG\ORACLE_SID_1_83.DBF Thread=1 Sequenz=83 Archive-Log-Dateiname=H:\oracle\flash_recovery_area\ORACLE_SID\ARCHIVELOG\ORACLE_SID_1_84.DBF Thread=1 Sequenz=84 Archive-Log-Dateiname=H:\oracle\flash_recovery_area\ORACLE_SID\ARCHIVELOG\ORACLE_SID_1_85.DBF Thread=1 Sequenz=85 Wiederherstellung des Datentrõgers beendet Beendet recover um 26.08.06 Die Datendatei ist damit wiederhergestellt und nun muss nur noch der Tablespace online gesetzt werden. Cmd>sqlplus "/ as sysdba" SQL> alter tablespace users online; Tablespace wurde geõndert. Anwender Tabelle testen und den Anwender informieren. ====== B) DB ist abgestürzt ====== Der RMAN kann eine Datenbank nur dann wiederherstellen, wenn die Instance wenigstens im Modus „Nomount“ gestartet ist.\\ \\ Ist die Datenbank abgestürzt, muss trotzdem zuvor überprüft werden, ob alle Prozesse wirklich beendet sind. \\ Ablauf: * DB komplett stoppen * Im Alert Log nach der Dateinummer suchen, Nr. merken * DB im Status „mount“ starten * Restore/Recover mit RMAN durchführen * Datenbank öffnen Dienst stoppen: cmd>oradim -shutdown -sid ORACLE_SID -SHUTMODE a Dienst für die DB starten !!NUR DIENST!! cmd>oradim -edit -sid ORACLE_SID -startmode m cmd>oradim -startup -sid ORACLE_SID -starttype srvc Alert Log nach der Dateinummer suchen: ... Sat Aug 26 17:17:55 2006 Errors in file d:\oracle\admin\ORACLE_SID\bdump\ORACLE_SID_ckpt_4032.trc: ORA-01243: system tablespace file suffered media failure ORA-01122: database file 1 failed verification check ORA-01110: data file 1: 'D:\ORACLE\ORADATA\ORACLE_SID\SYSTEM01.DBF' ORA-01251: Unknown File Header Version read for file number 1 Sat Aug 26 17:17:55 2006 CKPT: terminating instance due to error 1243 Sat Aug 26 17:17:56 2006 Errors in file d:\oracle\admin\ORACLE_SID\bdump\ORACLE_SID_pmon_3872.trc: ORA-01243: system tablespace file suffered media failure Instance terminated by CKPT, pid = 4032 Mit RMAN Datenbank im Mount Stadium öffnen, Restore und Recover, DB mit SQL öffnen. cmd>rman Recovery Manager: Version 9.2.0.7.0 - Production Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved. RMAN> connect target / mit Zieldatenbank verbunden (nicht gestartet) RMAN> startup mount Oracle-Instance gestartet Datenbank angeschlossen Gesamte System Global Area 294723488 Byte Fixed Size 454560 Byte Variable Size 167772160 Byte Database Buffers 125829120 Byte Redo Buffers 667648 Byte RMAN> restore datafile 1; Starten restore um 26.08.06 Kontrolldatei der Zieldatenbank wird anstelle des Recovery-Katalogs verwendet Zugewiesener Kanal: ORA_DISK_1 Kanal ORA_DISK_1: SID=14 Gerõtetyp=DISK Kanal ORA_DISK_1: Wiederherstellung von Datendatei-Backup-Satz beginnt Kanal ORA_DISK_1: Datendatei(en) werden zum Wiederherstellen aus Backup-Satz angegeben Datendatei 00001 wird wiederhergestellt zu D:\ORACLE\ORADATA\ORACLE_SID\SYSTEM01.DBF Kanal ORA_DISK_1: Backup-Piece 1 wurde wiederhergestellt Piece-Handle=H:\oracle\flash_recovery_area\ORACLE_SID\BACKUPSET\ORACLE_SID_0DHRN8H1_1_1 Tag=TAG20060826T153457 Parameter=NULL Kanal ORA_DISK_1: Wiederherstellung abgeschlossen Beendet restore um 26.08.06 RMAN> recover datafile 1; Starten recover um 26.08.06 Kanal ORA_DISK_1 wird benutzt Starte Wiederherstellung des Datentrõgers ....... Wiederherstellung des Datentrõgers beendet Beendet recover um 26.08.06 RMAN> sql "alter database open"; SQL-Anweisung: alter database open