繁体   English   中英

如何使用SQL Server CDC重新加载增量数据?

[英]How do you reload incremental data using SQL Server CDC?

我无法找到文档/有关如何在带有SSIS的SQL Server 2014中使用更改数据捕获(CDC)重新加载增量数据的说明。

基本上,在给定的一天,如果您的SSIS增量处理失败,则需要重新启动。 您如何再次登台最近更改的记录?

我想这取决于您对数据的处理方式,是吗? :)在一般情况下,您可以将其分为三种情况:

  1. 插入-检查行是否在那里。 如果是,请跳过它。 如果不是,则将其插入。
  2. 删除-假设您不重用主键,只需再次运行删除即可。 它会找到要删除的行,也可能不会,但是最终结果是删除后不存在具有该PK的行。
  3. 更新-有点像删除方案。 如果您重新处理更新,那么这没什么大不了的(假设CDC流程是唯一可以使更新保持在目的地的程序,并且没有覆盖其他人/其他更改的危险)。

假设您正在使用新的CDC SSIS 2012组件,特别是在包的开头和结尾处的CDC控制任务。 然后,如果程序包由于任何原因失败,则在程序包末尾运行CDC控制任务之前,这些LSN(日志序列号)将不会被标记为已处理,因此您可以在解决问题后从顶部重新启动SSIS程序包,它将再次重新处理这些记录。 您必须使用CDC控制任务来完成这项工作,或者自己跟踪LSN(在SSIS 2012之前,这是唯一的方法)。

Matt Masson(MSFT SQL Server团队的高级程序经理)对此进行了精彩介绍, 并分步进行了演练: SSIS中的CDC for SQL Server 2012

另请参阅Bradley Schacht的文章: 了解CDC状态值

因此,我确实弄清楚了如何在SSIS中执行此操作。

每当我的SSIS程序包在数据仓库中的表中运行时,我都会记录最小和最大LSN编号。

如果要将CDC源中的一组数据重新加载到暂存中,则需要在SSIS包中使用CDC控制任务并将其设置为“标记CDC启动”,并在标有“ SQL Server LSN以启动”的文本框中。 ...”我将要使用的LSN值用作起点。

我还没有弄清楚如何设置终点,但是我可以进入我的登台表并删除LSN值>然后是端点的所有数据。

您只能对尚未“清理”的CDC更改执行此操作-仅针对最近3天内已更改的数据。

顺便说一句,我还把lsn_time_mapping表带到了数据仓库,因为我发现此信息在历史上很有用,并且每隔4天就会在源数据库中对其进行“清理”。

要重新加载相同的更改,可以使用以下方法。

方法1 :将[cdc_states]表中的TFEND标记存储在另一个表或变量中。 将标记从“保存的”值重新加载到[cdc_states],以再次处理相同的范围。 但是,此方法允许您从相同的LSN开始处理,但是如果同时更改表中有更多更改,这些更改也将被捕获。 因此,您有可能获得第一次数据捕获后发生的更多更改。

方法2 :为了捕获指定的范围,请在处理范围之前和之后记录TFEND标记。 现在,您可以将OLEDB源连接(SSIS)与以下cdc功能一起使用。 然后像往常一样使用CDC拆分器来定向插入,更新和删除。

DECLARE @start_lsn binary(10);
DECLARE @end_lsn binary(10);
SET @start_lsn = 0x004EE38E921A01000001;-- TFEND (1) -- if null then sys.fn_cdc_get_min_lsn('YourCapture') to start from the beginnig of _CT table
SET @end_lsn = 0x004EE38EE3BB01000001;  -- TFEND (2)
    SELECT * FROM [cdc].[fn_cdc_get_net_changes_YOURTABLECAPTURE](
     @start_lsn
    ,@end_lsn
    ,N'all' -- { all | all with mask | all with merge }
    --,N'all with mask' -- shows values in "__$update_mask" column
    --,N'all with merge' -- merges inserts and updates together. It's meant for processing the results using T-SQL MERGE statement
    )
ORDER BY __$start_lsn;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM