Oracle Online Redologs

Überblick

Online Redolog Dateien sind eine der wichtigsten Komponenten einer Oracle Datenbank. Eine Datenbank muss aus mindestens zwei Redolog Gruppen bestehen (je mehr umso besser). Eine Redolog Gruppe besteht aus mindestens einer Online Redolog Datei.
In hochverfügbaren Umgebungen sollte eine Redolog Gruppe aus mindestens zwei gespiegelten Online Redolog Dateien (Member) bestehen.
Jegliche Veränderungen bzw. Transaktionen der Datenbank werden in die Online Redolog Dateien geschrieben. Die Online Redolog Dateien haben eine zyklische Lebensdauer. Ist eine Online Redolog Datei vollgeschrieben wird ein sogenannter "Logswitch" durchgeführt und die nächste Online Redolog Datei wird verwendet und vollgeschrieben. Nach der letzten vollgeschriebenen Online Redolog Datei wird die erste Online Redolog Datei wieder "überschrieben" usw.

Alle Transaktionen und Veränderungen werden nach und nach aus den Online Redolog Dateien in die Tablespace(s) bzw. Datenfiles geschrieben.
Sobald das vollständig durchgeführt ist wird das durch ein sogenannten "Checkpoint" festgehalten. Deshalb ist äussert wichtig, dass mehrere Online Redolog Dateien vorhanden sind, da eine Redolog Datei erst wieder überschrieben werden kann, wenn alle Checkpoint's "completed" sind. Das kann u.U. zu massiven Performance einbussen führen, da die Datenbank solange wartet bis der Checkpoint "completed" ist.

Um eine Oracle Datenbank nach einem kompletten- oder Teilverlust wiederherstellen zu können (Restore/Recovery) oder auch eine Kopie der Datenbank erstellen zu können (Cloning), auch über die Lebensdauer der Online Redolog Dateien hinaus, muss sich die Datenbank im „Archivelog“ Modus befinden.
D.h. nach einem Logswitch wird eine Kopie der Online Redolog Datei(en) im Archivelog Verzeichnis abgelegt

Ein weiterer Vorteil des „Archivelog“ Modus ist, dass die Datenbank für ein konsistentes Backup nicht gestoppt werden muss.

Mit jedem "Logswitch" wird die sogenannte "Log Sequence Number" um eins erhöht. Jedes "Archived Redo Logfile" erhält somit eine eindeutig identifizierbare Nummer. Die "Log Sequence Number" ist bei einem Recovery von entscheidender Bedeutung. Fehlt eine "Log Sequence Number" in der Reihenfolge des Recovery, dann kann die Datenbank nicht mehr auf den gewünschten Zustand hergestellt werden.

Archivelog Modus abfragen

Mit dem SQL Befehl "archive log list" kann man den Archivelog Modus und weitere Informationen abfragen.

SQL> archive log list
  Database log mode Archive Mode oder No Archive Mode
  Automatic archival Enabled
  Archive destination /opt/oracle/.../archive
  Oldest online log sequence 1942
  Next log sequence to archive 1944
  Current log sequence 1944

Redolog Dateien abfragen

Information der Online Redolog Dateien kann man mit folgendem SQL Befehl abfragen.

SQL> set linesize 200 pagesize 200 feedback off
     column "MEMBER" format a80
     column "STATUS" format a10
     select l.group#
           ,l.thread#
           ,''''||substr(f.member,1,100)||'''' as MEMBER
           ,substr(l.status,1,8) as STATUS
           ,l.bytes/1024/1024 as MB
     from v$logfile f, v$log l
     where f.group# = l.group#
     union all
     select l.group#
           ,l.thread#
           ,''''||substr(f.member,1,100)||'''' as MEMBER
           ,substr(l.status,1,8) as STATUS
           ,l.bytes/1024/1024 as MB
     from v$logfile f, v$standby_log l
     where f.group# = l.group#;

Redolog switch/checkpoint forcieren

Um einen Redolog switch zu erzwingen bevor dieses vollgeschrieben ist um z.B. ein aktuelles Backup des letzten Redolog’s zu erstellen.

SQL> alter system switch logfile;
     alter system checkpoint;

Redolog Gruppe oder Member hinzufügen

SQL> alter database add [standby] logfile [group X] (<MEMBER>,<MEMBER>) size ...M [reuse]
SQL> alter database add [standby] logfile [group X] <MEMBER> size ...M [reuse]
SQL> alter database add [standby] logfile member <MEMBER> to group X [reuse]

SQL> alter database add logfile group 1 -
     ('/opt/oracle/oradata/XE/redo01a.rdo','/opt/oracle/oradata/XE/redo01b.rdo') size 200M;

     alter database add logfile group 1 '/opt/oracle/oradata/XE/redo01a.rdo' size 200M; -- Neue Gruppe
     alter database add logfile member '/opt/oracle/oradata/XE/redo01b.rdo' to group 1; -- Member der Gruppe hinzufügen

Redolog Gruppe oder Member löschen

SQL> alter database drop [standby] logfile group X
SQL> alter database drop [standby] logfile member <MEMBER>

SQL> alter database drop logfile group 1;
     alter database drop logfile member '/opt/oracle/oradata/XE/redo01b.rdo';