2015-02-24 112 views
1

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

基本上,在给定的一天,如果你的SSIS增量处理失败,你需要重新开始。您如何再次播放最近更改的记录?

回答

0

所以我弄清楚了如何在SSIS中做到这一点。

我每次在我的数据仓库中的一个表中运行我的SSIS包时,记录最小和最大LSN编号。

如果我想从CDC源重新加载一组数据到分段,在SSIS包中,我需要使用CDC控制任务并将其设置为“Mark CDC Start”,并在文本框中标记为“SQL Server LSN开始......“我把我想用的LSN值作为起点。

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

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

作为一个观点,我还将lsn_time_mapping表引入我的数据仓库,因为我发现这些信息历史上很有用,并且它在源数据库中每4天得到一次“清理”。

2

我想这取决于你对数据做什么,呃? :)但在一般情况下,您可以将其分解为三种情况:

  1. 插入 - 检查行是否存在。如果是,请跳过它。如果没有,插入它。
  2. 删除 - 假设您不重用主键,只需再次运行删除。它会找到一行删除或不会,但最终结果是具有该PK的行在删除后不会存在。
  3. 更新 - 类似删除方案。如果你重新处理一个更新,这并不是什么大问题(假设你的CDC过程是唯一能够在目的地保持最新状态并且没有覆盖某人/其他更改的危险)。
+0

但是ETL的第一步 - 从源头获取已更改的数据。你如何“重置”它,以便再次分析最近的变化。一旦进入暂存数据库,很容易处理。但是CDC - 黑匣子的一部分正在困扰着我。如果需要,我想重新安排相同的数据(手动很好)。 – tember 2015-02-24 18:28:01

+1

CDC数据的任何拉动都取决于您提供的first_lsn和last_lsn。据推测,如果出现故障,您只需再次提供相同的端点。 – 2015-02-24 18:30:25

+0

你会怎么做?我想这有两个问题:你如何读取lsn值?你如何告诉SSIS使用自定义的lsn范围? – tember 2015-02-24 18:36:09

2

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

马特·马森(高级项目经理对MSFT SQL Server团队)有一个很好的职位有一步一步的演练:CDC in SSIS for SQL Server 2012

而且,看到布拉德利沙赫特的帖子:Understanding the CDC state Value

+0

我确实在SSIS 2012中设置了CDC控制任务,而且我大部分都在工作。我想我问的是你如何“取消”这些记录? – tember 2015-02-24 18:40:56

+1

另外,有关CDC控制任务使用的CDC状态的细目以及如何修改CDC以重新处理CDC记录,请参阅Bradley Schacht的文章:http://www.bradleyschacht.com/understanding-the-cdc-state-值/ – 2015-02-24 18:44:03