Debezium:数据库中没有记录最大LSN;请确保 SQL 服务器代理是 运行
Debezium: No maximum LSN recorded in the database; please ensure that the SQL Server Agent is running
这个问题是关于:
在 Windows 10 中,我在 Docker 容器之外的 Microsoft SQL 服务器实例上安装了 Debezium 运行。我每 390 毫秒收到以下警告:
No maximum LSN recorded in the database; please ensure that the SQL
Server Agent is running
[io.debezium.connector.sqlserver.SqlServerStreamingChangeEventSource]
我在 Github 上检查了 Debezium 的代码,我唯一能在代码注释中找到此警告的地方指出,只有当代理不是 运行 时才应抛出此警告。我已经确认 SQL 服务器代理是 运行。
为什么会出现此警告,我该如何解决?
注:
根据 Docker 的文档,我当前的解决方案似乎只能在非生产环境中使用。
LSN 是 "pieces" 与您的 SQL 服务器更改相关的信息。如果您没有 LSN,可能是您的 CDC 未 运行 或未正确配置。 Debezium 使用 LSN 进行复制,因此,您的 SQL 服务器需要生成它。
一些方法:
- 您是否检查过您的 table 是否启用了 CDC?这将列出启用了 CDC 的 table:
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 服务器上 运行?参见 in docs
EXEC sys.sp_cdc_start_job;
GO
- 在 CDC 中启用 table 时,我在角色名方面遇到了一些问题。对于我的情况,在
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
此错误的另一种可能性(今天早上我只是 运行 警告自己试图将新数据库联机)是 SQL 登录名没有所需的权限。 Debezium 运行 以下 SQL。检查您正在使用的 SQL 登录是否可以访问 运行 此存储过程及其 returns 您在 CDC 中设置的表。如果您遇到错误或返回零行,请与您的 DBA 一起设置适当的权限。
EXEC sys.sp_cdc_help_change_data_capture
为 William 的回答添加更多内容。
对于案例SQL服务器代理不是运行
您可以通过以下方式启用它:
- 控制面板 >
- 管理工具>
- 点击“服务”
- 寻找SQL服务器代理
- 右键单击并开始
现在您可以在 mssql 中触发 cdc 作业查询。
PS:您需要具有 windows 服务器的登录权限。
这个问题是关于:
在 Windows 10 中,我在 Docker 容器之外的 Microsoft SQL 服务器实例上安装了 Debezium 运行。我每 390 毫秒收到以下警告:
No maximum LSN recorded in the database; please ensure that the SQL Server Agent is running
[io.debezium.connector.sqlserver.SqlServerStreamingChangeEventSource]
我在 Github 上检查了 Debezium 的代码,我唯一能在代码注释中找到此警告的地方指出,只有当代理不是 运行 时才应抛出此警告。我已经确认 SQL 服务器代理是 运行。
为什么会出现此警告,我该如何解决?
注:
根据 Docker 的文档,我当前的解决方案似乎只能在非生产环境中使用。
LSN 是 "pieces" 与您的 SQL 服务器更改相关的信息。如果您没有 LSN,可能是您的 CDC 未 运行 或未正确配置。 Debezium 使用 LSN 进行复制,因此,您的 SQL 服务器需要生成它。
一些方法:
- 您是否检查过您的 table 是否启用了 CDC?这将列出启用了 CDC 的 table:
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 服务器上 运行?参见 in docs
EXEC sys.sp_cdc_start_job;
GO
- 在 CDC 中启用 table 时,我在角色名方面遇到了一些问题。对于我的情况,在
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
此错误的另一种可能性(今天早上我只是 运行 警告自己试图将新数据库联机)是 SQL 登录名没有所需的权限。 Debezium 运行 以下 SQL。检查您正在使用的 SQL 登录是否可以访问 运行 此存储过程及其 returns 您在 CDC 中设置的表。如果您遇到错误或返回零行,请与您的 DBA 一起设置适当的权限。
EXEC sys.sp_cdc_help_change_data_capture
为 William 的回答添加更多内容。
对于案例SQL服务器代理不是运行
您可以通过以下方式启用它:
- 控制面板 >
- 管理工具>
- 点击“服务”
- 寻找SQL服务器代理
- 右键单击并开始
现在您可以在 mssql 中触发 cdc 作业查询。
PS:您需要具有 windows 服务器的登录权限。