【问题标题】:CDC table not working after adding new columns to the source table向源表添加新列后 CDC 表不工作
【发布时间】:2013-02-19 12:59:00
【问题描述】:

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

【问题讨论】:

    标签: sql-server change-data-capture


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我确实读过,但希望保留相同的 CDC 表。这是遵循的“标准”程序吗?并且删除旧的 CDC 表不会对捕获产生不利影响?
    • 也许这是更新的,或者是误导性的,但是I found some documentation 建议将跟踪新列的值,而不是添加 - "如果将新列添加到更改跟踪表, 不跟踪列的添加。只跟踪对新列所做的更新和更改。” 我要试试...
    • 看来您的答案是准确的,文档令人困惑,没有任何列会自动添加到 CDC 表中 :(
    • David,不要将 CDC 与 ChangeTracking 混淆,这是两个截然不同的功能。另见littlekendra.com/2010/06/23/cdcvsct
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-09
    • 2019-09-03
    • 1970-01-01
    • 2017-07-21
    • 2016-07-07
    相关资源
    最近更新 更多