7

在我们的源表中添加了两个新列,而表上仍然启用了 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
4

1 回答 1

9

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

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

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

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

于 2013-02-19T13:09:44.030 回答