切断されたデバイスと中央データベースサーバーの同期に関する問題のトラブルシューティングで、サーバーでSQL Server 2012にアップグレードした後に問題が発生しています。CHANGE_TRACKING_MIN_VALID_VERSIONは、本来よりも1大きい(または少なくともアップグレード前の値よりも)高い値を返しているようです。
簡単な例を設定する方法の例として、Arshad Aliのすばらしいウォークスルーの例を使用して作業してきました。
#1から#5までのスクリプトを実行して、SQL Server 2008環境と2012環境の両方で、Employeeテーブルの行を挿入、削除、および更新しました。
2008年、次のステートメントは0を返します。
SELECT CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID('Employee'))
2012年は1を返します。
テストでさらにいくつかのスクリプト(6〜8)を使用して作業する場合は、保持期間を1分に設定して、クリーンアップアクションを強制的に実行できるようにします。私はその日出発し、どうやらそれは一晩走ったようです。
2008年のインスタンスでは、CHANGE_TRACKING_CURRENT_VERSIONとCHANGE_TRACKING_MIN_VALID_VERSIONは等しくなります(11)。2012年のインスタンスでは、CHANGE_TRACKING_MIN_VALID_VERSIONはCHANGE_TRACKING_CURRENT_VERSION(11)よりも1つ高く(12)あります。これは、データベースが長時間アイドル状態のときに同期プロセスに影響を与える可能性があります。そして、特に次のテストを実行して、同期ではなく再初期化が必要かどうかを判断する場合に、プロセスがループに巻き込まれる可能性があることを発見しました。
IF CHANGE_TRACKING_MIN_VALID_VERSION(object_id(N'dbo.Employee')) > @sync_last_received_anchor
RAISERROR (N'SQL Server Change Tracking has cleaned up tracking information for table ''%s''...
他の誰かがこの行動の変化を経験しましたか?誰か説明がありますか?