如果我为表启用更改数据捕获,然后其他人将一列添加到表中,我的捕获会受到影响吗?我还会收到原始列的更新吗?对于新专栏?
如果一列被删除了怎么办?
如果我为表启用更改数据捕获,然后其他人将一列添加到表中,我的捕获会受到影响吗?我还会收到原始列的更新吗?对于新专栏?
如果一列被删除了怎么办?
(这个答案来自我的同事史蒂夫,但他没有 SO 帐户,所以我会发布它......)
如果添加列,则 CDC 不会更改……您将继续收到与以前相同的列集的更新。
如果您删除列,CDC 将继续捕获更改,但删除的列将始终具有值 NULL。
如果您 ALTER 列,CDC 将继续捕获更改,但更改后的列中的值将具有新的列类型。
来自 MSDN关于变更数据捕获 (SQL Server)
如果删除了跟踪的列,则将为后续更改条目中的列提供空值。但是,如果现有列的数据类型发生更改,则更改会传播到更改表,以确保捕获机制不会将数据丢失引入跟踪的列。捕获过程还将检测到的对跟踪表的列结构的任何更改发布到 cdc.ddl_history 表。希望提醒下游应用程序中可能必须进行的调整的消费者使用存储过程 sys.sp_cdc_get_ddl_history。通常,当 DDL 更改应用于其关联的源表时,当前捕获实例将继续保持其形状。但是,可以为反映新列结构的表创建第二个捕获实例。这允许捕获过程将同一源表更改为具有两个不同列结构的两个不同的更改表。因此,虽然一个更改表可以继续为当前的操作程序提供数据,但第二个更改表可以驱动一个尝试合并新列数据的开发环境。允许捕获机制同时填充两个更改表意味着可以在不丢失更改数据的情况下完成从一个到另一个的转换。这可能在两个变更数据捕获时间线重叠的任何时候发生。当转换生效时,可以删除过时的捕获实例。注意 注意 可以同时与单个源表关联的捕获实例的最大数量为两个。”