====== Online Redo Logs fehlen ======
Gehen alle Redo Logdateien (bzw. alle Mitglieder der Redo-Gruppen) einer Datenbank verloren, gehen auch die Daten der letzten Transaktionen verloren. Daher sollten die Dateien auf zwei verschiedenen Devices gespiegelt werden (wenn es von der Hardware her Sinn macht).
\\
Die Redolog Gruppen sind nicht immer alle in Verwendung, die DB arbeitet nur mit der aktiven Redolog Gruppe. Ist diese gefüllt, wird mit einem Logswitch auf die nächste Gruppe gewechselt und die vorherige Gruppe wird vom Archive als archiviertes Redolog gesichert.\\
Solange noch je ein Member dieser Gruppen existiert, entstehen keine Probleme, die DB läuft.\\
Achtung!\\
Regelmäßig Alert-Log prüfen, ob eine Member fehlt oder defekt ist!
===== 1) Mitglied einer Redo-Log Gruppe geht verloren =====
Geht nur eine Datei einer Gruppe verloren, ist dies kein größeres Problem.
--DB ist noch geöffnet, Fehler suchen
sql>select group#,status,member from v$logfile;
GROUP# STATUS MEMBER
-------- ---------- ----------------------------------------
4 D:\ORADATA\GPI\REDOLOG1\LOG4.ORA
4 D:\ORADATA\GPI\REDOLOG2\LOG4.ORA
3 INVALID D:\ORADATA\GPI\REDOLOG2\LOG3.ORA
3 D:\ORADATA\GPI\REDOLOG1\LOG3.ORA
--- Defekte Datei löschen
sql>alter database drop logfile member 'D:\ORADATA\GPI\REDOLOG2\LOG3.ORA';
Database altered.
--- Meue Member anlegen
sql>alter database add logfile member 'D:\ORADATA\GPI\REDOLOG2\LOG3.ORA' reuse to group 3;
Database altered.
===== 2) Verlust der inaktiven Redo-Log Gruppe Status INACTIVE in der v$log =====
Diese Gruppe wird gerade nicht für das Instance Recovery benötigt, der Archive hat die Gruppe bereits gesichert und die DB schreibt gerade nicht aktiv auf der Gruppe.
Ablauf:
--Fehler suchen
sql>select group#,status,member from v$logfile;
GROUP# STATUS MEMBER
-------- ---------- ----------------------------------------
4 D:\ORADATA\GPI\REDOLOG1\LOG4.ORA
4 D:\ORADATA\GPI\REDOLOG2\LOG4.ORA
3 INVALID D:\ORADATA\GPI\REDOLOG2\LOG3.ORA
3 INVALID D:\ORADATA\GPI\REDOLOG1\LOG3.ORA
--Ursache beseitigen, (Platte defekt usw.)
--Alter Database clear Logfile
sql>alter database clear logfile group 3;
Database altered.
Falls DB geschlossen ist, mit mount öffnen und Log Dateien mit Clear logfile neu initialisieren und DB öffnen.
===== 3) Verlust der aktiven Redo-Log Gruppe - Status AKTIVE in der v$log =====
AKTIVE bedeutet, die Redolog Gruppe enthält noch Daten, die die DB bei einem Instance Recovery benötigen würde.\\
Ablauf:
* DB noch geöffnet
* Ursache beseitigen
**Auf nächste Gruppe wechseln**\\
Nur Möglich wenn die nächste Gruppe noch vorhanden ist\\
Alter database switch logfile;
Falls dies nicht funktioniert -> Weiter wie bei Verlust inaktiver Gruppe Punkt 2 => [[dba:rac_internals#verlust_der_inaktiven_redo-log_gruppe_status_inactive_in_der_v_log|Punkt 2]]
===== 4. Verlust der current Redo-Log Gruppe - Status CURRENT in der v$log =====
CURRENT bedeutet, die DB versucht gerade in dieser Datei zu schreiben.
Ablauf:
* DB stürzt ab
* Ursache beseitigen
* Unvollständiges Recovery der DB durchführen (until cancel)
* Öffnen der Datenbank mit Reset Logs
siehe Punkt 5
===== 5. Verlust aller Redo Logdateien =====
Gehen alle Redo-Log Dateien verloren, muss die DB mit until cancel wiederhergestellt werden.
Ablauf:
* DB stürzt ab
* Ursache beseitigen
* Unvollständiges Recovery der DB durchführen (until cancel)
* Öffnen der Datenbank mit Reset Logs
Alert_log Eintrag:
Sun Aug 27 12:02:23 2006
Errors in file d:\oracle\admin\\bdump\_lgwr_3856.trc:
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: 'D:\ORACLE\ORADATA\\REDO01.LOG'
ORA-27041: unable to open file
OSD-04002: Datei kann nicht geöffnet werden
O/S-Error: (OS 2) Das System kann die angegebene Datei nicht finden.
DB komplett stoppen und nur den Service neu starten:
cmd>oradim -shutdown -sid -SHUTMODE a
cmd>oradim -edit -sid -startmode m
cmd>oradim -startup -sid -starttype srvc
Letzte SEQUNCE nur eines Archivlogs bestimmen
SQL> select max(SEQUENCE#) from v$archived_log;
MAX(SEQUENCE#)
--------------
85
RMAN:
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> recover database until sequence 85 thread 0;
Starten recover um 27.08.06
Kontrolldatei der Zieldatenbank wird anstelle des Recovery-Katalogs verwendet
Zugewiesener Kanal: ORA_DISK_1
Kanal ORA_DISK_1: SID=12 Gerõtetyp=DISK
Starte Wiederherstellung des Datentrõgers
Wiederherstellung des Datentrõgers beendet
Beendet recover um 27.08.06
RMAN> sql "alter database open resetlogs";
SQL-Anweisung: alter database open resetlogs
Neu am RMAN anmelden und DB sichern!
RMAN> connect target /
Mit Ziel-Datenbank verbunden: (DBID=944794439)
RMAN> report need backup;
Kontrolldatei der Zieldatenbank wird anstelle des Recovery-Katalogs verwendet
RMAN-Sperr-Policy wird f³r den Befehl angewendet
RMAN-Sperr-Policy ist auf Redundanz 10 festgelegt
Bericht. Dateien mit weniger als 10 redundanten Backups
Datei #bkps Name
---- ----- -----------------------------------------------------
1 0 D:\ORACLE\ORADATA\\SYSTEM01.DBF
2 0 D:\ORACLE\ORADATA\\UNDOTBS01.DBF
3 0 D:\ORACLE\ORADATA\\INDX01.DBF
4 0 D:\ORACLE\ORADATA\\TOOLS01.DBF
5 0 D:\ORACLE\ORADATA\\USERS01.DBF
RMAN> backup database;
RMAN> backup archivelog all;
RMAN> backup current controlfile;
Fazit: Nie alle Redologs verlieren!