KB5007039 - 修正: 変更追跡クリーンアップを実行するときにエラー メッセージ 8114 または 22122 が表示される

適用先
SQL Server 2016 SQL Server 2017 on Linux SQL Server 2017 on Windows SQL Server 2016 Service Pack 3 - duplicate (do not use)

現象

2016 Service Pack 3 (SP3) または SQL Server 2017 累積的な更新プログラム 26 (CU26) SQL Server適用し、変更追跡クリーンアップ ストアド プロシージャ、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 の累積的な更新プログラム 27

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

SQL Serverの各新しい累積的な更新プログラムには、すべての修正プログラムと、以前の累積的な更新プログラムに含まれていたすべてのセキュリティ修正プログラムが含まれています。 SQL Serverの最新の累積的な更新プログラムを確認してください。

SQL Server 2017 の最新の累積的な更新プログラム

オンデマンド修正プログラム情報:

この問題は、次のオンデマンド修正プログラムで修正SQL Server。

回避策

この問題が発生した場合は、SQL Server 2016 SP3 または 2017 CU26 SQL Serverアンインストールして、以前のビルドに戻します。 Microsoft では、この問題を積極的に調査しており、この記事を更新し、その情報が利用可能な場合の詳細情報と追加のガイダンスを提供します。

状態

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

参考資料

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