システム CLR データ型 (geometry、geography、または hierarchyid) を使用してテーブルの変更を処理すると、CDC キャプチャ ジョブが失敗する
この記事では、システム CLR データ型 (geometry、geography、hierarchyid) を持つテーブルの変更を処理するときに CDC キャプチャ ジョブが失敗する問題を回避するのに役立ちます。
適用対象: SQL Server
元の KB 番号: 4538384
現象
次のような状況で問題が発生します。
- ジオメトリ、geography、hierarchyid などのシステム CLR データ型を持つテーブルで、データ キャプチャの変更 (CDC) 機能を有効にします。
- CDC キャプチャ (スキャン) ジョブは、他のテーブルに関連する変更を処理しています。 プロセスが、システム CLR データ型を持つテーブルにまだ到達していません。
- システム CLR データ型を持つテーブルで、データ操作言語 (DML) を変更します。 次に、同じテーブルでデータ定義言語 (DDL) を変更します (たとえば、列を追加します)。
このシナリオでは、CDC キャプチャ ジョブがシステム CLR データ型を持つテーブルの処理を開始すると、失敗し、次のエラー メッセージが返されます。
Msg 18805、レベル 16、状態 1、プロシージャ sp_replcmds、LineLineNumber[Batch Start Line LineNumber ]
Log-Scan プロセスは、ログ シーケンス番号 (LSN) {nnnnnnnnnn: nnnnnnnn: nnnn} からレプリケートされたコマンドを構築できませんでした。 パブリケーション データベースをバックアップし、カスタマー サポート サービスにお問い合わせください。
Msg 22859、Level 16、State 2、Procedure sp_replcmds、Line LineNumber [Batch Start Line LineNumber ]
ログ レコードの処理でログ スキャン プロセスが失敗しました。 現在のセッションの以前のエラーを参照して原因を特定し、関連する問題を修正します。
Msg 3621、レベル 16、状態 6、プロシージャ sp_replcmds、Line LineNumber [Batch Start Line LineNumber ]
ステートメントは終了しました。
Msg 22864、レベル 16、状態 1、プロシージャ sp_MScdc_capture_job、Line LineNumber[Batch Start Line LineNumber ]
データベース 'DatabaseName' のキャプチャ ジョブによってsp_MScdc_capture_jobへの呼び出しが失敗しました。 エラーの原因については、以前のエラーを確認してください。
さらに、次のエントリがエラー ログに記録される場合があります。
エラー: 913、重大度: 16、状態: 16。 データベース IDID が見つかりませんでした。 データベースがまだアクティブ化されていないか、移行中である可能性があります。 データベースが使用可能になったら、クエリを再実行します。 このエラーが、その状態を遷移しているデータベースによるものでないと思われる場合、このエラーは引き続き発生します。
詳細
この問題は、CDC キャプチャ ジョブが最初に DML のみを処理し、次の実行時に DDL の変更を処理する場合には発生しません。
回避策
この問題を回避するには、次のいずれかの方法を試してください。
問題のあるデータ型 (geometry、geography、hierarchyid) を CDC と共に使用しないでください。
ジオメトリ、geography、または hierarchyid データ型を持つテーブルで DDL を変更するときに、インフライト DML の変更がないことを確認します。 この問題を回避するには、次の手順に従います。
- すべての DML をテーブルに休止します。
- キャプチャ ジョブを実行して変更を処理します。
- テーブルの DDL を実行します。
- キャプチャ ジョブを実行して DDL の変更を処理します。
- DML 処理を再度有効にします。
注:
引き続きこの問題が発生する場合は、テーブルで CDC を無効にしてから再度有効にします。