标签: change-data-capture

比较和对比变更数据捕获和数据库变更通知

甲骨文拥有两种看似相互竞争的技术。CDC 和 DCN。

各自的优势是什么?

什么时候你会使用其中一种而不使用另一种?

oracle change-data-capture

5
推荐指数
1
解决办法
1605
查看次数

更改数据捕获错误

我试图通过传递最小和最大日期来获得启用CDC的表上的净更改.但是丢错误.

Msg 313, Level 16, State 3, Line 24
An insufficient number of arguments were supplied for the procedure or function cdc.fn_cdc_get_net_changes_ ... .
Run Code Online (Sandbox Code Playgroud)

我的代码如下:

DECLARE @CDate DATE = '2013-03-18' --This is the date after the CDC was enabled on the table
DECLARE @count INT;
DECLARE @lsnStartDatetime DATETIME;
DECLARE @lsnEndDateTime DATETIME;

DECLARE @begin_time DATETIME ,
@end_time DATETIME ,
@from_lsn BINARY(10) ,
@to_lsn BINARY(10);


SELECT  @lsnStartDatetime = CAST(CAST(@CDate AS NVARCHAR(10)) + ' 00:00:00' AS DATETIME)
SELECT  @lsnEndDateTime = CAST(CAST(@CDate AS NVARCHAR(10)) …
Run Code Online (Sandbox Code Playgroud)

sql-server cdc change-data-capture sql-server-2012

5
推荐指数
1
解决办法
1945
查看次数

使用Kafka最佳实践进行Oracle变更数据捕获

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

在更新时写入Kafka的数据是什么?

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

  • 完整行:对于每个字段更改,发出完整行.这给出了'对象'的完整表示,但可能需要进行查询才能获得完整的行.
  • 只有更新的字段:最简单的,但它有点奇怪,因为你从来没有一个容易访问的对象的完整表示.如何将此写入Hadoop?
  • 事件:可能是最干净的格式(并且最适合Kafka),但是将db字段更新转换为事件需要大量工作.

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

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

如何确保并行消费者的在线处理?

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

change-data-capture apache-kafka oracle-golden-gate

5
推荐指数
1
解决办法
3488
查看次数

当基础表发生更改时,更改数据捕获实例会发生什么情况?

如果我为表启用更改数据捕获,然后其他人向表中添加一列,我的捕获会受到影响吗?我仍然可以获得原始专栏的更新吗?对于新专栏?

如果删除一列怎么办?

change-data-capture sql-server-2008

4
推荐指数
1
解决办法
1656
查看次数

CDC已启用,但未填充cdc.dbo <table-name> _CT表

我已使用以下步骤启用了CDC:

exec sys.sp_cdc_enable_db;

exec sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name = N'table_name',
@role_name = N'CDC_Access',
@supports_net_changes = 1;
Run Code Online (Sandbox Code Playgroud)

我可以看到在系统表中创建了一个CT ; SQL Server代理已启用,我可以看到cdc.db_name_capture作业已创建并正在运行.

但是,即使正在填充table_name表,我也从未在CT表中看到任何内容.我在其他正在更新的数据库中为其启用了CDC的表,并且CDC 正在为它们捕获数据并将其存储在为该特定表创建的CT表中.

为什么这个表不能捕获数据,即使其他表是?

我在网上看到它可能与事务日志变得太大有关,但我仍然有足够的驱动器空间(~2TB免费).

我该怎么做来调试这个问题?

非常感谢你,提前!:)

编辑1

这是输出exec sys.sp_cdc_help_change_data_capture. subscription_events是我遇到麻烦的表.

在此输入图像描述

编辑2

这是输出exec sys.sp_cdc_help_jobs;.

在此输入图像描述

编辑3

这是输出select * from sys.dm_cdc_log_scan_sessions;.

在此输入图像描述

这是输出 select * from sys.dm_cdc_errors;

在此输入图像描述

编辑4

Running select serverproperty('productversion')提供以下版本号:11.0.3401.0.

sql-server cdc change-data-capture

4
推荐指数
1
解决办法
8183
查看次数

Oracle 变更数据捕获的开源工具 - GoldenGate 的替代品

寻找 GoldenGate 的开源替代方案,将源 Oracle 中的所有 DML 操作流式传输到压缩的 kafka 主题。我的雇主承认拉里可能不需要另一个岛。因此,许可 Oracle GoldenGate 不是一种选择。

到目前为止查看了https://gitter.im/linkedin/brooklinhttps://github.com/linkedin/databushttps://github.com/debezium/debezium 。我找不到任何说明如何使用这些进行 Oracle CDC 的文档。任何指针将不胜感激。我不是在询问任何意见或建议,我只是在寻找 GoldenGate 的可行替代方案。

编辑

我从 Debezium gitter /slack 频道https://debezium.io/docs/connectors/oracle/得到这个。但这仍然需要 GoldenGate 许可证。

oracle change-data-capture apache-kafka

4
推荐指数
1
解决办法
5689
查看次数

如何在 Scylla 中获取特定分区键的流 ID

我在 Scylla 有一张桌子

CREATE TABLE event (
    eventSource TEXT,        
    createdAt TIMEUUID,
    eventData TEXT,
    PRIMARY KEY (eventSource, createdAt)
) WITH cdc = {'enabled':true};
Run Code Online (Sandbox Code Playgroud)

现在我希望使用 CDC

我知道流 IDCDC取决于生成和基表分区键,但是如何在不对 CDC 表进行全表扫描的情况下获取此流 ID?

是否有一些函数可以将给定的分区键转换为当前活动生成的流 ID?

change-data-capture scylla

4
推荐指数
1
解决办法
75
查看次数

Makefile:10: /usr/pgsql-14/lib/pgxs/src/makefiles/pgxs.mk: 没有这样的文件或目录 make: *** 没有规则来创建目标 '/usr/pgsql-14/lib/pgxs/源代码/制作

我正在尝试遵循此 Debezium 安装https://gist.github.com/jpsoroulas/30e9537138ca62a79fe261cff7ceb716

我使用的是 Rocky Linux,运行 make 命令时遇到问题。

本教程使用 Postgres 版本 9,但我使用的是 Postgres 14,这可能是遇到问题的原因。

Makefile:10: /usr/pgsql-14/lib/pgxs/src/makefiles/pgxs.mk: No such file or directory
make: *** No rule to make target '/usr/pgsql-14/lib/pgxs/src/makefiles/pgxs.mk'.  Stop.
Run Code Online (Sandbox Code Playgroud)

postgresql change-data-capture debezium

4
推荐指数
1
解决办法
6417
查看次数

比较用于创建事件流的 CDC 与发件箱模式

我正在研究使用发件箱模式创建事件流。我想知道为什么人们会选择发件箱模式而不是在所需的表上使用 CDC?

直接使用 CDC 的优点:

  1. 流将始终按顺序排列,因为何时引入事件捕获并不重要,因为连接器会拍摄所有现有数据的快照并从此开始捕获事件。
  2. 它不需要更改应用程序。应用程序可以继续按原样工作,无需更改任何代码。

缺点:

  1. 需要手动解析数据库事件(或使用一些现有的解析器类,例如可用于发件箱事件的解析器类)。
  2. 不过滤掉不必要的事件。例如。如果一条记录更改了 100 次,但只需要初始状态和最终状态,仍然会发出所有 100 个事件。选择性写入发件箱可以缓解这个问题。

在进一步阅读时,出现的一点是它将数据库设计与消息契约分开。然而,困扰我的缺点是发件箱从代码上线之日起就开始工作。对于所有以前的事件,它们需要重播并摄取到发件箱中,这会破坏流的顺序,因为较旧的事件将被描绘为发件箱中的最新事件,直接使用 CDC 时不必担心这一点。

关于这里的有效方法是什么有什么见解吗?

change-data-capture outbox-pattern

4
推荐指数
1
解决办法
1646
查看次数

如何在 C# 中比较 SQL Server CDC LSN 值?

在 SQL 中,它很简单,因为它支持二进制 (10) LSN 值进行比较:

SELECT *, __$start_lsn, __$seqval
FROM cdc.fn_cdc_get_all_changes_dbo_sometable(@startLsn, @endLsn, 'all update old') 
WHERE __$seqval > @seqval 
ORDER BY __$start_lsn, __$seqval
Run Code Online (Sandbox Code Playgroud)

在 C# 中则更困难:

byte[] mySeqval = ...
foreach(var row in cdcData)
{
    if(row.seqval > mySeqval) // Cannot perform this
        ...
}
Run Code Online (Sandbox Code Playgroud)

LSN / SeqVal 值可以转换为可以轻松比较的数字吗?它们的大小为 10 字节(80 位)。

我的项目是.Net 3.5

c# change-data-capture sql-server-2008

3
推荐指数
1
解决办法
3647
查看次数