更改数据捕获 - 历史数据的初始加载

时间:2012-03-01 09:48:24

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

我正在将SQL Server 2000数据库升级到SQL Server 2008 R2。我想利用Change Data Capture功能。我现有的应用程序我有类似的功能,但我使用带有Hst_前缀的触发器和历史表,其模式与原始表几乎相似。

我的问题是:有没有办法将我的数据从Hst_表迁移到CDC功能使用的表中?

我想这样做:

  • 我有表Cases
  • 我正在使用自定义历史记录机制,所以我还有三个触发器(插入,更新和删除)和一个双表Hst_Cases
  • 现在我在表Cases
  • 上启用CDC
  • CDC创建函数,它返回历史数据(fn_cdc_get_all_changes_dbo_Cases)以及实际保存数据(cdc.dbo_Cases_CT)的系统表。
  • 我可以将Hst_Cases的数据插入cdc.dbo_Cases_CT,但我遇到以下问题:
    • 我不知道如何获取__$start_lsn__$seqval
    • 很难找出__$update_mask(我必须比较每两行)。

是否有唯一的方法可以做到这一点?我想避免这种情况,然后我使用Hst_表中的“旧”历史数据加入“新”历史数据。

谢谢!

1 个答案:

答案 0 :(得分:1)

您通常不想使用捕获表来存储长期更改数据,最好让SSIS包将捕获数据移动到permananent表。如果您确实使用它们,我认为如果您必须还原数据库,则在还原后它们将为空,除非您在还原时使用KEEP_CDC选项。您还需要禁用自动清除捕获表的作业。

如果您创建自己的存储表,则可以省略lsn和mask字段。