Community ODI Tipp 005
Oracle Corporation
Für alle Mitglieder der Community: Data Integration           Tipp  #005 vom 18.04.2011
Oracle3
Was Sie schon immer über Supplemental Logging wissen wollten!

Immer wieder taucht die Frage auf, warum für das Auslesen des Transaktionslogs durch GoldenGate zusätzlich zum Supplemental Logging für die Tabellen, deren Änderungsdaten mitgeschrieben werden sollen, auch ein Minimal Supplemental Logging der Datenbank eingeschaltet werden muß.
 
Mein Kollege Joe deBuzna aus USA hat das einmal so schön erklärt, daß ich es hier unübersetzt wiedergebe:

“The minimal logging is just the way Oracle works with blocks and their headers. When a row is “chained” it migrates to another block but the original header info remains in the original block. Blocks outside of the initial block lack the original starting header info but we need the header info to know which change the block refers to. Minimal supplemental logging adds this block header info to the changed blocks (we’re really more concerned with the rows in these blocks).
 
Let me paint the picture another way. Suppose you have 50 power point presentations you share with your friend. For one of these presentations you have printed out all 10 pages. The first slide has the title but none of the other slides do. Now you realize you need to edit slide 8 and do so. Next, you hand slide 8  to your friend but without the title slide they have no idea which presentation it belongs to. So you cut off the title from the title slide and hand them this to your friend. Now they can connect the two; they know which presentation the change is for.
This is (more or less) similar to what minimal supplemental logging does. If you’re whole row (or presentation) fits into one block (slide) then there’s no chaining and minimal supplemental logging adds no overhead. But if your row fits into more than one block then each time one of those blocks is updated Oracle will add the title/block header info. So the amount of changes to chained rows is directly proportional to the extra overhead."
 
Das ist alles, was Minimal Supplemental Logging auf der Ebene der Oracle-Datenbank bewirkt. Abhängig von der Tabellendefinition werden die meisten Datensätze einer typischen Tabelle wohl in einen Block hineinpassen, so daß das Einschalten des Minimal Supplemental Logging nicht weiter auffallen dürfte. Eingeschaltet wird es durch das Kommando:

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
 
Gleich danach bitte das aktuelle Redolog File wechseln, damit die zusätzlichen Informationen von Anfang an im Redolog File enthalten sind:


ALTER SYSTEM SWITCH LOGFILE;
 
Auf der Tabellenebene dagegen sorgt das Supplemental Logging, welches in GoldenGate durch den Befehl

ADD TRANDATA <schemaname.tablename>

eingeschaltet wird, dafür, daß im Transaktionslog für jeden Datensatz die Felder des primären Schlüssels bzw. eines eindeutigen Index enthalten sind. Ohne dieses Supplemental Logging auf Tabellenebene würde jeder Datensatz nur mittels seiner internen Rowid repräsentiert werden, welche jedoch auf der Zieldatenbank keinerlei Bedeutung hat; der Datensatz wäre auf dem Ziel nicht identifizierbar. Zur logischen Identifikation eines Datensatzes wird daher ein eindeutiger Schlüssel bzw. Index  gebraucht. Hat eine Tabelle weder Primärschlüssel noch einen Unique Index, dann behandelt GoldenGate einfach alle Felder des Datensatzes als logischen Schlüssel, d.h. dann werden alle Felder in den Transaktionslog geschrieben.
 
Wenn ausschließlich INSERTs repliziert werden sollen, keine UPDATES oder DELETEs, dann könnte man auf das Supplemental Logging auf Tabellenebene verzichten, weil bei INSERTs, also der erstmaligen Neuanlage eines Datensatzes, ohnehin alle Felder in den Transaktionslog geschrieben werden.

 
Bitte beachten:

Es wird dringend davon abgeraten, das Supplemental Logging auf Tabellenebene für eine
GoldenGate Replikation über entsprechende Datenbankkommandos einzuschalten. Es soll für jede zu capture’nde Tabelle immer nur über das GoldenGate-Kommando:

ADD TRANDATA <schemaname.tablename>

eingeschaltet werden. Nur diese Methode ist supported. Wenn man sich ganz sicher ist, daß alle Tabellen immer einen Primärschlüssel enthalten, mag das Ergebnis identisch sein. Bei mehreren Indizes oder wenn die Tabelle gar keinen Unique Index besitzt, kann das Ergebnis aber davon abweichen, was GoldenGate im Log zu finden erwartet.
 
Eine ganz schlechte Idee ist es auch, über das Kommando:

alter table <table> add supplemental log data all columns;

das Logging von allen Feldern einzuschalten. Dies führt zu unnötig viel Informationen im Transaktionslog und kann die Performanz der Datenbank gehörig beeinträchtigen. Die hinter ADD TRANDATA stehende Prozedur tut ihr Bestes, nur soviel Information wie nötig in den Log aufzunehmen, um die Datenbank nur so wenig wie unbedingt nötig zu belasten.

Beste Grüße
Karsten Stöhr


Kennen Sie schon unsere anderen Deutschsprachigen Communities?

Mit den speziell für unsere Kunden und Partner in Deutschland gegründeten Communities,
decken wir inzwischen eine beachtliche Bandbreite an Themen ab. Wenn Sie diese Möglichkeit
nutzen möchten, finden Sie hier eine Liste all unserer Communities.

Sie möchten in Zukunft keine Community News mehr erhalten?

Sie haben sich in der Vergangenheit für unsere Data Integration Community registriert, um unsere News
und aktuelle Tipps automatisch zu erhalten. Wenn Sie diese Zusendung nicht mehr wünschen,
so können Sie sich hier zum Thema Data Integration jederzeit wieder austragen.

HW SW Work Together

Oracle 11g

Copyright © 2011, Oracle. All rights reserved.

karsten.stohr@oracle.com