甲骨文拥有两种看似相互竞争的技术。CDC 和 DCN。
各自的优势是什么?
什么时候你会使用其中一种而不使用另一种?
我试图通过传递最小和最大日期来获得启用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) 我正在开发一个项目,我们需要将实时更新从Oracle传输到一堆系统(Cassandra,Hadoop,实时处理等).我们计划使用Golden Gate从Oracle获取更改,将它们写入Kafka,然后让不同的目标系统从Kafka读取事件.需要做出很多设计决策:
在更新时写入Kafka的数据是什么?
GoldenGate以记录ID和更新字段的形式发布更新.这些变化可以通过以下三种方式之一写入Kafka:
在哪里进行数据转换和清理?
Oracle DB中的模式由第三方CRM工具生成,因此不易消费 - 有奇怪的字段名称,转换表等.这些数据可以在(a)源系统之一中清理,( b)Kafka使用流处理,(c)每个目标系统.
如何确保并行消费者的在线处理?
Kafka允许每个使用者读取不同的分区,其中每个分区都保证按顺序排列.需要以保证每个分区中的消息完全独立的方式选择主题和分区.如果我们根据record_id选择每个表的主题和散列记录到分区,那么这应该在大多数情况下都有效.但是,添加新的子对象时会发生什么?我们需要确保在父使用它的foreign_id之前处理它
如果我为表启用更改数据捕获,然后其他人向表中添加一列,我的捕获会受到影响吗?我仍然可以获得原始专栏的更新吗?对于新专栏?
如果删除一列怎么办?
我已使用以下步骤启用了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免费).
我该怎么做来调试这个问题?
非常感谢你,提前!:)
这是输出exec sys.sp_cdc_help_change_data_capture. subscription_events是我遇到麻烦的表.

这是输出exec sys.sp_cdc_help_jobs;.

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

这是输出 select * from sys.dm_cdc_errors;

Running select serverproperty('productversion')提供以下版本号:11.0.3401.0.
寻找 GoldenGate 的开源替代方案,将源 Oracle 中的所有 DML 操作流式传输到压缩的 kafka 主题。我的雇主承认拉里可能不需要另一个岛。因此,许可 Oracle GoldenGate 不是一种选择。
到目前为止查看了https://gitter.im/linkedin/brooklin、https://github.com/linkedin/databus、https://github.com/debezium/debezium 。我找不到任何说明如何使用这些进行 Oracle CDC 的文档。任何指针将不胜感激。我不是在询问任何意见或建议,我只是在寻找 GoldenGate 的可行替代方案。
我从 Debezium gitter /slack 频道https://debezium.io/docs/connectors/oracle/得到这个。但这仍然需要 GoldenGate 许可证。
我在 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?
我正在尝试遵循此 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) 我正在研究使用发件箱模式创建事件流。我想知道为什么人们会选择发件箱模式而不是在所需的表上使用 CDC?
直接使用 CDC 的优点:
缺点:
在进一步阅读时,出现的一点是它将数据库设计与消息契约分开。然而,困扰我的缺点是发件箱从代码上线之日起就开始工作。对于所有以前的事件,它们需要重播并摄取到发件箱中,这会破坏流的顺序,因为较旧的事件将被描绘为发件箱中的最新事件,直接使用 CDC 时不必担心这一点。
关于这里的有效方法是什么有什么见解吗?
在 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