配置 DDL 的先决条件
CREATE TABLE AS SELECT (CTAS) 语句包括引用任意数量底层对象的 SELECT 语句和 INSERT 语句。默认情况下,Oracle GoldenGate 从目标数据库获取 AS SELECT 子句的数据。您可以使用此参数强制执行 CTAS 操作以保留原始插入。
注意:
因此,不支持通过 CTAS (CREATE TABLE AS SELECT) 语句创建的 Oracle XMLType 表。对于 XMLType 表,行对象 ID 必须在源和目标之间匹配,在此方案中无法维护。可以正确维护由空 CTAS 语句创建的 XMLType 表(该语句不会在新表中插入数据)。
此外,您还可以使用 GETCTASDML 参数来允许 CTAS 重放 CTAS 的插入,从而在复制期间保留 OID。此参数仅受集成字典支持,任何下游复制都必须等于或大于 12.1.2.1 才能使用线索,否则可能会存在差异。
AS SELECT 子句中的对象必须存在于目标数据库中,并且其名称必须与源中的对象相同。
在 MAP 语句中,Oracle GoldenGate 仅将新表 (CREATE TABLE name) 的名称映射到 TARGET 规范,但不映射 AS SELECT 子句中的底层对象的名称。如果名称已转换为 TARGET 规范,则可能存在对这些对象的依赖关系,从而导致数据不一致。
下面显示了有关源的 CREATE TABLE AS SELECT 语句的示例,以及 Oracle GoldenGate 将如何将其复制到目标。
CREATE TABLE a.tab1 AS SELECT * FROM a.tab2;
Replicat 的 MAP 语句如下:
MAP a.tab*, TARGET a.x*;
Replicat 应用的目标 DDL 语句如下:
CREATE TABLE a.xtab1 AS SELECT * FROM a.tab2;
AS SELECT * FROM 子句中表的名称与源中的表名称相同:tab2(而不是 xtab2)。
要使底层对象中的数据在源和目标上保持一致,可以为 Oracle GoldenGate 的数据复制配置这些数据。在前面的示例中,可以使用以下语句满足此要求:
源
TABLE a.tab*;
目标
MAPEXCLUDE a.tab2
MAP a.tab*, TARGET a.x*;
MAP a.tab2, TARGET a.tab2;