LSNは、SQLServerの変更に関連する情報の「断片」です。 LSNがない場合は、CDCが実行されていないか、正しく構成されていない可能性があります。 DebeziumはLSNを消費して複製するため、SQLServerがこれを生成する必要があります。
いくつかのアプローチ:
- テーブルで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データベースが有効になっていて、実行されていますか? (ここ )
有効 かどうかを確認します :
SELECT *
FROM sys.change_tracking_databases
WHERE database_id=DB_ID('MyDatabase')
そして、実行されているかどうかを確認します:
EXECUTE sys.sp_cdc_enable_db;
GO
- CDCサービスはSQLServerで実行されていますか? ドキュメント内
EXEC sys.sp_cdc_start_job;
GO
- 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