AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 195534
Accepted
Shooter McGavin
Shooter McGavin
Asked: 2018-01-17 16:20:53 +0800 CST2018-01-17 16:20:53 +0800 CST 2018-01-17 16:20:53 +0800 CST

CDC 捕获实例或状态以确保参照完整性

  • 772

我正在实施基于 SSIS/CDC 的数据仓库解决方案,并且对目标数据库的参照完整性有疑问。

例如,我INVENTORY_TRANSACTION在一个表和PART另一个表中都有自己的 SSIS 包,用于增量加载。我不想出现INVENTORY_TRANSACTIONS数据仓库中没有关联父PART记录的情况。

我已经阅读了很多关于这个主题的内容,但我仍然不清楚。

我是否应该在具有相关数据的表上使用相同的 capture_instance,以便它们都针对相同的 LSN 链?我应该使用相同的州名称吗?或者,我完全错过了什么吗?

sql-server sql-server-2012
  • 1 1 个回答
  • 563 Views

1 个回答

  • Voted
  1. Best Answer
    Shooter McGavin
    2018-01-17T18:45:30+08:002018-01-17T18:45:30+08:00

    来自微软文档。猜猜我只需要找到正确的文档... https://learn.microsoft.com/en-us/sql/integration-services/data-flow/cdc-flow-components#grouping-tables-for-cdc-加工

    用于 CDC 处理的分组表

    数据库项目的大小从几个表到数千个表不等。在设计初始加载和 CDC 包时,将表分组到更小的组中以便于管理和提高效率是有益的。本节列出了影响将表分类为小组的各种注意事项,其中每个小组中的表最初加载,然后作为一个组更新。

    CDC 组件支持的 CDC 模式假定该分组已经确定。每个组定义一个单独的 CDC 上下文,该上下文与其他组分开维护。对于每个组,创建初始加载和滴流更新包。根据更改处理约束的速率(例如,CPU 和 IO 消耗、对其他系统的影响)和所需的延迟,安排定期运行滴流更新。

    表格根据以下考虑进行分组:

    根据目标数据库。所有写入不同目标数据库或经过不同处理的表都应分配给不同的 CDC 组。

    与参照完整性约束相关的表应分配到同一组,以避免在目标处出现参照完整性问题。

    可以对可以容忍较高延迟的表进行分组,以便可以降低它们的处理频率并降低整体系统负载。

    变化率较高的表应该分组在较小的组中,而变化率较低的表可以分组在较大的组中。

    为每个 CDC 组创建以下两个包:

    一个初始加载包,它从源表中读取整个范围的数据并将其应用于目标表。

    一个 trickle-feed 更新包,它读取对源表所做的更改并将更改应用到目标表。这个包应该定期执行。

    疾病预防控制中心

    每个 CDC 组都有一个与其关联的状态,它由具有特定格式的字符串表示。有关详细信息,请参阅 CDC 控制任务。下表显示了可能的 CDC 状态值。

    StateDescription0-(INITIAL)在当前 CDC 组上运行任何包之前存在的状态。这也是CDC状态为空时的状态。

    关于CDC Control任务操作的更多信息,请参见CDC Control Task。1-ILSTART(Initial-Load-Started)这是初始加载包启动时存在的状态。这发生在对 CDC 控制任务的 MarkInitialLoadStart 操作调用之后。

    关于CDC Control任务操作的更多信息,请参见CDC Control Task。2-ILEND(Initial-Load-Ended)这是初始加载包成功结束时存在的状态。这发生在 MarkInitialLoadEnd 操作调用 CDC 控制任务之后。

    关于CDC Control任务操作的更多信息,请参见CDC Control Task。3-ILUPDATE(Initial Load Update)这是在初始加载后第一次运行Update包后仍然在处理初始处理范围时存在的状态。这发生在对 CDC 控制任务的 GetProcessingRange 操作调用之后。

    如果使用 _$reprocessing 列,则将其设置为 1 以指示包可能正在重新处理目标中已经存在的行。

    有关 CDC 控制任务操作的详细信息,请参阅 CDC 控制任务。4-TFEND(滴流更新结束)这是常规 CDC 运行的预期状态。它表示上一次运行成功完成,可以开始新的处理范围的新运行。 5-TFSTART (Trickle-Feed-Update-Started)这是在 GetProcessingRange 操作之后更新包的后续运行中存在的状态调用 CDC 控制任务。

    这表示常规 CDC 运行已启动,但尚未完成或尚未完全完成 (MarkProcessedRange)。

    有关 CDC 控制任务操作的更多信息,请参阅 CDC 控制任务。6-TFREDO(重新处理-滴流-馈送-更新)这是在 TFSTART 之后发生的 GetProcessingRanget 上的状态。这表明上一次运行未成功完成。

    如果使用 __$reprocessing 列,则将其设置为 1 以指示包可能正在重新处理目标中已存在的行。7-ERRORCDC 组处于 ERROR 状态。

    这是 CDC 组件的状态图。当达到预期之外的状态时,将达到 ERROR 状态。预期状态如下图所示。但是该图并未显示 ERROR 状态。

    例如,在初始加载包结束时,当尝试将状态设置为 ILEND 时,如果状态为 TFSTART,则 CDC 组处于错误状态并且 Trickle-Feed Update 包不运行(初始加载包确实运行)。

    一旦 Initial Load 包成功运行,Trickle-Feed Update 包就会按照预先确定的计划重复运行,以处理对源表的更改。每次运行 Trickle-Feed Update 包都是 CDC 运行。

    • 0

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve