【问题标题】:Debezium: No maximum LSN recorded in the database; please ensure that the SQL Server Agent is runningDebezium:数据库中没有记录最大LSN;请确保 SQL Server 代理正在运行
【发布时间】:2021-10-19 02:49:18
【问题描述】:

此问题与: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 的文档。

【问题讨论】:

    标签: sql-server apache-kafka apache-kafka-connect debezium


    【解决方案1】:

    LSN 是与您的 SQL Server 更改相关的“片段”信息。如果您没有 LSN,则可能是您的 CDC 未运行或未正确配置。 Debezium 使用 LSN 进行复制,因此您的 SQL Server 需要生成它。

    一些方法:

    1. 您是否检查过您的表是否启用了 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
    
    1. 您的 CDC 数据库已启用并正在运行? (见here

    检查是否enabled:

    SELECT * 
    FROM sys.change_tracking_databases 
    WHERE database_id=DB_ID('MyDatabase')
    

    并检查是否正在运行:

    EXECUTE sys.sp_cdc_enable_db;  
    GO  
    
    1. 您的 CDC 服务正在 SQL Server 上运行?见in docs
    EXEC sys.sp_cdc_start_job;  
    GO  
    
    1. 在 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 代理未运行

      的情况

      您可以通过以下方式启用它:

      1. 控制面板 >
      2. 管理工具 >
      3. 点击“服务”
      4. 寻找 SQL Server 代理
      5. 右键开始

      现在您可以在 mssql 中触发 cdc 作业查询。

      PS:你需要有windows server的登录权限。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-29
        • 2020-07-09
        相关资源
        最近更新 更多