Auswahl des Db2 Warehouse Replikationsschlüssels
Die Replikation erfordert eine eindeutige Integritätsbedingung für jede Tabelle, um jede Zeile in allen Datenbanken, in denen die Zeile repliziert werden könnte, eindeutig zu identifizieren. Dies ist der Replikationsschlüssel. Das Apply-Programm gibt an, dass dieser Schlüssel in einer Klausel WHERE für Aktualisierungen und Löschungen angegeben ist, um sicherzustellen, dass die richtige Zeile aktualisiert wird.
Schlüsselwerte müssen in jeder Datenbankinstanz dieselbe Bedeutung haben und global eindeutig sein. Ein eindeutiger Index, der der Integritätsbedingung zugeordnet ist, ist zum Erkennen und Auflösen von Konflikten obligatorisch.
Ohne einen Index können Daten im Falle von Konflikten stillschweigend zwischen Quelle und Ziel divergieren (wenn dieselbe Zeile an verschiedenen Standorten aktualisiert wird, bevor die Daten repliziert werden).
Für Db2 Warehouse muss der Schlüssel nicht erzwungen werden (mit einem zugehörigen eindeutigen Index), da sonst die Gefahr besteht, dass Konflikte nicht erkannt werden. Dennoch ist dieser Schlüssel für die Replikation von Löschvorgängen zwingend erforderlich.
- Nach Zeilen organisierte Tabellen benötigen einen erzwungenen Primärschlüssel, eine eindeutige Integritätsbedingung oder einen eindeutigen Index.
- Nach Spalten organisierte Spalten können über nicht erzwungene Integritätsbedingungen über Primärschlüssel oder eindeutige Integritätsbedingungen verfügen. Auch wenn der Schlüssel nicht durchgesetzt wird, muss er eine Zeile oder Daten am Ziel Db2 Warehouse eindeutig identifizieren, da diese im Laufe der Zeit unbemerkt abweichen können.
- Wenn Sie einer nach Spalten organisierten Tabelle mit vorhandenen Daten eine eindeutige Integritätsbedingung hinzufügen, müssen Sie die Datenbank inaktivieren und reaktivieren.
Wenn eine Tabelle keine Gruppe von Spalten enthält, die jede Zeile eindeutig identifizieren können, ist es ein gängiges Verfahren, der Tabelle eine verdeckte Identitätsspalte hinzuzufügen. Db2 Warehouse dann automatisch einen eindeutigen Wert für jede Zeile generiert. Um sicherzustellen, dass die Replikationsschlüsselwerte für jeden Standort eindeutig sind, können Sie eine zweite Spalte hinzufügen, die den Standort identifiziert. Indem Sie die Identitätsspalte und die Standortspalte als Replikationsschlüssel kombinieren, stellen Sie sicher, dass überall dort, wo Ihre Anwendung ausgeführt wird, eindeutige Werte generiert werden. Diese Spalten können als ausgeblendet deklariert werden, sodass Ihre Anwendungen nicht beeinträchtigt werden.
Die folgenden Anweisungen erstellen beispielsweise zwei verdeckte Spalten, IBMQREP_REPLKEY und IBMQREP_SITE, die jede Zeile eindeutig identifizieren:
IBMQREP_REPLKEY BIGINT NOT NULL IMPLICITLY HIDDEN GENERATED ALWAYS AS IDENTITY(START WITH 1, INCREMENT BY 1)
IBMQREP_SITE SMALLINT NOT NULL IMPLICITLY HIDDEN WITH DEFAULT 1
Dabei ist der Standardwert für die Spalte IBMQREP_SITE 1 oder 2 abhängig vom Standort, an dem sie erstellt wird.
Die folgende Anweisung fügt einen eindeutigen Index hinzu, der auf die beiden verdeckten Spalten verweist:
ALTER TABLE table_name ADD CONSTRAINT IBMQREP_UNIQCONST UNIQUE(IBMQREP_REPLKEY, IBMQREP_SITE) NOT ENFORCED;
Eine ausführlichere Erläuterung der wichtigsten Anforderungen, einschließlich Methoden zum Hinzufügen einer eindeutigen Einschränkung zu Tabellen, die keine solche Einschränkung haben, finden Sie auf den Seiten 21–24 unter „Replizieren von Transaktionen in Db2 Spaltentabellen mit Db2 V11.5 “.