如何在现有的更改数据捕获(CDC)表中添加更多列而又不丢失任何数据

时间:2019-06-14 10:03:06

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

我在Microsoft SQL Server 2008中有一个表,已经为此表启用了5列CDC。它已经在生产环境中运行并运行,并且具有数千条记录。现在,我需要在同一张表中添加4个新列,并对新添加的列也启用数据捕获。

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

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

但是仍然无法正常工作,而且似乎在重新创建实例时会在内部某些位置重置起始Lsn。

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

2 个答案:

答案 0 :(得分:0)

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

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] 是重新创建的最终实例表,其中包含所有新列以及所有现有数据。

所以。该命令必须在“重新创建实例并还原旧数据”之后最后运行。

答案 1 :(得分:0)

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

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

无法尝试,您应该只使用新的捕获实例。