如何在不丢失任何数据的情况下在现有变更数据捕获 (CDC) table 中添加更多列

How to add more columns in existing Change Data Capture (CDC) table without Losing any data

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

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

但在那种情况下,CDC.change_tables 中的起始 Lsn 列将被重置。我在 table CDC change_tables.

中存储了原始起始 Lsn 并将其替换为原始起始 Lsn

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

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

以下查询解决了我的问题。

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] 是最终实例 table 重新创建并包含所有新列以及所有现有数据.

所以。此命令必须在 "re-creating the instance and restoring the old data".

之后最后 运行

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

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

您尝试的方法不可行,您应该使用新的捕获实例。