2011-03-15 63 views

回答

3

(从我的同事史蒂夫这样的回答,但他没有一个SO帐户,这样我会后它...)

如果添加一列,疾控中心不会改变......你继续接收与之前相同列集的更新。

如果删除一列,CDC将继续捕获更改,但删除的列始终具有值NULL。

如果您ALTER列,CDC将继续捕获更改,但更改列中的值将具有新列类型。

0

从MSDN的About Change Data Capture (SQL Server)

“处理更改源表 为了适应正在跟踪的源表列的变化是对下游消费者一个棘手的问题。虽然能够对源表变更数据捕获不会阻止这种DDL发生变化的情况下,即使底层源表的列结构发生变化,通过允许通过API返回的结果集保持不变,变更数据捕获也有助于减轻对消费者的影响。在定义的查询函数访问的基础变更表中 为了适应固定的列结构变化t能够,负责填充更改表的捕获进程将忽略启用源表以更改数据捕获时未捕获的任何新列。如果删除了一个被跟踪的列,则会在随后的变更条目中为该列提供空值。但是,如果现有列的数据类型发生更改,则会将更改传播到更改表以确保捕获机制不会将数据丢失引入跟踪的列。捕获过程还会将检测到的对跟踪表列结构的更改发布到cdc.ddl_history表中。消费者希望被警告可能必须在下游应用程序中进行调整,请使用存储过程sys.sp_cdc_get_ddl_history。 通常,当DDL更改应用于其关联的源表时,当前捕获实例将继续保持其形状。但是,可以为反映新列结构的表创建第二个捕获实例。这允许捕获进程对同一个源表进行更改为具有两个不同列结构的两个不同的更改表。因此,尽管一个变更表可以继续提供当前的操作程序,但第二个变更表可以驱动尝试合并新列数据的开发环境。允许捕获机制一起填充两个更改表意味着可以完成从一个到另一个的转换,而不会丢失更改数据。这两个更改数据捕获时间线重叠时可能会发生这种情况。当转换生效时,可以删除过时的捕获实例。 注意注意 可以同时与单个源表关联的捕获实例的最大数量为两个。“

相关问题