Limitazione del Replicat parallelo per database non Oracle

L'ordinamento diverso degli indici delle colonne di chiave esterna associati alla chiave primaria del padre causa l'errore di Replicat parellel. Ciò implica che Replicat parallelo abende nei casi in cui il padre ha una chiave primaria composita in modo tale che quando la chiave esterna che la fa riferimento nella tabella figlio ha un ordine diverso nella sua posizione ordinale rispetto alla chiave primaria.

Ad esempio:

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 questo esempio, la chiave primaria del padre (atstgt.tgt) ha pk1 nella posizione 1 e pk2 nella posizione 2. Tuttavia, nella tabella figlio la posizione ordinale è invertita e la posizione ordinale pk1 3 viene dopo la posizione ordinale 2 di pk2's. Ciò comporta errori intermittenti in Replicat parallelo con errore ROW NOT FOUND.

Per evitare tali problemi, assicurarsi che gli indici delle colonne di chiave esterna abbiano lo stesso ordinamento nella tabella figlio rispetto all'ordinamento delle colonne di chiave primaria composta nella tabella padre, come mostrato nell'esempio riportato di seguito.

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);