Daten zuordnen und transformieren
Erfahren Sie mehr über Aufgaben, Funktionen, Befehle und Prozesse, die zur Integration von Daten zwischen Quell- und Zieltabellen verwendet werden.
Parameter zur Steuerung von Mappings und Datenintegration
Die gesamte Datenauswahl, -zuordnung und -bearbeitung, die Oracle GoldenGate ausführt, erfolgt mit mindestens einer Option der Parameter TABLE und MAP.
-
Verwenden Sie
TABLEin der Extract-Parameterdatei. -
Verwenden Sie
MAPin der Replicat-Parameterdatei.
TABLE und MAP geben die Datenbankobjekte an, die von den anderen Parametern in der Parameterdatei betroffen sind. Anweisungen zum Angeben von Objektnamen in diesen Parametern finden Sie unter Objektnamen in Oracle GoldenGate-Eingabe angeben.
Zuordnung zwischen unterschiedlichen Datenbanken
Für die Zuordnung und Konvertierung zwischen Tabellen mit unterschiedlichen Datenstrukturen ist entweder eine Quelldefinitionsdatei, eine Zieldefinitionsdatei oder in einigen Fällen beides erforderlich. Die Zuordnung zwischen unähnlichen Datenbanken wird durch die selbstbeschreibenden Trails gesteuert. Die Zuordnung erfolgt nach Spaltenname, unabhängig vom Datentyp für die Quell- oder Zielspalte.
Wenn Sie keine automatische Zuordnung basierend auf den selbstbeschreibenden Trails wünschen oder die Abwärtskompatibilität wünschen, können Sie SOURCEDEFS oder TARGETDEFS verwenden.
Zuordnung und Konvertierung auf NonStop-Systemen
Wenn Sie Daten von einem Windows- oder UNIX-System zu einem NonStop Enscribe-Ziel zuordnen oder konvertieren, muss die Zuordnung oder Konvertierung auf dem Windows- oder UNIX-Quellsystem durchgeführt werden. Replicat für NonStop kann keine dreiteiligen oder zweiteiligen SQL-Tabellennamen und -Datentypen in die dreiteiligen Dateinamen konvertieren, die für die Enscribe-Plattform verwendet werden. Extract kann die Traildaten mit Enscribe-Namen und Zieldatentypen formatieren.
Zuordnung und Konvertierung auf Windows- und UNIX-Systemen
Wenn Oracle GoldenGate nur auf Windows- und UNIX-basierten Systemen ausgeführt wird, können Spaltenzuordnung und -konvertierung im Extract-Prozess oder im Replicat-Prozess ausgeführt werden. Um den zusätzlichen Overhead dieser Verarbeitung im Extract-Prozess zu vermeiden, können Sie die Zuordnung und Konvertierung konfigurieren, die für den Replicat-Prozess oder ein Zwischensystem ausgeführt werden sollen.
Wenn mehrere Quellen und ein Ziel vorhanden sind, kann es effizienter sein, das Mapping und die Konvertierung an der Quelle durchzuführen.
Überlegungen zur Globalisierung beim Zuordnen von Daten
Berücksichtigen Sie bei der Planung der Zuordnung und Konvertierung von Daten zwischen Datenbanken und Plattformen, was von Oracle GoldenGate im Hinblick auf die Globalisierung unterstützt wird oder nicht.
Umrechnung zwischen Zeichensätzen
Oracle GoldenGate konvertiert zwischen Quell- und Zielzeichensätzen, wenn diese sich unterscheiden, sodass Objektnamen und Spaltendaten von einer Datenbank zur anderen ordnungsgemäß verglichen, zugeordnet und bearbeitet werden. Eine Liste der unterstützten Zeichensätze finden Sie unter Unterstützte Zeichensätze.
Um eine genaue Zeichendarstellung von einer Datenbank zur anderen sicherzustellen, muss Folgendes zutreffen:
-
Der Zeichensatz der Zieldatenbank muss eine Obermenge oder ein Äquivalent des Zeichensatzes der Quelldatenbank sein. Äquivalent bedeutet, dass die Zeichen nicht gleich sind, aber dieselben Zeichen haben. Zum Beispiel sind Shift-JIS und EUC-JP technisch nicht vollständig gleich, haben aber in den meisten Fällen die gleichen Zeichen.
-
Wenn Ihre Client-Anwendungen unterschiedliche Zeichensätze verwenden, muss der Datenbankzeichensatz auch eine Obermenge oder ein Äquivalent der Zeichensätze der Client-Anwendungen sein.
-
In vielen Datenbanken, einschließlich Oracle, ist es möglich, ein Zeichen in eine Datenbank zu erzwingen, die nicht Teil des Zeichensatzes ist. Oracle GoldenGate betrachtet dies als ungültigen Wert und ordnet dieses Zeichen beim Replizieren von Daten möglicherweise nicht korrekt zu. Für diese Situationen können Sie den Parameter
REPLACEBADCHARverwenden, wie in der Referenz zu Parametern und Funktionen für Oracle GoldenGate beschrieben.
In dieser Konfiguration wird jedes Zeichen bei der Konvertierung von einem Client- oder Quellzeichensatz in den lokalen Datenbankzeichensatz dargestellt.
Ein Replicat-Prozess kann die Konvertierung von einem Quellzeichensatz in einen Zielzeichensatz unterstützen.
Datenbankobjektnamen
Oracle GoldenGate verarbeitet Katalog-, Schema-, Tabellen- und Spaltennamen in ihrer Muttersprache, die durch die Zeichensatzcodierung der Quell- und Zieldatenbank bestimmt wird. Bei dieser Unterstützung werden Single-Byte- und Multibyte-Namen, Symbole, Akzentzeichen und die Groß-/Kleinschreibung beibehalten. Dabei wird das Gebietsschema auf allen Ebenen der Datenbankhierarchie berücksichtigt, sofern verfügbar.
Spaltendaten
Oracle GoldenGate unterstützt die Konvertierung von Spaltendaten zwischen Zeichensätzen, wenn die Daten in den folgenden Spaltentypen enthalten sind:
-
Zeichentypspalten:
CHAR/VARCHAR/CLOBbisCHAR/VARCHAR/CLOBeines anderen Zeichensatzes undCHAR/VARCHAR/CLOBbis und vonNCHAR/NVARCHAR/NCLOB. -
Spalten, die Zeichenfolgen- und Datums-/Uhrzeitdaten enthalten. Konvertierungen dieser Spalten werden zwischen z/OS EBCDIC- und Nicht-z/OS ASCII-Daten durchgeführt. Die Konvertierung wird weder zwischen ASCII- und ASCII-Versionen dieser Daten noch zwischen EBCDIC- und EBCDIC-Versionen durchgeführt, da die Daten in diesen Fällen kompatibel sind.
Hinweis: Oracle GoldenGate unterstützt Zeitstempeldaten von
0001-01-03 00:00:00bis9999-12-31 23:59:59. Wenn ein Zeitstempel von GMT in Ortszeit konvertiert wird, gelten diese Grenzwerte auch für den resultierenden Zeitstempel. Der Wert "Nullmonat", "Nulltag" oder "Alles Nulldatum" wird nicht unterstützt. Beispiel: Werte wie 0000-00-00 00:00:00 oder ein beliebiger Datumswert, der das Feld "Monat Null" oder "Tag Null" enthält, werden nicht unterstützt.
Die Zeichensatzkonvertierung für Spaltendaten ist auf eine direkte Zuordnung einer Quellspalte und einer Zielspalte in den COLMAP- oder USEDEFAULTS-Klauseln des Replicat-Parameters MAP beschränkt. Eine direkte Zuordnung ist eine Name-zu-Name-Zuordnung ohne die Verwendung einer Stored Procedure oder Spaltenkonvertierungsfunktion. Replicat führt die Zeichensatzkonvertierung aus. Von Extract wird keine Konvertierung ausgeführt.
Gebietsschema beibehalten
Oracle GoldenGate berücksichtigt das Gebietsschema der Datenbank beim Vergleich von Objektnamen ohne Beachtung der Groß-/Kleinschreibung. Eine Liste der unterstützten Gebietsschemas finden Sie unter Unterstützte Gebietsschemas.
Unterstützung für Escape Sequences
Oracle GoldenGate unterstützt die Verwendung einer Escape-Sequenz zur Darstellung einer Zeichenfolgenspalte, eines Literaltexts oder eines Objektnamens in der Parameterdatei. Sie können eine Escape-Sequenz verwenden, wenn das Betriebssystem das erforderliche Zeichen nicht unterstützt, z.B. ein Steuerzeichen, oder für einen anderen Zweck, der ein Zeichen erfordert, das nicht in einer Parameterdatei verwendet werden kann.
Eine Escape-Sequenz kann an einer beliebigen Stelle in der Parameterdatei verwendet werden, ist jedoch besonders nützlich für die folgenden Elemente in einer TABLE- oder MAP-Anweisung:
-
Ein Objektname
-
WHERE-Klausel -
COLMAP-Klausel, um einer Unicode-Spalte ein Unicode-Zeichen zuzuweisen oder einer Spalte ein nativ codiertes Zeichen zuzuweisen. -
Oracle GoldenGate-Spaltenkonvertierungsfunktionen innerhalb einer
COLMAP-Klausel.
Oracle GoldenGate unterstützt die folgenden Typen von Escape-Sequenzen:
-
\uFFFFUnicode-Escapesequenz. JederUNICODE-Codepunkt kann mit Ausnahme von Surrogatpaaren verwendet werden. -
\377Oktale Escape-Sequenz -
\xFFHexadezimale Escape-Sequenz
Es gelten folgende Regeln:
-
Wird für die Zuordnung eines Objektnamens in
TABLEoderMAPverwendet, gilt keine Einschränkung. Beispiel: Die folgendeTABLE-Spezifikation ist gültig:TABLE schema."\u3000ABC"; -
Bei Verwendung mit einer Spaltenzuordnungsfunktion kann ein beliebiger Codepunkt verwendet werden, jedoch nur für eine Spalte
NCHAR/NVARCHAR. Bei einerCHAR/VARCHAR-Spalte ist der Codepunkt auf das Äquivalent von 7-Bit-ASCII beschränkt. -
Die Quell- und Zieldatentypen müssen identisch sein (Beispiel:
NCHARbisNCHAR). -
Beginnen Sie jede Escape-Sequenz mit einem umgekehrten Solidus (Codepunkt
U+005C), gefolgt vom Zeichencodepunkt. (Ein Solidus wird häufiger als umgekehrter Schrägstrich bezeichnet.) Verwenden Sie die Escape-Sequenz anstelle des eigentlichen Zeichens in der Eingabezeichenfolge in der Parameteranweisungs- oder Spaltenkonvertierungsfunktion.Hinweis: Um einen tatsächlichen umgekehrten Schrägstrich in der Parameterdatei anzugeben, geben Sie einen doppelten umgekehrten Schrägstrich an. Beispiel: Im Folgenden wird ein umgekehrter Schrägstrich in
COL1: @STRFIND (COL1, '\' )gefunden.
So verwenden Sie die Unicode-Escape-Sequenz \uFFFF
-
Die Unicode-Escape-Sequenz
\uFFFFmuss mit einem kleingeschriebenenubeginnen, gefolgt von genau vier Hexadezimalziffern. -
Folgende Bereiche werden unterstützt:
-
0bis9(U+0030bisU+0039) -
AbisF(U+0041bisU+0046) -
abisf(U+0061bisU+0066)
-
\u20ac ist die Unicode-Escape-Sequenz für das Euro-Währungszeichen.
Hinweis: Verwenden Sie die Unicode-Escapesequenz, um eine zuverlässige plattformübergreifende Unterstützung zu erhalten. Oktale und hexadezimale Escape-Sequenzen sind auf verschiedenen Betriebssystemen nicht standardisiert.
So verwenden Sie die "377 Octal Escape Sequence"
-
Muss genau drei Oktalziffern enthalten.
-
Unterstützte Bereiche:
-
Bereich für erste Ziffer ist
0bis3(U+0030bisU+0033) -
Bereich für zweite und dritte Stellen ist
0bis7(U+0030bisU+0037)
\200ist die oktale Escape-Sequenz für das Euro-Währungszeichen in Microsoft Windows -
So verwenden Sie die hexadezimale Escape-Gleichung \xFF
-
Muss mit einem kleingeschriebenen
xbeginnen, gefolgt von genau zwei Hexadezimalziffern. -
Unterstützte Bereiche:
-
0bis9(U+0030bisU+0039) -
AbisF(U+0041bisU+0046) -
abisf(U+0061bisU+0066)
-
\x80 ist die hexadezimale Escape-Sequenz für das Euro-Währungszeichen auf der Codepage von Microsoft Windows 1252 Latin1.
Spalten mit TABLE und MAP zuordnen
Oracle GoldenGate bietet die Spaltenzuordnung auf Tabellenebene und auf globaler Ebene. Die Standardspaltenzuordnung wird auch ohne explizite Spaltenzuordnungsregeln bereitgestellt.
Dieser Abschnitt enthält die folgenden Richtlinien für die Zuordnung von Spalten:
Groß-/Kleinschreibung und Sonderzeichen in Spaltennamen
Standardmäßig befolgt Oracle GoldenGate SQL-92-Regeln zur Angabe von Spaltennamen und Literalen. In Oracle GoldenGate-Parameterdateien, Konvertierungsfunktionen, User Exits und Befehlen müssen Spaltennamen, bei denen die Groß-/Kleinschreibung beachtet wird, in doppelte Anführungszeichen gesetzt werden, wenn die Datenbank Groß-/Kleinschreibung durchsetzen muss. Bei anderen Datenbanken, bei denen die Groß-/Kleinschreibung nicht beachtet wird, müssen Spaltennamen angegeben werden, da sie in der Datenbank gespeichert sind. Literale müssen in einfache Anführungszeichen gesetzt werden. Weitere Informationen finden Sie unter Unterscheiden von Spaltennamen mit Groß-/Kleinschreibung von Literalen.
Spaltenzuordnung auf Tabellenebene mit COLMAP konfigurieren
Wenn Sie selbstbeschreibende Trails verwenden, wird jede Spalte im Quellobjekt demselben Spaltennamen im Zielobjekt zugeordnet. Sie müssen nur Spaltennamen verwalten, die sich zwischen Quelle und Ziel unterscheiden oder eine Spalte transformieren müssen.
Wenn Sie jedoch keine selbstbeschreibenden Trails verwenden, erfolgt die Standardzuordnung nach Spaltenreihenfolge und nicht nach Spaltenname. Spalte 1 in der Quelle wird also Spalte 1 im Ziel, Spalte 2 Spalte 2 Spalte 2 usw. zugeordnet.
Verwenden Sie die Option COLMAP der Parameter MAP und TABLE, um:
-
Ordnen Sie einzelne Quellspalten Zielspalten zu, die unterschiedliche Namen haben.
-
Standardspaltenzuordnung angeben, wenn keine explizite Spaltenzuordnung erforderlich ist.
-
Geben Sie Anweisungen zum Auswählen, Zuordnen, Übersetzen und Verschieben von Daten aus einer Quellspalte in eine Zielspalte an.
Standardspaltenzuordnung mit USEDEFAULS aktivieren
Mit der Option USEDEFAULTS von COLMAP können Sie die automatische Standardspaltenzuordnung für alle entsprechenden Quell- und Zielspalten angeben, die identische Namen aufweisen. Mit USEDEFAULTS können Sie Zeit sparen, indem Sie nicht jede Zielspalte explizit zuordnen müssen.
Bei der Standardzuordnung ordnet Oracle GoldenGate diese Spalten zu und übersetzt bei Bedarf die Datentypen basierend auf der Datendefinitionsdatei. Geben Sie keine Standardzuordnung für Spalten an, die bereits mit einer expliziten Mappinganweisung zugeordnet sind.
Das folgende Beispiel einer Spaltenzuordnung veranschaulicht die Verwendung von Standard- und expliziter Spaltenzuordnung für eine Quelltabelle ACCTBL und eine Zieltabelle ACCTTAB. Die meisten Spalten sind in beiden Tabellen identisch, mit Ausnahme der folgenden Unterschiede:
-
Die Quelltabelle enthält eine Spalte
CUST_NAME, während die Zieltabelle eine SpalteNAMEenthält. -
Eine zehnstellige Spalte
PHONE_NOin der Quelltabelle entspricht den separaten SpaltenAREA_CODE,PHONE_PREFIXundPHONE_NUMBERin der Zieltabelle. -
Die separaten Spalten
YY, MMundDDin der Quelltabelle entsprechen einer einzelnen SpalteTRANSACTION_DATEin der Zieltabelle.
Um diese Unterschiede zu beheben, wird USEDEFAULTS verwendet, um ähnliche Spalten automatisch zuzuordnen, während explizite Zuordnungs- und Konvertierungsfunktionen für unterschiedliche Spalten verwendet werden.
Das folgende Beispiel zeigt die Spaltenzuordnung mit der Option COLMAP der Parameter MAP und TABLE. Hier wird die Zuordnung der Quelltabelle ACCTBL zur Zieltabelle ACCTTAB beschrieben.
MAP SALES.ACCTBL, TARGET SALES.ACCTTAB,
COLMAP ( USEDEFAULTS,
NAME = CUST_NAME,
TRANSACTION_DATE = @DATE ('YYYY-MM-DD', 'YY',YEAR, 'MM', MONTH, 'DD', DAY),
AREA_CODE = @STREXT (PHONE_NO, 1, 3),
PHONE_PREFIX = @STREXT (PHONE_NO, 4, 6),
PHONE_NUMBER = @STREXT (PHONE_NO, 7, 10)
)
;
Tabelle 3: Beispielspaltenzuordnung
| Parameteranweisung | Beschreibung |
|---|---|
COLMAP |
Startet die COLMAP-Anweisung. |
USEDEFAULTS, |
Ordnet Quellspalten unverändert zu, wenn die Zielspaltennamen identisch sind. |
NAME = CUST_NAME, |
Ordnet die Quellspalte CUST_NAME der Zielspalte NAME zu. |
TRANSACTION_DATE = @DATE ('YYYY-MM-DD', 'YY', YEAR, 'MM', MONTH, 'DD', DAY), |
Konvertiert das Transaktionsdatum mit der Spaltenkonvertierungsfunktion @DATE aus den Quelldatumsspalten in die Zielspalte TRANSACTION_DATE. |
AREA_CODE = @STREXT (PHONE_NO, 1, 3), PHONE_PREFIX = @STREXT (PHONE_NO, 4, 6), PHONE_NUMBER = @STREXT (PHONE_NO, 7, 10)) ; |
Konvertiert die Quellspalte PHONE_NO mit der Spaltenkonvertierungsfunktion @STREXT in die separaten Zielspalten AREA_CODE, PHONE_PREFIX und PHONE_NUMBER. |
Weitere Informationen zu den Regeln gefolgt von Oracle GoldenGate für die Standardspaltenzuordnung finden Sie unter Erläuterungen zur Standardspaltenzuordnung.
Spalten angeben, die in der COLMAP-Klausel zugeordnet werden sollen
Die COLMAP-Syntax lautet:
COLMAP ([USEDEFAULTS, ] target_column = source_expression)
In dieser Syntax ist target_column der Name der Zielspalte und source_expression. Beispiele für source_expressions:
-
Der Name einer Quellspalte, wie
ORD_DATE. -
Numerische Konstante, wie
123. -
Zeichenfolgenkonstante in einfachen Anführungszeichen, wie
'ABCD'. -
Ein Ausdruck mit einer Spaltenkonvertierungsfunktion von Oracle GoldenGate. In einer
COLMAP-Anweisung können Sie alle Oracle GoldenGate-Spaltenkonvertierungsfunktionen verwenden, um Daten für die zugeordneten Spalten zu transformieren. Beispiel:@STREXT (COL1, 1, 3) -
Beispiel für die Verwendung von
BEFORE column_name:BEFORE ORD_DATE -
Beispiel für die Verwendung von
AFTER column_name:AFTER ORD_DATE. Dies ist die Standardoption, wenn ein Spaltenname aufgeführt wird.
Wenn bei der Spaltenzuordnung die Groß-/Kleinschreibung von Spalten verschiedener Datenbanktypen beachtet wird, geben Sie jede Spalte so an, wie sie in der Datenbank gespeichert ist.
-
Wenn für die Datenbank doppelte Anführungszeichen erforderlich sind, um die Groß-/Kleinschreibung zu erzwingen, geben Sie den Spaltennamen in Anführungszeichen an.
-
Wenn bei der Datenbank die Groß-/Kleinschreibung beachtet wird, ohne dass doppelte Anführungszeichen erforderlich sind, geben Sie den Spaltennamen so an, wie er in der Datenbank gespeichert ist.
Im Folgenden wird eine Zuordnung zwischen einer Zielspalte in einer Oracle AI Database und einer Quellspalte in einer SQL Server-Datenbank unter Beachtung der Groß-/Kleinschreibung gezeigt.
COLMAP ("ColA" = ColA)
Weitere Informationen zum Angeben von Namen für Oracle GoldenGate finden Sie unter Objektnamen in Oracle GoldenGate-Eingabe angeben.
Überlegungen zur Globalisierung bei der Zuordnung von Quell- und Zielspalten in Datenbanken mit unterschiedlichen Zeichensätzen und Gebietsschemas finden Sie unter Überlegungen zur Globalisierung bei der Zuordnung von Daten.
Vermeiden Sie es, COLMAP zu verwenden, um einen Wert einer Schlüsselspalte zuzuordnen (was dazu führt, dass der Vorgang zu einer Primärschlüsselaktualisierung wird). Die WHERE-Klausel, mit der Oracle GoldenGate die Zielzeile sucht, verwendet nicht das korrekte Vorbild der Schlüsselspalte. Stattdessen wird das After-Image verwendet. Dies führt zu Fehlern, wenn Sie Funktionen verwenden, die auf dieser Schlüsselspalte basieren, z.B. eine SQLEXEC-Anweisung.
Einschränkungen bei Spaltenzuordnungen
Die folgenden Einschränkungen gelten für die Spaltenzuordnung:
-
LOB-Spalten können nicht inFILTER-,WHERE-Spalten oder alssource_expressionin einerCOLMAP-Anweisung verwendet werden.LOB-Spalten sindBLOB,CLOB,NCLOB,XMLType, benutzerdefinierte Datentypen, verschachtelte Tabellen,VARRAYsund andere spezielle Datentypen. -
Wenn die Quellspalte mehr als 4000 Byte enthält, kann sie nicht in Transformationsroutinen verwendet werden, da der Wert im Trail als
LOB-Datensatz gespeichert wird. Beispiel: EinVARCHAR2(4000 CHAR) in Oracle und der japanische Zeichensatz werden als 3 Byte für jedes Zeichen gespeichert. Dies bedeutet, dass die Spalte 12000 Byte lang sein könnte und Oracle GoldenGate diesen Wert als FeldLOBspeichern würde. -
Die vollständige SQL-Anweisung, die Oracle GoldenGate ausführen würde, würde eine Größe von mehr als 4 MB aufweisen. Beispiel: Wenn Sie eine Tabelle mit Tausenden von
VARCHAR2(4000)-Spalten haben und 4000 Byte in jede Tabelle aufnehmen möchten, könnte dies dazu führen, dass die gesamte SQL-Anweisung, die Oracle GoldenGate ausführen wird, die maximale Größe von 4 MB überschreitet.
Globale Spaltenzuordnung mit COLMATCH konfigurieren
Mit dem Parameter COLMATCH können Sie globale Regeln für die Spaltenzuordnung erstellen. Mit COLMATCH können Sie zwischen ähnlich strukturierten Tabellen zuordnen, die unterschiedliche Spaltennamen für dieselben Datensets haben. COLMATCH bietet eine bequemere Möglichkeit, Spalten dieses Typs zuzuordnen als die Zuordnung auf Tabellenebene mit einer COLMAP-Klausel in einzelnen TABLE- oder MAP-Anweisungen.
Die Groß-/Kleinschreibung wird wie folgt unterstützt:
-
Bei MySQL sucht SQL Server, wenn die Groß-/Kleinschreibung bei der Datenbank beachtet wird,
COLMATCHnach einer genauen Groß-/Kleinschreibung und Namensübereinstimmung, unabhängig davon, ob ein Name in Anführungszeichen angegeben ist. -
Bei Oracle AI Database- und Db2-Datenbanken, bei denen bei Namen in derselben Datenbank die Groß-/Kleinschreibung beachtet oder die Groß-/Kleinschreibung nicht beachtet werden muss und doppelte Anführungszeichen für die Groß-/Kleinschreibung erforderlich sind, erfordert
COLMATCHeine genaue Groß-/Kleinschreibung und Namensübereinstimmung, wenn ein Name in Anführungszeichen in der Datenbank steht.
Syntax
COLMATCH
{NAMES target_column = source_column |
PREFIX prefix |
SUFFIX suffix |
RESET}
| Argument | Beschreibung |
|---|---|
NAMES target_column = source_column |
Zuordnungen basierend auf Spaltennamen. Setzen Sie den Spaltennamen in doppelte Anführungszeichen, wenn die Groß-/Kleinschreibung beachtet wird und die Datenbank Anführungszeichen benötigt, um die Groß-/Kleinschreibung zu erzwingen. Bei diesen Datenbanktypen wird ein Spaltenname ohne Anführungszeichen von Oracle GoldenGate so behandelt, dass die Groß-/Kleinschreibung nicht beachtet wird. Bei Datenbanken, bei denen die Groß-/Kleinschreibung ohne Anführungszeichen unterstützt wird, geben Sie den Spaltennamen so an, wie er in der Datenbank gespeichert ist. Wenn sich die COLMATCH zwischen Spalten in verschiedenen Datenbanktypen befindet, stellen Sie sicher, dass die Namen die entsprechende Groß-/Kleinschreibung für jedes Element wiedergeben. Beispiel: Im Folgenden wird der Zielspaltenname "aBc" in einer Oracle AI Database und der Quellspaltenname aBc in einer SQL Server-Datenbank unter Beachtung der Groß-/Kleinschreibung angegeben: COLMATCH NAMES "aBc" = aBc. |
PREFIX prefix / SUFFIX suffix |
Ignoriert das angegebene Namenspräfix oder Suffix. Setzen Sie das Präfix oder Suffix in doppelte Anführungszeichen, wenn die Datenbank Anführungszeichen erfordert, um die Groß-/Kleinschreibung zu erzwingen. Beispiel: "P_". Bei diesen Datenbanktypen wird ein Präfix oder Suffix ohne Anführungszeichen als Groß-/Kleinschreibung behandelt. Bei Datenbanken, bei denen die Groß-/Kleinschreibung ohne Anführungszeichen unterstützt wird, geben Sie das Präfix oder Suffix so an, wie es in der Datenbank gespeichert ist. Beispiel: "P_" gibt ein P-Präfix in Großbuchstaben an. Das folgende Beispiel gibt ein Präfix ohne Beachtung der Groß-/Kleinschreibung an, das ignoriert werden soll: COLMATCH PREFIX p_. Der Zielspaltenname P_ABC ist dem Quellspaltennamen ABC zugeordnet, und der Zielspaltenname P_abc ist dem Quellspaltennamen abc zugeordnet. Das folgende Beispiel gibt ein Suffix an, das die Groß-/Kleinschreibung ignorieren soll: SUFFIX "_k". Der Zielspaltenname ABC_k wird dem Quellspaltennamen ABC zugeordnet, und der Zielspaltenname "abc_k" wird dem Quellspaltennamen abc zugeordnet. |
RESET |
Schaltet die vorher definierten COLMATCH-Regeln für nachfolgende TABLE- oder MAP-Anweisungen ab. |
Das folgende Beispiel zeigt, wann COLMATCH. verwendet werden soll.Die Quell- und Zieltabellen sind identisch, es sei denn, die Datenbank der Tabelle names.The unterscheidet sich geringfügig von der Groß-/Kleinschreibung.
| ACCT-Tabelle | ORD-Tabelle |
|---|---|
CUST_CODE CUST_NAME CUST_ADDR PHONE S_REP S_REPCODE |
CUST_CODE CUST_NAME ORDER_ID ORDER_AMT S_REP S_REPCODE |
| ACCOUNT Tabelle | ORDER-Tabelle |
|---|---|
CUSTOMER_CODE CUSTOMER_NAME CUSTOMER_ADDRESS PHONE REP REPCODE |
CUSTOMER_CODE CUSTOMER_NAME ORDER_ID ORDER_AMT REP REPCODE |
Um die Quellspalten den Zielspalten in diesem Beispiel zuzuordnen und nachfolgende Zuordnungen für andere Tabellen zu verarbeiten, lautet die Syntax:
COLMATCH NAMES CUSTOMER_CODE = CUST_CODE
COLMATCH NAMES CUSTOMER_NAME = CUST_NAME
COLMATCH NAMES CUSTOMER_ADDRESS = CUST_ADDR
COLMATCH PREFIX S_
MAP SALES.ACCT, TARGET SALES.ACCOUNT, COLMAP (USEDEFAULTS);
MAP SALE.ORD, TARGET SALES.ORDER, COLMAP (USEDEFAULTS);
COLMATCH RESET
MAP SALES.REG, TARGET SALE.REG;
MAP SALES.PRICE, TARGET SALES.PRICE;
Basierend auf den Regeln im Beispiel geschieht Folgendes:
-
Daten werden aus den Spalten
CUST_CODEin den TabellenACCTundORDder Quelle den SpaltenCUSTOMER_CODEin den TabellenACCOUNTundORDERdes Ziels zugeordnet. -
Das Präfix
S_wird ignoriert. -
Spalten mit denselben Namen, wie die Spalten
PHONEundORDER_AMT, werden automatisch mitUSEDEFAULTSzugeordnet, ohne dass explizite Regeln erforderlich sind. Weitere Informationen finden Sie unter Erläuterungen zur Standardspaltenzuordnung. -
Die vorherige globale Spaltenzuordnung ist für die Tabellen
REGundPRICEdeaktiviert. Quell- und Zielspalten in diesen Tabellen werden automatisch zugeordnet, da alle Namen identisch sind.
Erläuterungen zur Zuordnung von Standardspalten
Wenn für selbstbeschreibende Trails keine explizite Spaltenzuordnung vorhanden ist (entweder mit COLMATCH oder COLMAP), ordnet Oracle GoldenGate Quell- und Zielspalten standardmäßig den folgenden Regeln zu.
Dies gilt nicht, wenn Sie SOURCEDEFS oder TARGETDEFS verwenden.
-
Wenn eine Quellspalte gefunden wird, deren Name und Groß-/Kleinschreibung exakt mit denen der Zielspalte übereinstimmen, werden die beiden Spalten zugeordnet.
-
Wenn keine Fallübereinstimmung gefunden wird, wird die Fallback-Namenszuordnung verwendet. Beim Fallback-Mapping wird eine Zieltabellenzuordnung ohne Beachtung der Groß-/Kleinschreibung durchgeführt, um eine Namensübereinstimmung zu finden. Der ungenaue Abgleich von Spaltennamen wird unter Verwendung von Großbuchstaben angewendet. Dieses Verhalten wird vom Parameter
GLOBALSNAMEMATCHIGNORECASEgesteuert. Sie können den Abgleich von Fallback-Namen mit dem ParameterNAMEMATCHEXACTdeaktivieren. Sie können ihn aber auch mit einer Warnmeldung mit dem ParameterNAMEMATCHNOWARNINGaktivieren. -
Zielspalten, die keiner Quellspalte entsprechen, übernehmen die von der Datenbank festgelegten Standardwerte.
Wenn die Standardzuordnung nicht ausgeführt werden kann, wird in der Zielspalte standardmäßig einer der in der folgenden Tabelle angezeigten Werte verwendet.
| Spaltentyp | Wert |
|---|---|
| Numerisch | Null (0) |
Zeichen oder VARCHAR |
Arbeitsplätze |
| Datum/Uhrzeit | Aktuelles Datum und Uhrzeit |
Spalten, die einen NULL-Wert annehmen können |
Null |
Datentypkonvertierungen
Erfahren Sie, wie Oracle GoldenGate Datentypen zuordnet.
Numerische Spalten
Numerische Spalten werden so konvertiert, dass sie dem Typ und der Skalierung der Zielspalte entsprechen. Wenn die Skalierung der Zielspalte kleiner als die der Quelle ist, wird die Zahl rechts abgeschnitten. Wenn die Skalierung der Zielspalte größer als die der Quelle ist, wird die Zahl mit Nullen auf der rechten Seite aufgefüllt.
Sie können einen Substitutionswert für ungültige numerische Daten angeben, die beim Zuordnen von Zahlenspalten ermittelt werden, indem Sie den Parameter REPLACEBADNUM für weitere Informationen verwenden.
Zeichenspalten
Zeichenspalten können zeichenbasierte Datentypen wie VARCHAR, numerische Datentypen in Zeichenfolgenform, Datum und Uhrzeit in Zeichenfolgenform und Zeichenfolgenliterale akzeptieren. Wenn die Skalierung der Zielspalte kleiner als die der Quelle ist, wird die Spalte rechts abgeschnitten. Wenn die Skalierung der Zielspalte größer als die der Quelle ist, wird die Spalte mit Leerzeichen auf der rechten Seite aufgefüllt.
Literale müssen in einfache Anführungszeichen gesetzt werden.
Sie können die Antwort des Oracle GoldenGate-Prozesses steuern, wenn kein gültiger Codepunkt für den Quell- oder Zielzeichensatz vorhanden ist, wenn Zeichenspalten zugeordnet werden, indem Sie den Parameter REPLACEBADCHAR für weitere Informationen verwenden.
Datetime-Spalten
Datetime-Spalten (DATE, TIME und TIMESTAMP) können Datetime- und Zeichenspalten sowie Zeichenfolgenliterale akzeptieren. Literale müssen in einfache Anführungszeichen gesetzt werden. Um eine Zeichenspalte einer Datetime-Spalte zuzuordnen, stellen Sie sicher, dass sie dem externen Oracle GoldenGate-SQL-Format YYYY-MM-DD HH:MI:SS.FFFFFF. entspricht
Oracle GoldenGate unterstützt Zeitstempeldaten von 0001-01-03 00:00:00 bis 9999-12-31 23:59:59. Wenn ein Zeitstempel von GMT in Ortszeit konvertiert wird, gelten diese Grenzwerte auch für den resultierenden Zeitstempel. Abhängig von der Zeitzone kann die Konvertierung Stunden addieren oder subtrahieren, was dazu führen kann, dass der Zeitstempel den unteren oder oberen unterstützten Grenzwert überschreitet.
Die erforderliche Genauigkeit variiert je nach Datentyp und Zielplattform. Wenn die Skalierung der Zielspalte kleiner als die der Quelle ist, werden die Daten rechts abgeschnitten. Wenn die Skalierung der Zielspalte größer als die der Quelle ist, wird die Spalte rechts mit den Werten für das aktuelle Datum und die aktuelle Uhrzeit erweitert.
Zeilen auswählen und filtern
Die Filterung kann nur für Spalten ausgeführt werden, die für Oracle GoldenGate verfügbar sind. In TRANLOG Extract hat Oracle GoldenGate Zugriff auf alle Spalten, die in den Redo-Logs und in der Datenbank vorhanden sind. Wenn die Spalten nicht in den Redo-Logs enthalten sind, müssen sie explizit abgerufen werden (mit FETCHCOLS), damit sie gefiltert werden können. In der Extract-Pumpe und im Replicat müssen die Spalten in der Traildatei verfügbar sein. Aus diesem Grund muss jede Spalte, die Sie in einer FILTER- oder WHERE-Klausel verwenden möchten, explizit mit ADD TRANDATA COLS protokolliert werden, und Sie müssen den Standardwert von LOGALLSUPCOLS beibehalten.
Um Zeilen für die Extraktion oder Replikation herauszufiltern oder auszuwählen, verwenden Sie die Klauseln FILTER und WHERE der Parameter TABLE und MAP.
Die FILTER-Klausel bietet Ihnen mehr Funktionalität als die WHERE-Klausel, da Sie eine der Oracle GoldenGate-Spaltenkonvertierungsfunktionen verwenden können, während die WHERE-Klausel einfache WHERE-Operatoren akzeptiert.
Zeilen mit einer FILTER-Klausel auswählen
Verwenden Sie eine FILTER -Klausel, um Zeilen basierend auf einem numerischen Wert auszuwählen, indem Sie einfache Operatoren oder eine oder mehrere Oracle GoldenGate-Spaltenkonvertierungsfunktionen verwenden.
Hinweis: Um eine Spalte basierend auf einer Zeichenfolge zu filtern, verwenden Sie eine der Oracle GoldenGate-Zeichenfolgenfunktionen, oder verwenden Sie eine WHERE-Klausel.
Die Syntax für FILTER in einer TABLE-Anweisung lautet wie folgt:
TABLE source_table
, FILTER (
[, ON INSERT | ON UPDATE| ON DELETE]
[, IGNORE INSERT | IGNORE UPDATE | IGNORE DELETE]
, filter_clause);
Die Syntax für FILTER in einer MAP-Anweisung lautet wie folgt und enthält eine Fehlerbehandlungsoption.
MAP source_table, TARGET target_table,
, FILTER (
[, ON INSERT | ON UPDATE| ON DELETE]
[, IGNORE INSERT | IGNORE UPDATE | IGNORE DELETE]
[, RAISEERROR error_number]
, filter_clause);
Gültige FILTER-Klauselelemente sind:
-
Eine Oracle GoldenGate-Spaltenkonvertierungsfunktion. Diese Funktionen sind in Oracle GoldenGate integriert, sodass Sie Tests durchführen, Daten bearbeiten, Werte abrufen usw. können. Weitere Informationen zu Oracle GoldenGate-Konvertierungsfunktionen finden Sie unter Daten testen und transformieren.
-
Zahlen
-
Spalten, die Zahlen enthalten
-
Funktionen, die Zahlen zurückgeben
-
Arithmetische Operatoren:
-
+(Plus) -
-(Minus) -
*(multiplizieren) -
/(divide) -
%(Rest)
-
-
Vergleichsoperatoren:
-
>(größer als) -
>=(größer als oder gleich) -
<(weniger als) -
<=(kleiner/gleich) -
=(gleich) -
<>(nicht gleich) -
Ergebnisse, die aus Vergleichen abgeleitet werden, können Null (mit Angabe von
FALSE) oder ungleich Null (mit Angabe vonTRUE) sein.
-
-
Klammern (zur Gruppierung von Ergebnissen im Ausdruck)
-
Verbindungsoperatoren:
AND,OR
Mit den folgenden FILTER-Optionen können Sie angeben, welche SQL-Vorgänge eine Filterklausel betrifft. Jede dieser Optionen kann kombiniert werden.
ON INSERT | ON UPDATE | ON DELETE IGNORE INSERT | IGNORE UPDATE | IGNORE DELETE
Verwenden Sie die Option RAISEERROR von FILTER im Parameter MAP, um einen benutzerdefinierten Fehler zu generieren, wenn der Filter nicht erfolgreich ist. Diese Option ist nützlich, wenn Sie als Reaktion auf den Fehler ein Ereignis auslösen müssen.
Verwenden Sie die Funktion @RANGE in einer FILTER-Klausel, um die Verarbeitungs-Workload auf mehrere MAP- oder TABLE-Anweisungen zu verteilen.
Beispiel:
REPERROR (9999, EXCEPTION)
MAP OWNER.SRCTAB, TARGET OWNER.TARGTAB,
SQLEXEC (ID CHECK, ON UPDATE, QUERY ' SELECT COUNT FROM TARGTAB WHERE PKCOL = :P1 ', PARAMS (P1 = PKCOL)),
FILTER (BALANCE > 15000),
FILTER (ON UPDATE, @BEFORE (COUNT) = CHECK.COUNT)
;
MAP OWNER.SRCTAB, TARGET OWNER.TARGEXC,
EXCEPTIONSONLY,
COLMAP ( USEDEFAULTS,
ERRTYPE = 'UPDATE FILTER FAILED'
)
;
Tabelle 4: Mehrere FILTER-Anweisungen verwenden
| Parameterdatei | Beschreibung |
|---|---|
REPERROR (9999, EXCEPTION) |
Löst eine Ausnahme für den angegebenen Fehler aus. |
MAP OWNER.SRCTAB, TARGET OWNER.TARGTAB, |
Startet die Anweisung MAP. |
SQLEXEC (ID CHECK, ON UPDATE, QUERY ' SELECT COUNT FROM TARGTAB ' 'WHERE PKCOL = :P1 ', PARAMS (P1 = PKCOL)), |
Führt eine Abfrage aus, um den aktuellen Wert der Spalte COUNT abzurufen, wenn eine Aktualisierung erfolgt. Es gibt auch eine Option BEFOREFILTER, mit der die Abfrage oder Stored Procedure vor der Verarbeitung der Klausel FILTER ausgeführt werden kann. Dadurch können Werte aus dem SQLEXEC-Teil zur Laufzeit in FILTER verwendet werden. |
FILTER (BALANCE > 15000), |
Verwendet eine FILTER-Klausel, um Zeilen auszuwählen, deren Saldo größer als 15000 ist. |
FILTER (ON UPDATE, @BEFORE (COUNT) = CHECK.COUNT) |
Verwendet eine weitere FILTER-Klausel, um sicherzustellen, dass der Wert der Spalte COUNT der Quelle übereinstimmt, bevor eine Aktualisierung mit dem Wert in der Zielspalte übereinstimmt, bevor die Zielaktualisierung angewendet wird. |
; |
Das Semikolon schließt die MAP-Anweisung ab. |
MAP OWNER.SRCTAB, TARGET OWNER.TARGEXC, EXCEPTIONSONLY, COLMAP (USEDEFAULTS, ERRTYPE = 'UPDATE FILTER FAILED'); |
Gibt eine Exceptions-Anweisung MAP an. Die REPERROR-Klausel für Fehler 9999 stellt sicher, dass die Ausnahmen TARGEXC zugeordnet werden. |
Beispiel 9-5: Funktion @COMPUTE aufrufen
Im folgenden Beispiel wird die Funktion @COMPUTE aufgerufen, um Datensätze zu extrahieren, bei denen der Preis multipliziert mit dem Betrag 10.000 übersteigt.
MAP SALES.TCUSTORD, TARGET SALES.TORD,
FILTER (@COMPUTE (PRODUCT_PRICE * PRODUCT_AMOUNT) > 10000);
Beispiel 9-6: Aufrufen der Funktion @STREQ
Im Folgenden wird die Funktion @STREQ verwendet, um Datensätze zu extrahieren, bei denen der Wert einer Zeichenspalte 'JOE'. lautet.
TABLE ACCT.TCUSTORD, FILTER (@STREQ ("Name", 'joe') > 0);
Beispiel 9-7: Auswählen von Datensätzen
Im Folgenden werden Datensätze ausgewählt, in denen die Spalte AMOUNT größer als 50 ist und der Filter für die Vorgänge UPDATE und DELETE ausgeführt wird.
TABLE ACT.TCUSTORD, FILTER (ON UPDATE, ON DELETE, AMOUNT > 50);
Beispiel 9-8: Funktion @RANGE verwenden
(Parameterdatei für Replicat-Gruppe 1)
MAP sales.acct, TARGET sales.acct, FILTER (@RANGE (1, 2, ID));
(Parameterdatei für Replicat-Gruppe 2)
MAP sales.acct, TARGET sales.acct, FILTER (@RANGE (2, 2, ID));
Sie können mehrere FILTER-Klauseln in einer MAP- oder TABLE-Anweisung kombinieren (siehe Tabelle 9-4), die einen Teil einer Replicat-Parameterdatei enthält. Oracle GoldenGate führt die Filter in der angegebenen Reihenfolge aus, bis einer nicht erfolgreich ist oder alle übergeben werden. Wenn ein Filter ausfällt, scheitern alle.
Zeilen mit einer WHERE-Klausel auswählen
Verwenden Sie eines der Elemente in Tabelle 9-5 in einer WHERE -Klausel, um Zeilen (oder beide) basierend auf einer bedingten Anweisung auszuwählen oder auszuschließen. Jede WHERE-Klausel muss in Klammern eingeschlossen sein. Literale müssen in einfache Anführungszeichen gesetzt werden.
Tabelle 5 Zulässige WHERE-Operatoren
| Element | Beispiele |
|---|---|
| Spaltennamen | PRODUCT_AMT |
| Numerische Werte | -123, 5500.123 |
| Literale Zeichenfolgen | 'AUTO', 'Ca' |
| Integrierte Säulentests | @NULL, @PRESENT, @ABSENT (Spalte ist null, vorhanden oder fehlt in der Zeile). Diese Tests sind in Oracle GoldenGate integriert. Siehe Hinweise zur Auswahl von Zeilen mit FILTER und WHERE. |
| Vergleichsoperatoren | =, <>, >, <, >=, <= |
| Konjunktivoperatoren | AND, OR |
| Klammern gruppieren | Verwenden Sie offene und schließende Klammern ( ) für die logische Gruppierung mehrerer Elemente. |
Oracle GoldenGate unterstützt FILTER nicht für Spalten mit einem Mehr-Byte-Zeichensatz oder einem Zeichensatz, der mit dem Zeichensatz des lokalen Betriebssystems nicht kompatibel ist.
Arithmetische Operatoren und Gleitkomma-Datentypen werden von WHERE nicht unterstützt. Um komplexere Auswahlbedingungen zu verwenden, verwenden Sie eine FILTER-Klausel oder eine User Exit-Routine.
Die Syntax für WHERE ist in den Anweisungen TABLE und MAP identisch:
TABLE table, WHERE (clause);
MAP source_table, TARGET target_table, WHERE (clause);
Überlegungen zur Auswahl von Zeilen mit FILTER und WHERE
Mit den folgenden Vorschlägen können Sie eine erfolgreiche Auswahlklausel erstellen. Hinweis: Bei den Beispielen in diesem Abschnitt wird die Groß-/Kleinschreibung nicht beachtet.
Datenverfügbarkeit für Filter sicherstellen
Wenn die Datenbank nur Werte für geänderte Spalten im Transaktionslog protokolliert, können Fehler auftreten, wenn eine der unveränderten Spalten durch Auswahlkriterien referenziert wird. Oracle GoldenGate ignoriert solche Zeilenvorgänge, gibt sie in die Discard-Datei aus und gibt eine Warnung aus.
Um Fehler mit fehlenden Spalten zu vermeiden, erstellen Sie die Auswahlbedingungen wie folgt:
-
Verwenden Sie nach Möglichkeit nur Primärschlüsselspalten als Auswahlkriterien.
-
Stellen Sie erforderliche Spaltenwerte zur Verfügung, indem Sie zusätzliches Logging für diese Spalten aktivieren. Alternativ können Sie die Option
FETCHCOLSoderFETCHCOLSEXCEPTdes ParametersTABLEverwenden. Diese Optionen sind für alle unterstützten Datenbanken gültig. Sie fragen die Datenbank ab, um die Werte abzurufen, wenn sie nicht im Log vorhanden sind. Um die Werte abzurufen, bevor dieFILTER- oderWHERE-Klausel ausgeführt wird, nehmen Sie die OptionFETCHBEFOREFILTERin dieTABLE-Anweisung vor derFILTER- oderWHERE-Klausel auf. Beispiel:
TABLE DEMO.PEOPLE, FETCHBEFOREFILTER, FETCHCOLS (age), FILTER (age > 50);
- Testen Sie zunächst, ob eine Spalte vorhanden ist, und dann den Wert der Spalte. Um auf das Vorhandensein einer Spalte zu testen, verwenden Sie die folgende Syntax.
column_name {= | <>} {@PRESENT | @ABSENT}
Das folgende Beispiel gibt alle Datensätze zurück, wenn die Spalte amount größer als 10.000 ist. Wenn amount nicht vorhanden ist, wird ein Datensatz nicht verworfen.
WHERE (amount = @PRESENT AND amount > 10000)
Spaltenwerte vergleichen
Um sicherzustellen, dass die in einem Vergleich verwendeten Elemente übereinstimmen, vergleichen Sie die entsprechenden Spaltentypen:
-
Zeichenspalten für literale Zeichenfolgen.
-
Numerische Spalten für numerische Werte, die ein Vorzeichen und ein Dezimalzeichen enthalten können.
-
Datums- und Uhrzeitspalten in literalen Zeichenfolgen. Dabei wird das Format verwendet, in dem die Spalte von der Anwendung abgerufen wird.
Testen auf NULL-Werte
Um Spalten für NULL-Werte auszuwerten, verwenden Sie die folgende Syntax.
column {= | <>} @NULL
Im Folgenden wird TRUE zurückgegeben, wenn der Spaltenwert NULL lautet und somit die Zeile repliziert wird. Es gibt FALSE für alle anderen Fälle zurück (einschließlich einer Spalte, die im Datensatz fehlt).
WHERE (amount = @NULL)
Das Folgende gibt TRUE nur zurück, wenn die Spalte im Datensatz vorhanden ist und nicht NULL ist.
WHERE (amount = @PRESENT AND amount <> @NULL)
Hinweis: Wenn ein Wert im Trail mehr als 4000 Byte enthält, gibt die Funktion @NULL TRUE zurück.
Vorher- und Nachher-Werte abrufen
Für Aktualisierungs- und Löschvorgänge kann es nützlich sein, die BEFORE-Werte der Quellspalten abzurufen (die Werte vor der Aktualisierung). Bei Einfügungen werden alle Spaltenwerte als AFTER-Images betrachtet.
Diese Werte werden im Trail gespeichert und können in Filtern und Spaltenzuordnungen verwendet werden. Beispiele:
-
Rufen Sie das Before-Image einer Zeile als Teil einer Spaltenzuordnungsspezifikation in einer
MAP-Anweisung für Exceptions ab, und ordnen Sie diese Werte einer Ausnahmetabelle zu, um sie beim Testen oder Beheben von Konfliktauflösungsroutinen zu verwenden. -
Delta-Berechnungen ausführen Beispiel: Wenn eine Tabelle eine Spalte
Balanceenthält, können Sie das Nettoergebnis einer bestimmten Transaktion berechnen, indem Sie den ursprünglichen Saldo vom neuen Saldo subtrahieren, wie im folgenden Beispiel dargestellt:MAP "owner"."src", TARGET "owner"."targ", COLMAP (PK1 = PK1, delta = balance - @BEFORE (balance));Hinweis: Das vorherige Beispiel gibt eine Datenbank an, bei der die Groß-/Kleinschreibung beachtet wird, wie Oracle. Die Tabellennamen sind in Anführungszeichen gesetzt, um die Groß-/Kleinschreibung zu berücksichtigen.
So referenzieren Sie den Wert "Vorher"
-
Verwenden Sie die Spaltenkonvertierungsfunktion
@BEFOREwie folgt mit dem Namen der Spalte, für die Sie einen Wert vor dem Wert angeben möchten:@BEFORE (column_name) -
Verwenden Sie den Parameter
GETUPDATEBEFORESin der Extract-Parameterdatei, um vor Bildern aus dem Transaktionsdatensatz zu erfassen, oder verwenden Sie ihn in der Replicat-Parameterdatei, um das Before-Image in einer Spaltenzuordnung oder einem Spaltenfilter zu verwenden. Wenn Sie die CDR-Funktion (Conflict Resolution and Detection) verwenden, können Sie die OptionGETBEFORECOLSvonTABLEverwenden. Um diese Parameter verwenden zu können, müssen alle Spalten im Transaktionslog vorhanden sein. Wenn die Datenbank nur die Werte von Spalten protokolliert, die geändert wurden, kann die Verwendung der Funktion@BEFOREzu einer Bedingung "Spalte fehlt" führen, und die Spaltenzuordnung wird ausgeführt, als ob die Spalte nicht im Datensatz enthalten wäre. Informationen zur Verfügbarkeit von Spaltenwerten finden Sie unter Datenverfügbarkeit für Filter sicherstellen.Oracle GoldenGate stellt auch die Funktion
@AFTERbereit, die nach Werten abgerufen werden kann, wenn dies zum Filtern, zur Verwendung in Konvertierungsfunktionen oder zu anderen Zwecken erforderlich ist. Siehe@BEFOREund@AFTERin der Referenz zu Parametern und Funktionen für Oracle GoldenGate.
Spalten wählen
Um zu steuern, welche Spalten einer Quelltabelle von Oracle GoldenGate extrahiert werden, verwenden Sie die Optionen COLS und COLSEXCEPT des Parameters TABLE. Verwenden Sie COLS, um Spalten für die Extraktion auszuwählen, und verwenden Sie COLSEXCEPT, um alle Spalten mit Ausnahme der durch COLSEXCEPT angegebenen auszuwählen.
Das Einschränken der extrahierten Spalten kann nützlich sein, wenn eine Zieltabelle nicht dieselben Spalten wie die Quelltabelle enthält oder wenn die Spalten vertrauliche Informationen enthalten, wie eine persönliche Identifikationsnummer oder andere proprietäre Geschäftsinformationen.
SQL-Vorgänge wählen und konvertieren
Standardmäßig erfasst und wendet Oracle GoldenGate die Vorgänge INSERT, UPDATE und DELETE an. Sie können die folgenden Parameter in der Extract- oder Replicat-Parameterdatei verwenden, um zu steuern, welche Art von Vorgängen verarbeitet werden, z.B. nur Einfügungen oder nur Einfügungen und Aktualisierungen.
GETINSERTS | IGNOREINSERTS
GETUPDATES | IGNOREUPDATES
GETDELETES | IGNOREDELETES
Sie können einen Typ von SQL-Vorgang in einen anderen konvertieren, indem Sie die folgenden Parameter in der Replicat-Parameterdatei verwenden:
-
Mit
INSERTUPDATESkönnen Sie Quellaktualisierungsvorgänge konvertieren, um sie in die Zieltabelle einzufügen. Dies ist nützlich, um eine Transaktionshistorie für diese Tabelle zu verwalten. Der Transaktionslogdatensatz muss alle Spaltenwerte der Tabelle enthalten, nicht nur geänderte Werte. Einige Datenbanken protokollieren keine vollständigen Zeilenwerte in ihrem Transaktionslog, sondern nur geänderte Werte. -
Verwenden Sie
INSERTDELETES, um alle Quelllöschvorgänge zu konvertieren, die in die Zieltabelle eingefügt werden sollen. Dies ist nützlich, um eine Historie aller Datensätze beizubehalten, die jemals in der Quelldatenbank vorhanden waren. -
Mit
UPDATEDELETESkönnen Sie Quelllöschungen in Aktualisierungen auf dem Ziel konvertieren.
Transaktionshistorie verwenden
Mit Oracle GoldenGate können Sie eine Historie der an einem Zieldatensatz vorgenommenen Änderungen beibehalten und Informationen über den Vorgang zuordnen, der jede Änderung verursacht hat. Diese Historie kann nützlich sein, um ein transaktionsbasiertes Berichtssystem zu erstellen, das einen separaten Datensatz für jeden Vorgang enthält, der für eine Tabelle ausgeführt wird, anstatt nur die neueste Version jedes Datensatzes zu enthalten.
Beispiel: Die folgende Reihe von Vorgängen, die an einer Zieltabelle mit dem Namen CUSTOMER vorgenommen wurden, würde kein Trace der ID Dave hinterlassen. Der letzte Vorgang löscht den Datensatz, sodass es keine Möglichkeit gibt, Dave's Kontohistorie oder seinen Endsaldo herauszufinden.
Tabelle 6: Vorgangshistorie für Tabelle CUSTOMER
| Sequenz | Arbeitsvorgang | ID | BALANCE |
|---|---|---|---|
1 |
Insert |
Dave |
1000 |
2 |
Update |
Dave |
900 |
3 |
Update |
Dave |
1250 |
4 |
Delete |
Dave |
1250 |
Das Beibehalten dieser Historie als eine Reihe von Datensätzen kann in vielerlei Hinsicht nützlich sein. Sie können z.B. die Nettoauswirkung von Transaktionen generieren.
So implementieren Sie Transaktionsberichte
-
Um Extract so vorzubereiten, dass es vor Werten erfasst wird, verwenden Sie den Parameter
GETUPDATEBEFORESin der Extract-Parameterdatei. Ein "Vor"-Wert (oder "Vor-Bild") ist der vorhandene Wert einer Spalte, bevor eine Aktualisierung durchgeführt wird. Bevor Images es Oracle GoldenGate ermöglichen, den Transaktionsdatensatz zu erstellen. -
Um Replicat so vorzubereiten, dass alle Vorgänge als Einfügungen veröffentlicht werden, verwenden Sie den Parameter
INSERTALLRECORDSin der Replicat-Parameterdatei. Jeder Vorgang für eine Tabelle wird zu einem neuen Datensatz in dieser Tabelle. -
Um die Transaktionshistorie zuzuordnen, verwenden Sie die Rückgabewerte der Option
GGHEADERder Spaltenkonvertierungsfunktion@GETENV. Nehmen Sie die Konvertierungsfunktion als Quellausdruck in eineCOLMAP-Anweisung im ParameterTABLEoderMAPauf.
Mit der in Tabelle 9-6 gezeigten Beispieltransaktionsserie können die folgenden Parameterkonfigurationen erstellt werden, um eine transaktionsorientiertere Ansicht der Kunden zu generieren, anstatt den neuesten Status der Datenbank.
| Prozess | Parameteranweisungen |
|---|---|
| Extrahieren | GETUPDATEBEFORES TABLE ACCOUNT.CUSTOMER; |
| Replicat | INSERTALLRECORDS MAP SALES.CUSTOMER, TARGET SALES.CUSTHIST, COLMAP (TS = @GETENV ('GGHEADER', 'COMMITTIMESTAMP'), BEFORE_AFTER = @GETENV ('GGHEADER', 'BEFOREAFTERINDICATOR'), OP_TYPE = @GETENV ('GGHEADER', 'OPTYPE'), ID = ID, BALANCE = BALANCE); |
Hinweis: Dies stellt keine vollständige Parameterdatei für einen Oracle GoldenGate-Prozess dar. Beachten Sie auch, dass diese Beispiele eine Datenbank ohne Beachtung der Groß-/Kleinschreibung darstellen.
Diese Konfiguration ermöglicht Abfragen wie die folgenden, wodurch die Nettosumme jeder Transaktion zusammen mit dem Zeitpunkt der Transaktion und der Kunden-ID zurückgegeben wird.
SELECT AFTER.ID, AFTER.TS, AFTER.BALANCE - BEFORE.BALANCE
FROM CUSTHIST AFTER, CUSTHIST BEFORE
WHERE AFTER.ID = BEFORE.ID AND AFTER.TS = BEFORE.TS AND
AFTER.BEFORE_AFTER = 'A' AND BEFORE.BEFORE_AFTER = 'B';