Begrenzung des parallelen Replicats für Nicht-Oracle-Datenbanken

Die unterschiedliche Reihenfolge der Fremdschlüsselspaltenindizes, die mit dem Primärschlüssel des übergeordneten Schlüssels verknüpft sind, führt dazu, dass das Parellel-Replicat nicht erfolgreich verläuft. Dies bedeutet, dass paralleles Replicat in Fällen endet, in denen das übergeordnete Element über einen zusammengesetzten Primärschlüssel verfügt, sodass der Fremdschlüssel, der es in der untergeordneten Tabelle referenziert, in seiner Ordinalposition eine andere Reihenfolge als der Primärschlüssel hat.

Beispiel:

CREATE TABLE atstgt.tgt (
  pk1 VARCHAR(10) NOT NULL,
  pk2 VARCHAR(20) NOT NULL,
  num INT,
) PRIMARY KEY(pk1, pk2);

CREATE TABLE atstgt.child (
  id INT NOT NULL,
  pk2 VARCHAR(10) NOT NULL,
  pk1 VARCHAR(20) NOT NULL,
  details VARCHAR(100),
  CONSTRAINT fk_child FOREIGN KEY (pk1, pk2) REFERENCES atstgt.tgt (pk1, pk2) ON DELETE CASCADE ON UPDATE CASCADE) PRIMARY KEY(id);

In diesem Beispiel hat der Primärschlüssel des übergeordneten Elements (atstgt.tgt) pk1 an Position 1 und pk2 an Position 2. In der untergeordneten Tabelle wird jedoch die Ordinalposition umgekehrt, und pk1 Ordinalposition 3 kommt nach pk2's Ordinalposition 2. Dies führt zu intermittierenden Fehlern im parallelen Replicat mit dem Fehler ROW NOT FOUND.

Um solche Probleme zu vermeiden, stellen Sie sicher, dass die Indizes der Fremdschlüsselspalten in der untergeordneten Tabelle im Vergleich zur Reihenfolge von zusammengesetzten Primärschlüsselspalten in der übergeordneten Tabelle dieselbe Reihenfolge aufweisen, wie im folgenden Beispiel dargestellt:

CREATE TABLE atstgt.tgt (
  pk1 VARCHAR(10) NOT NULL,
  pk2 VARCHAR(20) NOT NULL,
  num INT,
) PRIMARY KEY(pk1, pk2);

CREATE TABLE atstgt.child (
  id INT NOT NULL,
  pk1 VARCHAR(10) NOT NULL,
  pk2 VARCHAR(20) NOT NULL,
  details VARCHAR(100),
  CONSTRAINT fk_child FOREIGN KEY (pk1, pk2) REFERENCES atstgt.tgt (pk1, pk2) ON DELETE CASCADE ON UPDATE CASCADE) PRIMARY KEY(id);