我在几个非空表上启用了CDC,是cdc下的CDC系统表。架构保持空,直到我在基本用户表上执行DDL / DML?

时间:2018-04-12 09:46:28

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

我正在使用ssis作业根据系统创建的cdc表(带后缀_CT)中的lsn值从源到目标获取CDC数据。

当我启用CDC时,基表已有很多行。

现在,在第一次ssis运行中,我需要在开始执行DML操作之前基于lsn提取所有现有数据,但所有cdc表都是空的。

所以问题是如果我们在非空表上启用cdc,在我们开始更改数据之前它不会在cdc系统表中有cdc数据吗?

1 个答案:

答案 0 :(得分:0)

简短的回答是:否 - CDC表将没有初始数据的副本。通过从事务日志中读取更改(插入,更新,删除)并将它们插入CDC表来填充CDC表。

我会使用数据快照或备份来初始化您的数据。具体做法是:

  1. 在桌面上启用CDC
  2. 创建数据库备份并将其还原到某处或拍摄数据库快照
    • 如果使用数据库备份,请记下检查点LSN;你可以在msdb.dbo.backupset
    • 中找到它
    • 如果使用数据库快照,请记下快照的LSN;您可以使用DBCC DBINFO(DATABASENAME) WITH TABLERESULTS;(所有信用额度为this link
    • 找到此信息
  3. 从您在上一步中创建的数据库中批量加载到最终目标。
  4. 对于CDC数据的下一个(增量)负载,您可以使用上一步中的LSN传递给cdc.fn_cdc_get_all_changes_<capture_instance>()cdc.fn_cdc_get_net_changes_<capture_instance>()函数。这将为您提供从用于执行初始加载的备份或快照所代表的时间点发生的更改。