非 Oracle 数据库的并行复制的限制
与父级主键关联的外键列索引的排序不同,会导致 parelle 复制失败。这意味着在父级具有组合主键的情况下,并行复制会异常终止,这样,当子表中引用它的外键的顺序位置与主键不同时。
例如:
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 之后。这会导致并行复制中出现间歇性故障,出现 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);