Benutzer-Werkzeuge

Webseiten-Werkzeuge


dba:datendatei_defekt

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:

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
Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
"Autor: Gunther Pipperr"
dba/datendatei_defekt.txt · Zuletzt geändert: 2010/04/28 16:43 (Externe Bearbeitung)