问题标签 [change-data-capture]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
182 浏览

sql-server - 如何更新 CDC 工作流中的源表(通过 SSIS)?

我有一个 CDC 进程设置,其中 TableA 的附加行(或更新)由 ETL 自动拾取并放入 TableB

表A>>CDC>>表B

CDC 工作正常,除了我想在 CDC 进程完成后更新第一个表。我想通过填充“提取日期”来更新表格。所以我的表 A 有,可以说:姓名、年龄、OtherInfo、ExtractionDate。CDC 设置在 Name、Age 和 OtherInfo 列上(extractionDate 列被排除在外)。然后,一旦对 TableA 执行 CDC 并将其带到 TableB,我想用当前日期填充 TableA 的“extractionDate”。但是,鉴于我不知道正在移动哪些行,我很难填充该列。具体来说,当只有 SSIS 知道时,如何创建“选择性”where 子句来选择“更改”行。

0 投票
1 回答
3724 浏览

apache-kafka - 使用 Kafka 最佳实践的 Oracle 变更数据捕获

我正在做一个项目,我们需要将实时更新从 Oracle 流式传输到一堆系统(Cassandra、Hadoop、实时处理等)。我们计划使用 Golden Gate 从 Oracle 捕获更改,将它们写入 Kafka,然后让不同的目标系统从 Kafka 读取事件。有很多设计决策需要做出:

在更新时将哪些数据写入 Kafka?

GoldenGate 以记录 ID 和更新字段的形式发出更新。这些更改可以通过以下三种方式之一写入 Kafka:

  • 全行:对于每个字段更改,发出整行。这给出了“对象”的完整表示,但可能需要进行查询才能获得完整的行。
  • 仅更新字段:最简单,但使用起来有点奇怪,因为您永远无法轻松访问对象的完整表示。如何将其写入 Hadoop?
  • 事件:可能是最简洁的格式(并且最适合 Kafka),但是将数据库字段更新转换为事件需要大量工作。

在哪里执行数据转换和清理?

Oracle DB 中的模式是由第 3 方 CRM 工具生成的,因此不太容易使用 - 有奇怪的字段名称、翻译表等。这些数据可以在 (a) 源系统之一中清理,( b) Kafka 使用流处理,(c) 每个目标系统。

如何保证并行消费者的有序处理?

Kafka 允许每个消费者读取不同的分区,其中每个分区都保证是有序的。选择主题和分区的方式需要保证每个分区中的消息完全独立。如果我们为每个表选择一个主题,并根据 record_id 将记录散列到分区,这在大多数情况下应该可以工作。但是,当添加一个新的子对象时会发生什么?我们需要确保它在父级使用它的 foreign_id 之前得到处理

0 投票
1 回答
1250 浏览

mysql - MYSQL CDC(变更数据捕获)

我正在寻找一种方法来捕获 mysql 插入、更新、删除操作并触发应用程序或脚本以使用这些修改后的数据以自定义格式插入 mongodb。

0 投票
0 回答
480 浏览

sql-server - SQL Server 2012 - 启用 CDC 的问题

我正在尝试使用具有“SYSADMIN”权限的 Windows 身份验证用户在我的数据库上启用 CDC,但 sql server (2012) 出现以下错误(有关详细信息,请参阅附加的错误快照)。

我正在按以下顺序执行脚本。

  1. 使用“EXEC sys.sp_cdc_disable_DB”禁用 cdc 脚本
  2. 启用 cdc 脚本

谁能帮我确定这个问题的原因?

启用 CDC 错误

0 投票
0 回答
429 浏览

ssis - SQL Server 2012 变更数据捕获性能

我已经运行 CDC 大约一周了。我有每天运行的 SSIS 包以将更改加载到临时数据库中。

直到昨天,SSIS 包已经在大约 5 分钟内完成。现在该过程将运行数小时。它挂在 CDC 源任务上,该任务设置为捕获净变化。这一步似乎调用

此功能将运行数小时。它并不总是相同的capture_instance

什么会导致突然的性能下降?

0 投票
0 回答
734 浏览

sql-server - CDC(变更数据捕获)没有收集日志并且日志文件继续增长

我在运行 MSsql server 2014 企业的 Windows 环境中。我正在使用 Always On 高可用性组的数据库上运行 CDC。当我第一次启用 CDC 时,正在收集日志文件并且 CDC 运行良好。有一天,我注意到我的日志文件变得非常大。我注意到最后一天没有捕捉到新的变化。我查找了一些会阻止 CDC 收集日志的原因,并且大多数都指向长期运行的事务会阻止日志硬化。当我运行 DBCC OpenTrans 时,我得到了。

我了解在始终在高可用性组上使用时,CDC 应该使用日志阅读器而不是其正常的捕获作业,但是我已经删除并重新添加了捕获作业并且它正在运行。我试图在数据库上完全禁用和重新启用 CDC,但它仍然不想收获。

关于如何重新开始收获原木的任何想法?

0 投票
2 回答
2039 浏览

sql-server - 在 SQL Server 表更改时更新 Elastic Search 索引

假设上游数据源是具有插入、更新和删除功能的事务性 SQL Server 表,那么了解 Elastic Search 索引何时需要更新的最佳方法是什么?

示例:表父、子、孙子。

孙子被更新,并且父项上的弹性搜索索引需要更新关联记录。

因此,在孙子更新时,我需要找到该孙子的 Parent.ID。这意味着加入 Child 并获取 ParentID 值。

同时,我们正在启动一个增量、迭代加载的数据仓库计划,因此理想情况下,我希望对两者使用相同的 SQL Server API/技术。

基于如何通知 Windows 服务(c#)数据库表更改(sql 2005)?通过 Remus Rusanu,不应使用查询通知 API,因为它的唯一用途是缓存失效,而不是更改跟踪......

这似乎留下了两个选项 - SQL Server Change Data Capture 和 SQL Server Change Tracking API。

我们考虑在应用程序级别进行所有更改跟踪,但我们主要担心的是带外更新,因为由于新的政府法规,一些数据需要在夜间以不可预见的方式更新,所以我们真的需要一个在表级别捕获更改并将其冒泡到队列中以提供 Elastic Search 的方法。

谢谢!

0 投票
3 回答
315 浏览

sql-server - Sqldependency vs CDC 用于将数据复制器从 sql server 写入 mongodb

我想编写一个简单的复制器,将数据从 sql server 数据库复制到 mongodb 数据库。

  1. 除了:

    a) 变更数据捕获

    b) SqlDependency

  2. 每个选项对 sql-server db 性能有什么影响?
  3. 如果我在一张表上有 50 次写入/分钟,那么哪个选项会更好,为什么?
  4. 如果出现问题并且机器/服务器重新启动,哪个选项更适合恢复?
0 投票
0 回答
109 浏览

c# - SQL Server 是否支持在同一位置跟踪审核、行更新和架构更改的功能

我目前在 SQL Server 数据库中的行更新/插入上捕获帐单更改表数据的审计历史记录。这个问题/答案已被打死(但也从 Microsoft SQL Server 功能和用户定义解决方案的功能演变而来)。

但是,在我的场景中,我发现频繁的架构更改。因此,我手动删除并重新创建影子审计表,这对许多表来说变得乏味。

是否有 SQL Server 的统包功能或插件,可以从开发人员的角度/非 dba 轻松完成,即在同一个地方/一站式购物中捕获元更改和全行更新/事务?

似乎有很多方法,但我想要一个解决方案。我现在这样做的方式是,随着架构的增长,我向影子表添加一个新列,并在审计表中查找架构何时更改。

  1. CDC - 更改数据捕获,但在清理时删除表
  2. 审计触发器
  3. 审计表功能
  4. AutoAudit:喜欢选项,没有更新,性能似乎很慢
  5. EF 审计跟踪更改更改跟踪
0 投票
2 回答
506 浏览

sql - MS SQL Server CDC 清理作业到历史表

我有一个启用了 CDC 的数据库。我们以一个简单的客户表为例。

dbo.客户

您在此表上启用 cdc 并获得:

cdc.Customer_CT

SQL Server 代理将运行捕获和清理作业,您可以设置参数。

但是,我只想在 _CT 中保留少量数据,并将其余数据移动到访问频率较低的历史记录表中。

这意味着我们还需要:

cdc.Customer_CT_History

我很好奇如何配置 CDC 清理作业以从cdc.Customer_CT中删除记录并将它们插入cdc.Customer_CT_History。

我知道这可能不是存储历史数据的最佳方法,但请您尝试解决我的问题以及如何完成此操作。谢谢!