Debezium:数据库中没有记录最大LSN;请确保 SQL Server 代理正在运行
Posted
技术标签:
【中文标题】Debezium:数据库中没有记录最大LSN;请确保 SQL Server 代理正在运行【英文标题】:Debezium: No maximum LSN recorded in the database; please ensure that the SQL Server Agent is running 【发布时间】:2020-07-21 03:12:12 【问题描述】:此问题与:Debezium How do I correctly register the SqlServer connector with Kafka Connect - connection refused
在 Windows 10 中,我在 Docker 容器外部的 Microsoft SQL Server 实例上运行了 Debezium。我每 390 毫秒收到以下警告:
数据库中没有记录最大LSN;请确保 SQL 服务器代理正在运行 [io.debezium.connector.sqlserver.SqlServerStreamingChangeEventSource]
我在 Github 上检查了 Debezium 的代码,并且我可以在代码 cmets 中找到此警告的唯一地方指出,只有在代理未运行时才应引发此警告。我已确认 SQL Server 代理正在运行。
为什么会出现此警告,我该如何解决?
注意:
我当前的解决方案似乎只能在非生产环境中工作 - 根据 Docker 的文档。
【问题讨论】:
【参考方案1】:LSN 是与您的 SQL Server 更改相关的“片段”信息。如果您没有 LSN,则可能是您的 CDC 未运行或配置不正确。 Debezium 使用 LSN 进行复制,因此您的 SQL Server 需要生成它。
一些方法:
-
您是否检查过您的表是否启用了 CDC?这将列出启用了 CDC 的表:
SELECT s.name AS Schema_Name, tb.name AS Table_Name
, tb.object_id, tb.type, tb.type_desc, tb.is_tracked_by_cdc
FROM sys.tables tb
INNER JOIN sys.schemas s on s.schema_id = tb.schema_id
WHERE tb.is_tracked_by_cdc = 1
-
您的 CDC 数据库已启用并正在运行? (见here)
检查是否enabled:
SELECT *
FROM sys.change_tracking_databases
WHERE database_id=DB_ID('MyDatabase')
并检查是否正在运行:
EXECUTE sys.sp_cdc_enable_db;
GO
-
您的 CDC 服务正在 SQL Server 上运行?见in docs
EXEC sys.sp_cdc_start_job;
GO
-
在 CDC 中启用表时,我遇到了一些角色名问题。就我而言,在
null
进行配置解决了我的问题(更多详情here)
EXEC sys.sp_cdc_enable_table
@source_schema=N'dbo',
@source_name=N'AD6010',
@capture_instance=N'ZZZZ_AD6010',
@role_name = NULL,
@filegroup_name=N'CDC_DATA',
@supports_net_changes=1
GO
【讨论】:
sys.change_tracking_databases 用于变更跟踪,与变更数据捕获不同。 Debezium AFAIK 也不使用更改跟踪。看到此警告时,此答案的其余部分似乎仍然是值得检查的好东西。【参考方案2】:此错误的另一种可能性(我今天早上自己在尝试使新数据库联机时遇到了此警告)是 SQL 登录没有所需的权限。 Debezium 运行以下 SQL。检查您使用的 SQL 登录是否有权运行此存储过程,并返回您在 CDC 中设置的表。如果您收到错误或返回零行,请与您的 DBA 一起设置适当的权限。
EXEC sys.sp_cdc_help_change_data_capture
【讨论】:
【参考方案3】:为威廉的回答添加更多内容。
对于 SQL Server 代理未运行
的情况您可以通过以下方式启用它:
-
控制面板 >
管理工具 >
点击“服务”
寻找 SQL Server 代理
右键开始
现在您可以在 mssql 中触发 cdc 作业查询。
PS:你需要有windows server的登录权限。
【讨论】:
以上是关于Debezium:数据库中没有记录最大LSN;请确保 SQL Server 代理正在运行的主要内容,如果未能解决你的问题,请参考以下文章
Debezium PostgresConnector 实例化主题,因为表中没有数据