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';

Oracle Silent Installation

Wenn keine Graphische Oberfläche zur Verfügung steht kann die Oracle Datenbank Software auf via Kommandozeile installiert werden.
Es ist zu beachten, dass für die verschiedene Oracle Versionen unterschiedliche Parameter verwendet werden müssen.

  • Oracle 11gR2 (11.2.0.2 - 11.2.0.4)

  • Oracle 12cR2

  • Oracle 19c

Oracle 11gR2 (11.2.0.2 - 11.2.0.4)

su - oracle

cd /tmp/p10404530_112030
unzip p10404530_112030_Linux-x86-64_1of7.zip
unzip p10404530_112030_Linux-x86-64_2of7.zip

cd /tmp/p10404530_112030/database

./runInstaller -ignoreSysPrereqs -ignorePrereq -waitforcompletion -showProgress -silent \
  oracle.install.option=INSTALL_DB_SWONLY \
  ORACLE_HOSTNAME=<hostname> \
  UNIX_GROUP_NAME=dba \
  INVENTORY_LOCATION=/u01/app/oraInventory \
  SELECTED_LANGUAGES=en,en_GB \
  ORACLE_HOME=/u01/app/oracle/product/11.2.0 \
  ORACLE_BASE=/u01/app/oracle \
  oracle.install.db.InstallEdition=EE \
  oracle.install.db.DBA_GROUP=dba \
  SECURITY_UPDATES_VIA_MYORACLESUPPORT=false \
  DECLINE_SECURITY_UPDATES=true

rm -rf /tmp/p10404530_112030

Oracle STATSPACK

STATSPACK ist ein Performance- und Analysetool und seit Oracle 8i verfügbar und es kann kostenlos verwendet werden.
Nachdem Sie Statspack installiert haben können Snapshots erstellt werden.
Snapshots können in verschiedenen Zeitintervallen und Levels erstellt werden.
Wenn ein Snapshot ausgeführt wird werden die Daten aus der SGA (System Global Area) in die entsprechenden Statspack Tabellen geschrieben.
Die Werte können dann zwischen zwei Snapshots verglichen werden.

Installation und konfiguration von STATSPACK

Tablespace erstellen

Per default wird der Tablespace SYSAUX verwendet. Um diesen nicht unnötig zu füllen wird ein eigener Tablespace STATSPACK zu erstellen.

# sqlplus / as sysdba
SQL> create tablespace statspack
     datafile '/u02/oradata/ORCL/statspack01.dbf' size 1G
     autoextend on next 100M maxsize 10G;

STATSPACK installieren

# sqlplus / as sysdba
SQL> define default_tablespace = 'STATSPACK'
     define temporary_tablespace='TEMP'
     define perfstat_password='perfstat'
     @?/rdbms/admin/spcreate.sql

STATSPACK Snapshot Level

# sqlplus / as sysdba
SQL> select * from stats$level_description order by snap_level;

Level 0
This level captures general statistics, including rollback segment, row cache, SGA, system events, background events, session events, system statistics, wait statistics, lock statistics, and Latch information

Level 5
This level includes capturing high resource usage SQL Statements, along with all data captured by lower levels

Level 6
This level includes capturing SQL plan and SQL plan usage information for high resource usage SQL Statements, along with all data captured by lower levels

Level 7
This level captures segment level statistics, including logical and physical reads, row lock, itl and buffer busy waits, along with all data captured by lower levels

Level 10
This level includes capturing Child Latch statistics, along with all data captured by lower levels

Um den Snapshot Level permanent zu wechseln kannst Du als Beispiel (Level 10) dieses Statement absetzen.

# sqlplus perfstat/perfstat
SQL> exec statspack.snap(i_snap_level=>10, i_modify_parameter=>'true');

Snapshots manuell erstellen

# sqlplus perfstat/perfstat
SQL> exec statspack.snap

Snapshots automatisch jede Stunde erstellen

Per default wird mit dem Skript spauto.sql ein DBMS_JOB erstellt, der pro Stunde einen Snapshot erstellt.

# sqlplus perfstat/perfstat
SQL> @?/rdbms/admin/spauto.sql -- erstellt ein DBMS_JOBS

Mit folgenden Statements kann der Snapshot Interval angepasst werden..

# sqlplus perfstat/perfstat
SQL> variable jobno number;
begin
    select job into :jobno from dba_jobs where what like '%statspack.snap%';    
    -- 1 Stunde
    -- dbms_job.change(:jobno, null, null, 'trunc(sysdate,''HH'')+60/1440');
    -- 30 Minuten
    -- dbms_job.change(:jobno, null, null, 'trunc(sysdate,''MI'')+30/1440');
    -- 15 Minuten
    dbms_job.change(:jobno, null, null, 'trunc(sysdate,''MI'')+15/1440');
    commit;
end;
/

Statspack Report zwischen 2 Snapshots erstellen

# sqlplus perfstat/perfstat
SQL> @?/rdbms/admin/spreport.sql

Alte Snapshots löschen

# sqlplus perfstat/perfstat
SQL> @?/rdbms/admin/sppurge.sql

Statspack deinstallieren

# sqlplus / as sysdba
SQL> @?/rdbms/admin/spdrop.sql
     drop tablespace statspack including contents and datafiles;

Click to add text or drag and drop element from right hand panel