sql >> データベース >  >> RDS >> Sqlserver

Debezium:データベースに記録された最大LSNはありません。 SQLServerエージェントが実行されていることを確認してください

    LSNは、SQLServerの変更に関連する情報の「断片」です。 LSNがない場合は、CDCが実行されていないか、正しく構成されていない可能性があります。 DebeziumはLSNを消費して複製するため、SQLServerがこれを生成する必要があります。

    いくつかのアプローチ:

    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データベースが有効になっていて、実行されていますか? (ここ

    有効 かどうかを確認します :

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

    そして、実行されているかどうかを確認します:

    EXECUTE sys.sp_cdc_enable_db;  
    GO  
    
    1. CDCサービスはSQLServerで実行されていますか? ドキュメント内
    EXEC sys.sp_cdc_start_job;  
    GO  
    
    1. CDCでテーブルを有効にすると、ロール名に問題が発生しました。私の場合、nullで設定します 私の問題を解決しました(詳細ここ
        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
    


    1. トリガーが自律的ですが、同じセッションで1回しか実行されません

    2. MySQLはデータベースのユーザーに特権を付与します

    3. MySQL関数からテーブルを返す方法

    4. LinuxでMySQLからPostgreSQLに移行する(Kubuntu)