現象
SQL Server 2016 Service Pack 3 (SP3) または SQL Server 2017 累積更新プログラム 26 (CU26) を適用した後、変更追跡クリーンアップ ストアド プロシージャ sp_flush_commit_table_on_demand または sp_flush_CT_internal_table_on_demand を実行するか、変更追跡自動クリーンアップが実行された場合は、次のエラー メッセージが表示されます。
注
- Msg 8114, Level 16, State 1, Procedure sp_add_ct_history, Line LineNumber
- Error converting data type numeric to int.
さらに、次のエラーが SQL Server エラー ログに記録される場合があります。
注
- DateTime spidNum Error: 22122, Severity: 16, State: 1.
- DateTime spidNum Change Tracking "table_name" のサイド テーブルで自動クリーンアップが失敗しました。 エラーが引き続き発生する場合は、sp_flush_CT_internal_table_on_demand を使用して、期限切れのレコードをサイド テーブルからクリーンします。
このエラーが発生すると、変更追跡の自動クリーンアップではサイド テーブルまたは syscommittab テーブルのエントリをクリーンアップできません。
原因
SQL Server 2016 SP3 および SQL Server 2017 CU26 では、新しいテーブル dbo が導入されました。MSchange_tracking_history、および変更追跡クリーンアップの履歴を記録するための新しいストアド プロシージャ sys.sp_add_ct_history。 このテーブルには、現在 INT データ型として宣言されている列 cleanup_version があります。 sys.sp_add_ct_history ストアド プロシージャには、INT とも宣言されているパラメーター @cleanup_version があります。 変更追跡を使用するビジー システムでは、クリーンアップ バージョンが所定の間隔で INT の範囲を超える可能性があります。 次に、変更追跡クリーンアップが実行されると、このテーブルの INT 列に BIGINT 値の挿入が試行されます。 これにより、「現象」セクションで説明されているエラーが生成されます。
解決策
この問題は、次の SQL Server の累積的な更新プログラムで修正されています。
SQL Server 2017 の累積的な更新プログラム 28
SQL Server の累積的な更新プログラムについて:
SQL Server 用の新しい累積的な更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正プログラムが含まれています。 SQL Server の最新の累積的な更新プログラムを確認してください。
SQL Server 2017 の最新の累積的な更新プログラム
オンデマンドの修正プログラム情報:
この問題は、次の SQL Server 用のオンデマンド修正プログラムで修正されています。
回避策
この問題が発生した場合は、SQL Server 2016 SP3 または SQL Server 2017 CU26 をアンインストールして、前のビルドに戻します。 Microsoft はこの問題を積極的に調査しており、詳細情報と追加ガイダンスが利用可能になり次第、この記事を更新します。
状態
Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。
参考資料
マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。