我在Microsoft SQL Server 2008中有一个表,已经为此表启用了5列CDC。它已经在生产环境中运行并运行,并且具有数千条记录。现在,我需要在同一张表中添加4个新列,并对新添加的列也启用数据捕获。
我尝试了以下情形: 1.为CDC创建了一个新的临时实例,并将所有数据从原始CDC复制到tempCDC实例。现在,再次使用原始名称重新创建CDC实例,并从临时实例中复制所有数据。
但是在这种情况下,CDC.change_tables中的起始Lsn列将被重置。我存储了原始起始Lsn,并在表CDC change_tables中也将其替换为原始起始Lsn。
但是仍然无法正常工作,而且似乎在重新创建实例时会在内部某些位置重置起始Lsn。
因此,我无法基于启用CDC的表查看报告。
答案 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,但是在较新的版本中,您可以执行以下操作:
无法尝试,您应该只使用新的捕获实例。