【问题标题】:How to add more columns in existing Change Data Capture (CDC) table without Losing any data如何在现有变更数据捕获 (CDC) 表中添加更多列而不丢失任何数据
【发布时间】:2019-06-14 10:03:06
【问题描述】:

我在 Microsoft SQL Server 2008 中有一个表,我已经为其启用了 5 列的 CDC。它已经在生产中运行和生活,并拥有数千条记录。现在我需要在同一个表中添加 4 个新列,并为新添加的列启用数据捕获。

我尝试了以下场景: 1. 为 CDC 创建一个新的临时实例并将所有数据从原始 CDC 复制到 tempCDC 实例。现在再次使用原始名称重新创建 CDC 实例并从临时实例中复制所有数据。

但在这种情况下,CDC.change_tables 中的起始 Lsn 列会被重置。我存储了原始起始 Lsn 并将其替换为原始起始 Lsn 以及表 CDC change_tables。

但它仍然无法正常工作,并且似乎在重新创建实例时它正在内部重置某些地方的 start Lsn。

因此我无法查看基于 CDC 启用表的报告。

【问题讨论】:

标签: sql-server sql-server-2008 change-data-capture


【解决方案1】:

以下查询解决了我的目的。

DECLARE @startLsn binary(10)

SELECT @startLsn = MIN([__$start_lsn]) FROM [cdc].[dbo_City_CT]

UPDATE [cdc].[change_tables] set [start_lsn] =@startLsn
WHERE [capture_instance] ='dbo_City';

其中 [cdc].[dbo_City_CT] 是重新创建的最终实例表,其中包含所有新列以及所有现有数据。

所以。该命令必须在“重新创建实例并恢复旧数据”后才能运行。

【讨论】:

    【解决方案2】:

    我没有要测试的 SQL 2008,但在较新的版本中,您可以执行以下操作:

    1. 为更改的表创建一个新的捕获实例。每个表可以有 2 个实例,新的实例将包含新列。
    2. 将第一个实例的_CT表的内容添加到第二个实例的_CT表中
    3. 删除该表的旧捕获实例。

    您尝试的方式是不可能的,您应该使用新的捕获实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-20
      • 2011-08-22
      • 1970-01-01
      • 2021-03-07
      • 1970-01-01
      • 2020-07-21
      相关资源
      最近更新 更多