Limitación de Parallel Replicat para bases de datos no Oracle

El orden diferente de los índices de columna de clave ajena asociados a la clave primaria del principal hace que falle el Replicat paralelo. Esto implica que el Replicat paralelo termina de forma anormal en los casos en los que el principal tiene una clave primaria compuesta, de modo que cuando la clave ajena que la hace referencia en la tabla secundaria tiene un orden diferente en su posición ordinal que la clave primaria.

Por ejemplo:

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

En este ejemplo, la clave primaria del principal (atstgt.tgt) tiene pk1 en la posición 1 y pk2 en la posición 2. Sin embargo, en la tabla secundaria, la posición ordinal se invierte y la posición ordinal 3 de pk1 viene después de la posición ordinal 2 de pk2's. Esto provoca fallos intermitentes en Replicat paralelo con el error ROW NOT FOUND.

Para evitar estos problemas, asegúrese de que los índices de las columnas de clave ajena tengan el mismo orden en la tabla secundaria en comparación con el orden de las columnas de clave primaria compuestas en la tabla principal, como se muestra en el siguiente ejemplo:

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