通过自动模式演化支持的操作
Oracle、MySQL、PostgreSQL、SQL Server、Db2 LUW、DB2400、Teradata 和 Oracle TimesTen 目标上支持自动方案演化。
Oracle、MySQL、PostgreSQL、SQL Server、Db2 LUW、Db2 zOS、DB2400、Sybase、Teradata、Oracle TimesTen 和 Snowflake 源上支持自动方案演化。
支持以下操作:
- 可以使用
AUTOSCHEMAOPTIONS覆盖默认的自动方案演化响应。支持以下选项:-
TYPEMAP:使用此选项可改写缺省数据类型映射 -
IGNORE_DATA_TRUNCATION:如果默认数据类型映射预见到任何可能的数据截断,默认情况下复制会异常终止,并出现相应的错误。要忽略这些数据截断错误并允许复制继续而不异常,可以在 Replicat 参数文件中指定AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION。 -
IGNORE_MODIFY_KEY_COLUMN:默认情况下,自动方案演化不允许在出现相应错误的情况下修改主键列和复制异常终止。可以指定AUTOSCHEMAOPTIONS IGNORE_MODIFY_KEY_COLUMN以跳过对键列的任何修改。 -
ALLOW_MODIFY_KEY_COLUMN:默认情况下,自动方案演化不允许在这种情况下修改主键列和复制异常终止。可以指定AUTOSCHEMAOPTIONS ALLOW_MODIFY_KEY_COLUMN以允许对键列进行任何修改。 -
MODIFY_COLUMN_NULLABILITY_ONLY:如果AUTOSCHEMAOPTIONS MODIFY_COLUMN_NULLABILITY_ONLY只对修改列的可为空值性感兴趣,而对类型修改感兴趣,则可以指定该名称。
-
自动方案演化支持基于方案更改的以下操作,这些更改是从线索文件中的元数据记录中检测到的,以保持源表和目标表的方案同步:
-
在目标数据库上创建缺少的表
-
通过执行
ADD/MODIFY/DROP列来更改目标表
根据每个源列元数据,默认情况下会为对应的目标列选择最匹配的数据类型。
注意:在实施自动模式演化之前,请先查看适用于特定源数据库的默认数据类型映射,然后从数据类型映射映射到目标数据库复制方案。
在所有情况下,目标数据类型可能与源数据类型不同。在可能的情况下,可以选择目标数据类型,以便目标类型始终兼容且足够大(与源列大小相同或更宽),以便能够容纳相应源列的数据。在某些情况下,目标数据库上的对应源列数据类型没有相应的可用类型(例如,目标数据库上的可用类型可能会导致数据截断),会向用户返回一个错误并给出相应的建议。
创建缺少的表
AutoSchema 支持以下用例:
-
在应用 CDC 提取生成的线索数据时,在目标上创建缺少的表。
-
在应用初始加载提取生成的线索数据时,在目标上创建缺少的表。
-
在仅应用 initialLoad 提取生成的线索时,您可以选择删除现有目标表,并通过将
OPTYPE RECREATE指定为DDL AUTOSCHEMA包含标准的一部分来创建另一个提取。 -
如果线索元数据中的所有对应源关键字列不可为空,则自动方案将使用包含所有对应列的
PRIMARY KEY子句创建目标表。 -
如果线索元数据中有任何对应的源关键字列可为空,则自动方案将使用包含所有对应列的
UNIQUE KEY子句创建目标表。
更改现有表
如果源上添加/删除/修改了任何列,则将生成相应的 ALTER TABLE DDL 并将其执行到相应的映射目标表。自动模式支持仅与 type (包括数据类型名称、长度、精度、小数位数(如适用))和 nullability constraint 相关的修改。但是,它不接受对任何其他列属性进行任何修改。如果在源列上检测到任何类型/空性相关的方案更改,则会将它们传播到目标列。
源表上的一个或多个方案更改可能会导致映射的目标表上出现单个或多个 ALTER TABLE DDL,具体目标数据库支持这些 DDL。目标上的 DDL 数量取决于特定目标数据库上支持的语法,例如在以下情况下:
-
很少有数据库不允许在单个
ALTER TABLE DDL中添加/删除/修改多个列。 -
很少有数据库允许修改单个
ALTER TABLE DDL语句中列的 type 和 nullability 。
在这种情况下,将根据目标数据库要求对目标表执行所需数量的 ALTER TABLE DDL 语句。
自动方案可能会影响需要进一步操作的目标数据库。例如,如果 ALTER TABLE MODIFY COLUMN 可能会导致某些数据截断,则不同的数据库可能会以不同的方式处理此问题。数据库可能会检测到某些现有数据可能被操作截断,并导致复制停止,这通常发生在 Oracle 和 MySQL 之间,此时 MySQL 运行时启用了严格模式。但是,如果在非严格模式下配置 MySQL,则可能会发生牵引,但不会出现警告。
对于 IBM i,根据系统的配置方式,复制可能会显示为挂起。对于 Db2(以前称为 Db2 LUW)和 Db2 z/OS 上的某些操作,某些操作可能需要对表进行重组。在 Db2 z/OS 上,在执行重组之前不会识别删除列,对于 Db2,表可能最终处于重组暂挂状态并停止允许对其执行进一步操作。
注意:如果需要,您可以有选择地将 OPTYPE ADDCOLUMN、OPTYPE DROPCOLUMN 和 OPTYPE MODIFYCOLUMN 添加到 DDL AUTOSCHEMA 包含/排除标准。