我们的源表中添加了两个新列,而表中仍然启用了CDC。我需要新列出现在CDC表中,但不知道应该遵循什么程序来执行此操作?我已经在表上禁用了CDC,在数据库上禁用了CDC,将新列添加到cdc.captured_columns表,并启用了CDC。但现在我在CDC表中没有数据!
是否有一些其他CDC表必须在将列添加到源表后更新?这些是System Tables文件夹下的所有CDC表:
答案 0 :(得分:9)
我建议阅读Tracking Changes in Your Enterprise Database。非常详细和深刻。在其他极其有用的信息中,有如下:
启用更改数据捕获时,DDL更改不受限制。 但是,它们可能会对收集的更改数据产生一些影响 添加或删除列。如果删除了跟踪列,则全部 捕获实例中的其他条目将具有NULL 柱。 如果添加了列,则捕获将忽略该列 实例。换句话说,设置捕获实例的形状 什么时候创建。
如果需要更改列,则可以为表创建另一个捕获实例(每个表最多两个捕获实例)并允许更改数据的使用者迁移到新的表模式。
这是一个非常明智且经过深思熟虑的设计,它考虑了架构漂移(并非所有参与者都可以在真实的在线部署中同时更新架构)。采用多阶段方法(部署DDL,捕获新的CDC,升级订户,丢弃旧的CDC捕获)是唯一可行的方法,您应该效仿。