非 Oracle 資料庫的平行 Replicat 限制
與父項主索引鍵關聯的外來索引鍵資料欄索引順序不同,會導致 Parellel Replicat 失敗。這表示當父項具有複合主索引鍵時,平行 Replicat 會異常中止,因此當子項表格中參照之外來索引鍵的序數位置與主索引鍵的順序不同時。
舉例而言:
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);
在此範例中,父項 (atstgt.tgt) 的主索引鍵在位置 1 有 pk1,在位置 2 有 pk2。不過,在子項表格中,序數位置會反轉,而 pk1 序數位置 3 則是在 pk2's 序數位置 2 之後。這會導致平行 Replicat 發生間歇性失敗,發生 ROW NOT FOUND 錯誤。
若要避免這類問題,請確定與父項表格中複合主索引鍵資料欄的順序比較時,外來索引鍵資料欄的索引在子項表格中具有相同的順序,如下列範例所示:
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);