天道酬勤,学无止境

cdc

Mysql debezium connector for rds in production caused deadlocks

We are creating a data pipeline from Mysql in RDS to elastic search for creating search indexes, and for this using debezium cdc with its mysql source and elastic sink connector. Now as the mysql is in rds we have to give the mysql user LOCK TABLE permission for two tables we wanted cdc, as mentioned in docs. We also have various other mysql users performing transactions which may require any of the two tables. As soon as we connected the mysql connector to our production database there was a lock created and our whole system went down, after realising this we soon stopped the kafka and also

2021-09-24 09:32:22    分类:问答    mysql   apache-kafka   RDS   cdc   debezium

SQL CDC 数据处理选项(SQL CDC data processing options)

问题 我在几个表上设置了 SQL Server CDC。 一旦启动了 CDC,就会填充 cdc 表。 我想处理这些更改并为发生的每个更改生成 MQ 消息以将其发送到外部消息队列。 处理这些数据的最佳方法是什么。 我看过一些像 sqdata 这样的产品,但我在想是否有更好的方法来做到这一点。 我已经查看了 CDC 与服务代理,但这会生成仅发送到外部应用程序的消息。 我的另一个问题是,当 CDC 更改生成消息时,我希望它删除更改数据,以便如果我想扩展此处理服务,则不应处理已处理的数据。 回答1 CDC 使用基于 LSN 的使用来找出您在流中处理的内容。 您需要跟踪您以某种方式处理过的间隔(我喜欢将它们放在数据库的表中)。 该表看起来像: create table dbo.CDCProcessing ( ID int identity not null, CaptureInstance sysname not null, FarEndpoint binary(10), IsProcessed bit ); create unique index [OnlyOneOpenRange] on dbo.CDCProcessing (CaptureInstance) where IsProcessed = 0; 您的处理循环如下所示(对于每个捕获实例): 检查 CDCProcessing

2021-09-18 17:31:25    分类:技术分享    sql-server   service-broker   cdc   change-data-capture

Sql Server 更改数据捕获:添加列时保留历史记录?(Sql Server Change Data Capture: Preserving history when adding columns?)

问题 将新列添加到为变更数据捕获 (cdc) 配置的表中时,捕获实例表将没有新列,直到为源表禁用并重新启用 cdc。 在这个过程中,现有的捕获实例被删除。 我以为我可以将现有数据复制到临时表中,然后使用以下 SQL 复制回来。 但是,其他 CDC 元信息(例如 cdc.change_tables.start_lsn)变得无效。 如果有的话,如何使用相同的捕获实例名称保存捕获实例历史记录? 谢谢,丰富 /*Change Data Capture Test - Alter table definition test */ /*Enter restricted mode so we don't lose data changes during this process*/ alter database ChangeDataCaptureTest set AUTO_UPDATE_STATISTICS_ASYNC OFF alter database ChangeDataCaptureTest set RESTRICTED_USER with ROLLBACK IMMEDIATE go /*Add a column to the table*/ alter table dbo.Table1 add value3 varchar(20) DEFAULT '' not null /*Copy

2021-09-15 02:04:18    分类:技术分享    sql-server   cdc

在表级别启用 CDC 时出错(Error while enabling CDC on table level)

问题 我在 SQL Server 2012 企业版 (11.0.2100.60) 上启用变更数据捕获 (CDC) . 我可以使用以下 SQL 在数据库级别启用它,但无法在表级别启用。 Use DatabaseName GO Exec sys.sp_cdc_enable_db GO EXEC sys.sp_cdc_enable_table @source_schema = N'dbo' ,@source_name = N'TableName' , @role_name = NULL GO 得到错误,如 'msg 22832,级别 16,状态 1,过程 sp_cdc_enable_table_internal,第 623 行无法更新指示表 [dbo].[TableName] 已为变更数据捕获启用的元数据。 执行命令 '[sys].[sp_cdc_add_job] @job_type = N'capture'' 时发生故障。 返回的错误为 22836:“无法更新数据库 DatabaseName 的元数据以指示已添加变更数据捕获作业。 执行命令“sp_add_jobstep_internal”时发生故障。 返回的错误为 14234:“指定的‘@server’无效(sp_helpserver 返回有效值)。”。 使用操作和错误来确定失败的原因并重新提交请求。'。

2021-08-31 04:50:43    分类:技术分享    sql   sql-server   cdc

CDC 已启用,但 cdc.dbo _CT 表没有被填充(CDC is enabled, but cdc.dbo<table-name>_CT table is not being populated)

问题 我使用以下步骤启用了 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; 我可以看到在System Tables 中创建了一个 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;的输出exec sys.sp

2021-08-31 02:05:18    分类:技术分享    sql-server   cdc   change-data-capture

为过程或函数 cdc.fn_cdc_get_all_changes_ 提供的参数数量不足(An insufficient number of arguments were supplied for the procedure or function cdc.fn_cdc_get_all_changes_)

问题 用于查询表Fields最新跟踪更改的看似有效的代码: DECLARE @Begin_LSN BINARY(10), @End_LSN BINARY(10) SET @Begin_LSN = sys.fn_cdc_get_min_lsn('Fields') SET @End_LSN = sys.fn_cdc_get_max_lsn() SELECT * FROM cdc.fn_cdc_get_all_changes_ordering_Fields (@Begin_LSN, @End_LSN, N'all') GO 生成以下错误消息: Msg 313, Level 16, State 3, Line 5 An insufficient number of arguments were supplied for the procedure or function cdc.fn_cdc_get_all_changes_ ... . 但是,如果我检查实际值,它们似乎都有效(非空),查询 SELECT @Begin_LSN, @End_LSN, N'all'; 返回 0x00000000000000000000 0x00002594000002130001 all 回答1 此错误消息有些误导,基本上暗示某些参数可能超出范围。 由于表功能的限制,该消息没有进一步定制。 零值 (

2021-07-12 10:28:11    分类:技术分享    sql-server   sql-server-2008   cdc

LSN 在 SQL Server 中是什么意思?(What does LSN mean in SQL Server?)

问题 日志序列号是什么意思? 我知道它是二进制类型和 10 字节长,它对应于事务在 DB 中发生的时间。 但这是一个以某种有效的二进制格式存储的高精度日期时间值,还是日期时间和其他东西的函数(例如,在同一毫秒内发生的事务序列号)。 我做了很多搜索,但找不到一个好的答案。 任何人都可以用用于从日期时间或任何东西导出 LSN 的公式或函数进行解释。 回答1 SQL Server 事务日志中的每条记录都由日志序列号 (LSN) 唯一标识。 LSN 是这样排序的,如果 LSN2 大于 LSN1,则 LSN2 引用的日志记录所描述的更改发生在日志记录 LSN 所描述的更改之后。 从这里。 您不应该关心这些是如何生成的。 回答2 它是一个递增序列 (1,2,3,4,...),而不是日期时间值。 来自微软文档: 日志序列号 (LSN) 值是一个由三部分组成的唯一递增值。 它用于维护数据库中事务日志记录的顺序。 这允许 SQL Server 维护 ACID 属性并执行适当的恢复操作。 回答3 首先,很抱歉回复死帖。 我在搜索基于 LSN 的其他操作时来到了这个线程。 LSN 只不过是序列号,正如它所指定的 - 以三个十六进制部分生成的日志序列号,如00000016:0000003c:0001 ,这些部分如下: 第一部分是 VLF:虚拟日志文件第二/中间部分是 OffSet :偏移到 VLF 最后

2021-07-10 02:16:38    分类:技术分享    sql   sql-server   architecture   logging   cdc

SQL CDC data processing options

I have a SQL Server CDC set up on few tables. Once the CDC is intiated the cdc tables are populated. I would want to process these changes and generate MQ messages for every change that occurs to send it to an external message queue. What is the best way to process this data. I have looked at few products like sqdata but I was thinking if there is any better way of doing it. I have looked at CDC with Service broker but this generates message to be send to an external application only. My other problem is when the CDC change generates the message I would want it to delete the change data so

2021-07-03 16:23:40    分类:问答    sql-server   service-broker   cdc   change-data-capture

Error while enabling CDC on table level

I am enabling Change data capture (CDC) on SQL server 2012 Enterprise edition(11.0.2100.60) . I am able to enable it on Database level with below SQL, but failed to enable on Table level. Use DatabaseName GO Exec sys.sp_cdc_enable_db GO EXEC sys.sp_cdc_enable_table @source_schema = N'dbo' ,@source_name = N'TableName' , @role_name = NULL GO Got Error like, 'msg 22832, Level 16, State 1, Procedure sp_cdc_enable_table_internal, Line 623 Could not update the metadata that indicates table [dbo].[TableName] is enabled for Change Data Capture. The failure occurred when executing the command '[sys]

2021-06-21 11:29:45    分类:问答    sql   sql-server   cdc

What does LSN mean in SQL Server?

What is the meaning of Log Sequence Number? I know that it is of type binary and 10bytes long and it corresponds to the time the transaction happen in DB. But is this a high precision date-time value that is stored in some efficient binary format or is this a function of date-time and something else (for example the serial number of transactions that happen at the same milli second). I did a lot of searching but couldn't find a good answer to this. Can any one explain with a formula or function that is used to derive the LSN from date-time or anything.

2021-06-13 10:12:28    分类:问答    sql   sql-server   architecture   logging   cdc