Limitation de la réplication parallèle pour les bases de données non Oracle
L'ordre différent des index de colonne de clé étrangère associés à la clé primaire du parent entraîne l'échec du processus Replicat Parellel. Cela implique que le processus Replicat parallèle s'interrompt dans les cas où le parent a une clé primaire composite telle que lorsque la clé étrangère qui la référence dans la table enfant a un ordre différent dans sa position ordinale que la clé primaire.
Exemple :
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);
Dans cet exemple, la clé primaire du parent (atstgt.tgt) a pk1 à la position 1 et pk2 à la position 2. Cependant, dans la table enfant, la position ordinale est inversée et la position ordinale 3 de pk1 vient après la position ordinale 2 de pk2's. Cela entraîne des échecs intermittents dans la réplication parallèle avec une erreur ROW NOT FOUND.
Pour éviter de tels problèmes, assurez-vous que les index des colonnes de clé étrangère ont le même ordre dans la table enfant par rapport à l'ordre des colonnes de clé primaire composite dans la table parent, comme indiqué dans l'exemple suivant :
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);