将新列添加到源表后,CDC表无法正常工作

时间:2013-02-19 12:59:00

标签: sql-server change-data-capture

我们的源表中添加了两个新列,而表中仍然启用了CDC。我需要新列出现在CDC表中,但不知道应该遵循什么程序来执行此操作?我已经在表上禁用了CDC,在数据库上禁用了CDC,将新列添加到cdc.captured_columns表,并启用了CDC。但现在我在CDC表中没有数据!

是否有一些其他CDC表必须在将列添加到源表后更新?这些是System Tables文件夹下的所有CDC表:

  • cdc.captured_columns< -----我添加了新列
  • cdc.change_tables
  • cdc.dbo_myTable_CT< ------正在捕获更改数据的表
  • cdc.ddl_history
  • cdc.index_columns
  • cdc.lsn_time_mapping
  • dbo.systranschemas

1 个答案:

答案 0 :(得分:9)

我建议阅读Tracking Changes in Your Enterprise Database。非常详细和深刻。在其他极其有用的信息中,有如下:

  

启用更改数据捕获时,DDL更改不受限制。   但是,它们可能会对收集的更改数据产生一些影响   添加或删除列。如果删除了跟踪列,则全部   捕获实例中的其他条目将具有NULL   柱。 如果添加了列,则捕获将忽略该列   实例。换句话说,设置捕获实例的形状   什么时候创建。

     

如果需要更改列,则可以为表创建另一个捕获实例(每个表最多两个捕获实例)并允许更改数据的使用者迁移到新的表模式

这是一个非常明智且经过深思熟虑的设计,它考虑了架构漂移(并非所有参与者都可以在真实的在线部署中同时更新架构)。采用多阶段方法(部署DDL,捕获新的CDC,升级订户,丢弃旧的CDC捕获)是唯一可行的方法,您应该效仿。