DDL

Gültig für

Extrakt und Replicat

Hinweis: Die DDL-Replikation wird nur zwischen Oracle- und Oracle-Datenbanken und zwischen MySQL- und MySQL-Datenbanken unterstützt.

Beschreibung

Verwenden Sie den Parameter DDL, um:

Wenn der Parameter DDL ohne Optionen verwendet wird, führt er keine Filterung aus, und alle DDL-Vorgänge werden wie folgt propagiert:

Wenn er mit Optionen verwendet wird, fungiert der Parameter DDL als Filteragent, um DDL-Vorgänge basierend auf:

In einer Parameterdatei kann nur ein DDL-Parameter verwendet werden. Sie können jedoch mehrere Ein- und Ausschlussoptionen kombinieren, um die DDL auf die erforderliche Ebene zu filtern.

Hinweis: Verwenden Sie den Parameter DDL nicht für eine Extract-Data Pump. Diese Prozesstypen lassen die Zuordnung oder Konvertierung von DDL nicht zu und propagieren DDL-Datensätze automatisch im Passthrough-Modus. DDL, die für eine Quelltabelle (z.B. ALTER TABLE TableA...) ausgeführt wird, wird von Replicat mit demselben Tabellennamen (ALTER TABLE TableA) angewendet. Sie kann nicht als ALTER TABLE TableB zugeordnet werden.

Weitere Informationen zur Verwendung der Oracle GoldenGate-Unterstützung DDL finden Sie unter Oracle: DDL Replication und MySQL: DDL Replication in der Dokumentation zu Oracle GoldenGate-Microservices.

Syntax

DDL [
{AUTOSCHEMA}
{INCLUDE | EXCLUDE}
  [, ALLOWEMPTYOBJECT]
  [, ALLOWEMPTYOWNER]
  [, MAPPED | UNMAPPED | OTHER | ALL]
  [, OPTYPE <type>]
  [, OBJTYPE '<type>']
  [, OBJNAME <name>]
  [, INSTR '<string>']
  [, INSTRWORDS '<word_list>']
  [, INSTRCOMMENTS '<comment_string>']
  [, INSTRCOMMENTSWORDS '<word_list>']
  [, SOURCECATALOG <catalog> | ALLCATALOGS]
  [, STAYMETADATA]
  [, EVENTACTIONS (<action>)]
]
[...]

AUTOSCHEMA

Gültig für Replicat in MySQL für Oracle, Oracle für MySQL und MySQL für die Datenreplikation MySQL.

Die Parameteroption DDL AUTOSCHEMA wird verwendet, um die Funktionalität für die automatische Schemaerstellung zu aktivieren. Standardmäßig ist diese Option deaktiviert.

Syntax

DDL AUTOSCHEMA

Nur zugeordnete DDL-Vorgänge sind für die automatische Schemaentwicklung relevant. Daher sollten die als Teil der OBJNAME-Klausel in den Ein-/Ausschlusskriterien angegebenen Objektnamen den Zieltabellennamen (und nicht den Quelltabellennamen) entsprechen.

Wenn Sie OBJNAME mit MAPPED in einer Replicat-Parameterdatei verwenden, muss sich der Wert für OBJNAME auf den Namen beziehen, der mit der TARGET-Klausel der MAP-Anweisung angegeben ist.

Weitere Informationen finden Sie unter Automatische Schemaentwicklung verwenden.

INCLUDE | EXCLUDE

DDL Filteroptionen

Die folgenden Syntaxoptionen ermöglichen das Filtern und Ausführen auf der DDL, die von Oracle GoldenGate repliziert wird. Diese Optionen gelten für die Klauseln INCLUDE und EXCLUDE des Parameters DDL und andere Parameter, die die DDL-Replikation unterstützen.

Verwenden Sie INCLUDE oder EXCLUDE, um den Anfang einer Einschluss- oder Ausschlussklausel zu identifizieren.

Die Einschluss- oder Ausschlussklausel muss aus dem Schlüsselwort INCLUDE oder EXCLUDE gefolgt von einer gültigen Kombination der anderen Filteroptionen des Parameters DDL bestehen.

Wenn Sie EXCLUDE verwenden, müssen Sie eine entsprechende INCLUDE-Klausel erstellen. Beispiel: Folgendes ist ungültig:

DDL EXCLUDE OBJNAME "hr".*

Sie können jedoch eine der folgenden Vorgehensweisen verwenden:

DDL INCLUDE ALL, EXCLUDE OBJNAME "hr"."*"
DDL INCLUDE OBJNAME fin.* EXCLUDE OBJNAME "fin.ss"

Eine EXCLUDE hat Vorrang vor jeder INCLUDEs, die dieselben Kriterien enthalten. Sie können mehrere Ein- und Ausschlussklauseln verwenden.

Nehmen Sie keine von Oracle GoldenGate installierten DDL-Objekte in einen DDL-Parameter, einen TABLE-Parameter, einen MAP-Parameter oder einen TABLEEXCLUDE- oder MAPEXCLUDE-Parameter auf. Stellen Sie sicher, dass Platzhalterangaben in diesen Parametern keine von Oracle GoldenGate installierten DDL-Objekte enthalten. Diese Objekte dürfen nicht Teil der Oracle GoldenGate-Konfiguration sein, aber der Extract-Prozess muss sich der Vorgänge an ihnen bewusst sein. Aus diesem Grund dürfen Sie sie nicht explizit mit einer Parameteranweisung EXCLUDE, TABLEEXCLUDE oder MAPEXCLUDE aus der Konfiguration ausschließen.

ALLOWEMPTYOBJECT

Verwenden Sie ALLOWEMPTYOBJECT, um zuzulassen, dass eine OBJNAME-Spezifikation DDL verarbeitet, die keinen Objektnamen enthält. Beispiel:

DDL INCLUDE OBJNAME sch.* ALLOWEMPTYOBJECT

ALLOWEMPTYOWNER

Verwenden Sie ALLOWEMPTYOWNER, um zuzulassen, dass eine OBJNAME-Spezifikation DDL verarbeitet, die keinen Eigentümernamen enthält. Beispiel:

DDL INCLUDE OBJNAME pdb.sch.* ALLOWEMPTYOWNER

EVENTACTIONS (action)

Führt dazu, dass der Extract- oder Replicat-Prozess eine definierte Aktion ausführt, die auf einem DDL-Datensatz im Transaktionslog oder -trail basiert, der als Ereignisdatensatz bezeichnet wird. Das Ereignis DDL wird ausgelöst, wenn der Datensatz DDL berechtigt ist, von Extract oder einer Data Pump in den Trail geschrieben oder von Replicat ausgeführt zu werden, wie durch die anderen Filteroptionen des Parameters DDL bestimmt. Mit diesem System können Sie die Verarbeitung basierend auf Datenbankereignissen anpassen.

Informationen zu <action> finden Sie unter EVENTACTIONS unter den Parametern MAP und TABLE.

Richtlinien für die Verwendung von EVENTACTIONS in DDL-Datensätzen:

EVENTACTIONS unterstützt die folgenden DDL-Objekte nicht, da es sich um abgeleitete Objekte handelt:

MAPPED | UNMAPPED | OTHER | ALL

Verwenden Sie MAPPED, UNMAPPED, OTHER und ALL, um INCLUDE oder EXCLUDE basierend auf dem Geltungsbereich des DDL-Vorgangs anzuwenden.

DDL EXCLUDE ALL ist eine spezielle Verarbeitungsoption, mit der aktuelle Objektmetadaten für Oracle GoldenGate verwaltet werden, während die Replikation der DDL-Vorgänge selbst blockiert wird. Sie können DDL EXCLUDE ALL verwenden, wenn Sie eine andere Methode als Oracle GoldenGate verwenden, um DDL auf das Ziel anzuwenden. Oracle GoldenGate soll jedoch Datenänderungen in den Zielobjekten replizieren. Sie stellt Oracle GoldenGate die aktuellen Metadaten bereit, wenn sich Objekte ändern. Dadurch wird verhindert, dass die Oracle GoldenGate-Prozesse gestoppt und gestartet werden müssen. Für DDL EXCLUDE ALL gelten folgende Sonderbedingungen:

OBJNAME name

Verwenden Sie OBJNAME, um INCLUDE oder EXCLUDE auf den vollqualifizierten Namen eines Objekts anzuwenden. Informationen zum korrekten Angeben von zweiteiligen und dreiteiligen Objektnamen und Platzhaltern finden Sie unter Verwenden von Platzhaltern in Befehlsargumenten.

Schließen Sie Objektnamen mit Groß-/Kleinschreibung in doppelte Anführungszeichen ein.

Beispiel ohne Beachtung der Groß-/Kleinschreibung:

DDL INCLUDE OBJNAME accounts.*

Beispiel für Groß-/Kleinschreibung:

DDL INCLUDE OBJNAME accounts."cust"

Verwenden Sie OBJNAME nicht für das Oracle-Objekt USER, da OBJNAME <owner.object> oder <container.owner.object> erwartet, während USER nur ein Schema aufweist.

Wenn Sie OBJNAME mit MAPPED in einer Replicat-Parameterdatei verwenden, muss sich der Wert für OBJNAME auf den Namen beziehen, der mit der TARGET-Klausel der MAP-Anweisung angegeben ist. Beispiel: Bei der folgenden MAP-Anweisung lautet der korrekte Wert OBJNAME fin2.*.

MAP fin.exp_*, TARGET fin2.*;

Im folgenden Beispiel wird eine CREATE TABLE-Anweisung wie folgt für die <source> ausgeführt:

CREATE TABLE fin.exp_phone;

Diese Anweisung wird wie folgt auf dem Ziel ausgeführt:

CREATE TABLE fin2.exp_phone;

Wenn in der MAP-Anweisung kein Zieleigentümer angegeben ist, ordnet Replicat ihn dem Datenbankbenutzer zu, der mit dem Parameter USERIDALIAS angegeben ist.

Bei DDL, das abgeleitete Objekte erstellt, wie z.B. einen Trigger, muss der Wert für OBJNAME der Name des Basisobjekts und nicht der Name des abgeleiteten Objekts sein.

Beispiel: Um die folgende DDL-Anweisung aufzunehmen, lautet der korrekte Wert hr.accounts, nicht hr.insert_trig.

CREATE TRIGGER hr.insert_trig ON hr.accounts;

Bei RENAME-Vorgängen muss der Wert für OBJNAME der neue Tabellenname sein. Beispiel: Um die folgende DDL-Anweisung aufzunehmen, lautet der korrekte Wert hr.acct.

ALTER TABLE hr.accounts RENAME TO acct;

OBJTYPE <type>

Verwenden Sie OBJTYPE, um INCLUDE oder EXCLUDE auf einen bestimmten Typ von Datenbankobjekt anzuwenden. Verwenden Sie für <type> einen beliebigen Objekttyp, der für die Datenbank gültig ist, wie TABLE, INDEX und TRIGGER. Für eine Oracle-Materialized View und ein Materialized View-Log sind die korrekten Typen snapshot bzw. snapshot log. Setzen Sie den Namen des Objekttyps in einfache Anführungszeichen. Beispiel:

DDL INCLUDE OBJTYPE 'INDEX'
DDL INCLUDE OBJTYPE 'SNAPSHOT'

Verwenden Sie für den Oracle-Objekttyp USER nicht die Option OBJNAME, da OBJNAME owner.object oder <container.owner.object> erwartet, während USER nur ein Schema aufweist.

OPTYPE <type>

Verwenden Sie OPTYPE, um INCLUDE oder EXCLUDE auf einen bestimmten Typ von DDL-Vorgang anzuwenden, wie CREATE, ALTER und RENAME. Verwenden Sie für <type> einen beliebigen DDL-Befehl, der für die Datenbank gültig ist. Beispiel: Um ALTER-Vorgänge einzuschließen, lautet die korrekte Syntax:

DDL INCLUDE OPTYPE ALTER

INSTR string

Verwenden Sie INSTR, um INCLUDE- oder EXCLUDE-Anweisungen auf DDL-Anweisungen anzuwenden, die eine bestimmte Zeichenfolge in der Befehlssyntax selbst, jedoch nicht in Kommentaren enthalten. Beispiel: Im Folgenden wird DDL ausgeschlossen, das einen Index erstellt.

DDL INCLUDE ALL EXCLUDE INSTR 'CREATE INDEX'

Setzen Sie die Zeichenfolge in einfache Anführungszeichen. Bei der Suche nach Zeichenfolgen wird die Groß-/Kleinschreibung nicht beachtet.

INSTR unterstützt keine einfachen Anführungszeichen (' '), die sich innerhalb der Zeichenfolge befinden, und unterstützt auch keine NULL-Werte.

INSTRCOMMENTS comment_string

(Gültig für Oracle) Verwenden Sie INSTRCOMMENTS, um INCLUDE- oder EXCLUDE-Anweisungen auf DDL-Anweisungen anzuwenden, die eine bestimmte Zeichenfolge in einem Kommentar enthalten, jedoch nicht innerhalb des Befehls DDL selbst. Mit INSTRCOMMENTS können Sie Kommentare als Filter-Agent verwenden.

Beispiel: Im Folgenden werden DDL-Anweisungen ausgeschlossen, die die Zeichenfolge "Nur Quelle" in den Kommentaren enthalten.

DDL INCLUDE ALL EXCLUDE INSTRCOMMENTS 'SOURCE ONLY'

In diesem Beispiel werden DDL-Anweisungen wie die folgenden nicht repliziert.

CREATE USER john IDENTIFIED BY john /<source only>/;

Setzen Sie die Zeichenfolge in einfache Anführungszeichen. Bei der Zeichenfolgensuche wird die Groß-/Kleinschreibung nicht beachtet. Sie können INSTR und INSTRCOMMENTS kombinieren, um nach einer Zeichenfolge in der Befehlssyntax und in den Kommentaren derselben DDL-Anweisung zu filtern.

INSTRCOMMENTS unterstützt keine einfachen Anführungszeichen (' '), die sich innerhalb der Zeichenfolge befinden, und unterstützt auch keine NULL-Werte.

INSTRWORDS word_list

Verwenden Sie INSTRWORDS, um INCLUDE- oder EXCLUDE-Anweisungen auf DDL-Anweisungen anzuwenden, die die angegebenen Wörter enthalten.

Geben Sie für <word_list> die Wörter in beliebiger Reihenfolge in einfachen Anführungszeichen an. Um Leerzeichen einzuschließen, setzen Sie das Leerzeichen (und ggf. das Wort) in doppelte Anführungszeichen. Doppelte Anführungszeichen können auch verwendet werden, um Sätze einzuschließen.

Alle angegebenen Wörter müssen in der Datei DDL vorhanden sein, damit INSTRWORDS wirksam wird.

Beispiel:

DDL INCLUDE OPTYPE ALTER OBJTEYP 'TABLE' INSTRWORDS 'ALTER CONSTRAINT " xyz"'

Dieses Beispiel entspricht den folgenden DDL-Anweisungen:

ALTER TABLE ADD CONSTRAINT xyz CHECK
ALTER TABLE DROP CONSTRAINT xyz

INSTRWORDS unterstützt keine einfachen Anführungszeichen (' '), die sich innerhalb der Zeichenfolge befinden, und unterstützt auch keine NULL-Werte.

INSTRCOMMENTSWORDS word_list

(Gültig für Oracle) Funktioniert genauso wie INSTRWORDS, gilt jedoch nur für Kommentare in einer DDL-Anweisung und nicht für die DDL-Syntax selbst. Mit INSTRCOMMENTS können Sie Kommentare als Filter-Agent verwenden.

INSTRCOMMENTSWORDS unterstützt keine einfachen Anführungszeichen (' '), die sich innerhalb der Zeichenfolge befinden, und unterstützt auch keine NULL-Werte.

Sie können INSTRWORDS und INSTRCOMMENTSWORDS kombinieren, um nach einer Zeichenfolge in der Befehlssyntax und in den Kommentaren derselben DDL-Anweisung zu filtern.

SOURCECATALOG catalog | ALLCATALOGS

Mit diesen Optionen können Sie angeben, wie nicht qualifizierte Objektnamen in einer OBJNAME-Klausel in den richtigen Container aufgelöst werden. Verwenden Sie diese Optionen, wenn die Quelldatenbank eine Oracle-Containerdatenbank ist.

SOURCECATALOG gibt einen Standardcontainer für alle Objektnamen an, die in derselben INCLUDE- oder EXCLUDE-Klausel angegeben sind. Um wirksam zu werden, muss SOURCECATALOG vor der OBJNAME-Spezifikation angegeben werden. Weitere Informationen finden Sie unter "SOURCECATALOG", einschließlich Anweisungen, die zweiteilige Namen enthalten, wobei dreiteilige Objektnamen erforderlich sind, um ein Objekt vollständig zu identifizieren.

ALLCATALOGS gibt an, dass alle Container der Datenbank bei der Auflösung von Objektnamen berücksichtigt werden sollen, die in derselben INCLUDE- oder EXCLUDE-Klausel angegeben sind. ALLCATALOGS kann vor oder nach der OBJNAME-Spezifikation platziert werden.

Die folgende Prioritätsreihenfolge wird angegeben, wenn verschiedene Katalogspezifikationen in einer Parameterdatei vorhanden sind:

  1. ALLCATALOGS in einer INCLUDE- oder EXCLUDE-Klausel überschreibt alle SOURCECATALOG-Spezifikationen in der INCLUDE- oder EXCLUDE-Klausel und im Root-Verzeichnis der Parameterdatei. Außerdem überschreibt sie die Containerspezifikation eines vollqualifizierten Objektnamens in der OBJNAME-Klausel.

  2. Eine explizite Katalogspezifikation in der OBJNAME-Klausel überschreibt alle Instanzen von SOURCECATALOG (aber nicht ALLCATALOGS).

  3. SOURCECATALOG in einer INCLUDE- oder EXCLUDE-Klausel überschreibt den globalen SOURCECATALOG-Parameter, der im Root-Verzeichnis der TABLE- oder MAP-Anweisung angegeben wird.

  4. Der globale Parameter SOURCECATALOG wird für nicht qualifizierte Objektnamen in OBJNAME-Klauseln wirksam, wenn die Klausel INCLUDE oder EXCLUDE SOURCECATALOG oder ALLCATALOGS nicht angibt.

  5. Wenn keiner der vorhergehenden Parameter vorhanden ist, werden alle Kataloge berücksichtigt.

STAYMETADATA

(Gültig für Oracle). Verhindert, dass Metadaten von Extract erfasst oder von Replicat angewendet werden.

Wenn Extract das erste Mal auf DML in einer Tabelle trifft, ruft es die Metadaten für diese Tabelle ab. Wenn DDL in dieser Tabelle gefunden wird, werden die alten Metadaten invalidiert. Die nächste DML in dieser Tabelle wird mit den neuen Metadaten abgeglichen, sodass die Zieltabellenstruktur immer mit derjenigen der Quelle auf dem neuesten Stand ist.

Wenn Sie jedoch wissen, dass ein bestimmter DDL-Vorgang keine Auswirkungen auf die Metadaten der Tabelle hat, können Sie STAYMETADATA verwenden, damit die aktuellen Metadaten nicht abgerufen oder repliziert werden. Dies ist eine Leistungsverbesserung, die von Vorgängen wie Importen und Exporten profitiert, bei denen DDL oft abgeschnitten wird und Constraints deaktiviert werden. Diese Vorgänge wirken sich nicht auf die Tabellenstruktur aus, da sie sich auf die Integrität der nachfolgenden Datenreplikation beziehen, sodass sie in solchen Fällen ignoriert werden können. Beispiel: ALTER TABLE ADD FOREIGN KEY wirkt sich nicht auf Tabellenmetadaten aus.

Ein Beispiel dafür, wie dies selektiv angewendet werden kann, ist:

DDL INCLUDE ALL INCLUDE STAYMETADATA OBJNAME xyz

In diesem Beispiel wird angegeben, dass alle DDL für die Replikation eingeschlossen werden sollen. Nur DDL, das für das Objekt xyz ausgeführt wird, unterliegt STAYMETADATA.

STAYMETADATA kann auch auf die gleiche Weise in einer EXCLUDE-Klausel verwendet werden.

STAYMETADATA muss auf die gleiche Weise für Quelle und Ziel verwendet werden, um die Metadatenintegrität sicherzustellen.

Wenn STAYMETADATA verwendet wird, wird der Berichtsdatei eine Meldung hinzugefügt. DDL-Berichte werden durch den Parameter DDLOPTIONS mit der Option REPORT gesteuert.

Diese Funktionalität kann global auf alle DDL angewendet werden, die in der Quelle mit den @ddl_staymetadata-Skripten auftreten:

Diese Option sollte mit Unterstützung des technischen Supports von Oracle GoldenGate verwendet werden, da möglicherweise nicht immer ersichtlich ist, welche DDL Objektmetadaten betrifft. Bei unsachgemäßer Verwendung kann dies die Integrität der Replikationsumgebung beeinträchtigen.

Beispiele

Im Folgenden finden Sie einige Beispiele für verschiedene Anwendungsfälle:

Beispiel 1: DDL AUTOSCHEMA verwenden

Die Filterung (ähnlich wie in Beispiel 1) kann auch auf Basis von DDL-Typen mit der Klausel DDL AUTOSCHEMA INCLUDE/EXCLUDE OPTYPE aktiviert werden.

Beispiel: Um AUTOSCHEMA für das Schema hr zu aktivieren, aber das Schema finance auszuschließen, verwenden Sie das folgende Skript:

 DDL AUTOSCHEMA &
 INCLUDE OBJNAME hr.* &
 EXCLUDE OBJNAME finance.*

 MAP hr.*, TARGET hr.*;
 MAP finance.*, TARGET finance.*;

Beispiel 2: Parameteroptionen von DDL kombinieren

Im Folgenden finden Sie ein Beispiel dafür, wie die Optionen des Parameters DDL kombiniert werden.

DDL  &
INCLUDE UNMAPPED &
    OPTYPE alter &
    OBJTYPE 'table' &
    OBJNAME users.tab* &
INCLUDE MAPPED OBJNAME * &
EXCLUDE MAPPED OBJNAME temporary.tab

Die kombinierten Filterkriterien in dieser Anweisung geben Folgendes an:

Beispiel 3: Ereignisaktionen aufnehmen

Im folgenden Beispiel wird die Ereignisaktion REPORT für alle DDL-Datensätze angegeben.

DDL INCLUDE ALL EVENTACTIONS (REPORT)

Beispiel 4: Ereignisaktion für eine Teilmenge von DDL verwenden

Das folgende Beispiel zeigt, wie EVENTACTIONS für eine Teilmenge der DDL verwendet werden kann. Alle DDL müssen repliziert werden, aber nur die DDL, die für explizit benannte Objekte ausgeführt wird, ist berechtigt, die Ereignisaktionen von REPORT und LOG auszulösen.

DDL INCLUDE ALL &
    INCLUDE OBJNAME sales.t* EVENTACTIONS (REPORT) &
    INCLUDE OBJNAME fin.my_tab EVENTACTIONS (LOG INFO)

Beispiel 5: Verschiedene Möglichkeiten, <catalog>-Namen für DDL anzugeben, die für Objekte in einer Oracle-Containerdatenbank <source> ausgegeben werden

Das folgende Beispiel zeigt, wie Sie Katalognamen für DDL angeben, die für Objekte in einer Oracle-Quellcontainerdatenbank ausgegeben werden.

SOURCECATALOG pdb1
DDL INCLUDE OBJNAME sch1.obj1 INCLUDE SOURCECATALOG pdb2 OBJNAME sch2.obj2
DDL INCLUDE ALLCATALOGS OBJNAME sch.obj
DDL INCLUDE ALLCATALOGS OBJNAME pdb.sch.obj

Beispiel 6: Zeigt die kombinierte Verwendung von ALLOWEMPTYOBJECT und ALLOWEMPTYOWNER an

Im Folgenden wird die kombinierte Verwendung von ALLOWEMPTYOBJECT und ALLOWEMPTYOWNER dargestellt.

DDL INCLUDE pdb.*.* ALLOWEMPTYOWNER ALLOWEMPTYOBJECT