通过自动模式演化支持的操作

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 源上支持自动方案演化。

支持以下操作:

自动方案演化支持基于方案更改的以下操作,这些更改是从线索文件中的元数据记录中检测到的,以保持源表和目标表的方案同步:

根据每个源列元数据,默认情况下会为对应的目标列选择最匹配的数据类型。

注意:在实施自动模式演化之前,请先查看适用于特定源数据库的默认数据类型映射,然后从数据类型映射映射到目标数据库复制方案。

在所有情况下,目标数据类型可能与源数据类型不同。在可能的情况下,可以选择目标数据类型,以便目标类型始终兼容且足够大(与源列大小相同或更宽),以便能够容纳相应源列的数据。在某些情况下,目标数据库上的对应源列数据类型没有相应的可用类型(例如,目标数据库上的可用类型可能会导致数据截断),会向用户返回一个错误并给出相应的建议。

创建缺少的表

AutoSchema 支持以下用例:

更改现有表

如果源上添加/删除/修改了任何列,则将生成相应的 ALTER TABLE DDL 并将其执行到相应的映射目标表。自动模式支持仅与 type (包括数据类型名称、长度、精度、小数位数(如适用))和 nullability constraint 相关的修改。但是,它不接受对任何其他列属性进行任何修改。如果在源列上检测到任何类型/空性相关的方案更改,则会将它们传播到目标列。

源表上的一个或多个方案更改可能会导致映射的目标表上出现单个或多个 ALTER TABLE DDL,具体目标数据库支持这些 DDL。目标上的 DDL 数量取决于特定目标数据库上支持的语法,例如在以下情况下:

  1. 很少有数据库不允许在单个 ALTER TABLE DDL 中添加/删除/修改多个列。

  2. 很少有数据库允许修改单个 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 包含/排除标准。