在复制表或视图之前,DDL 比较功能会将源表或视图列的 DDL 与目标表或列的 DDL 进行比较。如果目标系统中不存在表,则会跳过比较。
该功能启用后,每次使用 create 或 move 命令创建作业或者使用 start 命令启动作业时,都会进行比较。
表的 DDL 比较
表的 DDL 比较功能可比较源表和目标表之间的列数、MAPS 属性和主时间索引 (PTI) 属性:
如果源表和目标表的以下任何值存在差异,则作业失败。
- 每列具有以下值的列数:
- 自动列
- 字符类型
- 可压缩
- 约束
- 约束计数
- 小数位数
- 总小数位数
- 缺省值
- 格式
- 标识列类型
- 长度
- 名称
- 可为 null
- 存储过程参数类型
- 模式
- 存储格式
- TS 列类型
- 类型
- UDT 名称
- 大写标志
- MAPS 属性
- 当映射和共同定位属性同时位于源表和目标表上时,它们不必匹配。
- 如果在作业中提供了映射和共同定位参数,则这些参数必须与目标表映射和共同定位参数匹配。
- PTI 属性
- 源表和目标表都必须是 PTI 表。
- 源表和目标表上的 PTI 属性(timezero、tsFlags 和 timeBucketValue)必须匹配。
视图的 DDL 比较
视图的 DDL 比较将源视图的列与源表的列进行比较。它不会比较源视图和目标视图的定义。要在从视图复制数据时比较 DDL,该视图的 copyData 属性必须设置为 true。
范围级别和优先级逻辑
下表显示了每个范围级别包含的对象,以及在各个范围级别指定不同的值时所应用的优先级逻辑。如果在多个范围级别设置 DDL 比较标志,则最小的范围具有最高优先级。例如,如果在数据库级别将 <compare_ddl> 元素设置为 true,而在作业级别将其设置为 false,则会对指定数据库中所有表和视图执行 DDL 比较。
范围级别 | 比较的对象 | 优先级 |
---|---|---|
对象 | 指定的表或视图 | 最高 |
数据库 | 指定数据库中所有的表和视图 | 较高 |
作业 | 作业中所有的表和视图 | 高 |
守护程序 | 特定守护程序处理的所有表和视图 | 低 |
如果未指定以上范围级别的任何值,则会应用缺省逻辑:
复制的对象 | 缺省逻辑 |
---|---|
各个表和视图 | True。执行 DDL 比较。 |
整个数据库 | False。不执行 DDL 比较。 |