如何在不丢失任何数据的情况下在现有变更数据捕获 (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,但在较新的版本中,您可以执行以下操作:
- 为已更改的 table 创建一个新的捕获实例。每个 table 可以有 2 个实例,新实例将包含新列。
- 将第一个实例的_CTtable的内容添加到第二个实例的_CTtable中
- 删除那个 table 的旧捕获实例。
您尝试的方法不可行,您应该使用新的捕获实例。
我在 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,但在较新的版本中,您可以执行以下操作:
- 为已更改的 table 创建一个新的捕获实例。每个 table 可以有 2 个实例,新实例将包含新列。
- 将第一个实例的_CTtable的内容添加到第二个实例的_CTtable中
- 删除那个 table 的旧捕获实例。
您尝试的方法不可行,您应该使用新的捕获实例。