KB5008296 - 修正: エラー メッセージのないデッドロックのために、欠落している変更データ キャプチャのクリーンアップ実行が特定されない

適用先
SQL Server 2019 on Windows SQL Server 2017 on Windows

現象

たとえば次のようなシナリオを考えてみます。

  • sp_cdc_cleanup_change_table を使用して、変更テーブルのクリーンアップ プロセスを管理します。
  • sp_cdc_cleanup_change_table が呼び出されると、変更データ キャプチャ (CDC) スキャンと CDC クリーンアップの間にデッドロックが発生します。

このシナリオでは、重大度 10 の次のエラー 22852 (情報メッセージ) が発生します。

注

データベース <DatabaseName> のキャプチャ インスタンスの 1 つ以上の下限点の変更によって廃止された変更テーブル エントリを削除できませんでした。 コマンド <CommandName> の実行時にエラーが発生しました。 返されたエラーは <ErrorInfo> でした。

アクションとエラーを使用して失敗の原因を特定し、要求を再送信します。

注釈 これは情報メッセージであるため、クリーンアップ プロセスは失敗せず、クリーンアップが成功したか失敗したかを判断する方法はありません。

修正の詳細

sp_cdc_cleanup_change_table を使用したときにクリーンアップが成功するか失敗するかを判断するために、省略可能な出力パラメーター (fCleanupFailed ビット) が関数sp_cdc_cleanup_change_tableに追加されます。 これを使用して、キャプチャ インスタンスのクリーンアップが失敗するかどうかをチェックできます。 fCleanupFailed 出力が 0 の場合、すべてのクリーンアップが成功します。 1 の場合、少なくとも 1 つのキャプチャ インスタンスのクリーンアップは失敗します。 次に例を示します。

-- Declaring a variable and Setting to zero first

select @cleanup_failed_bit = 0

--Execute cleanup and obtain output bit

EXEC @retcode =sys.sp_cdc_cleanup_change_table

@capture_instance = '<CaptureInstance>',

@low_water_mark = @LSN,

@threshold = 1 ,

@fCleanupFailed = @cleanup_failed_bit output      

--Leverage @cleanup_failed_bit output to check the status.

解決策

この問題は、次の SQL Server の累積的な更新プログラムで修正されています。

SQL Server 用の累積的な更新プログラムについて

SQL Server 用の新しい累積的な更新プログラムには、以前のビルドであったすべての修正プログラムとセキュリティ修正プログラムが含まれます。 ご使用のバージョンの SQL Server 用の最新ビルドをインストールすることをお勧めします。

状態

Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。

参考資料

マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。