変更の追跡の有効化と無効化 (SQL Server)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

このトピックでは、データベースとテーブルに対する変更の追跡を有効または無効にする方法について説明します。

データベースの変更の追跡を有効にする

変更の追跡を使用するには、あらかじめデータベース レベルで変更の追跡を有効にしておく必要があります。 次の例では、 ALTER DATABASEを使用して変更の追跡を有効にする方法を示します。

ALTER DATABASE AdventureWorks2022  
SET CHANGE_TRACKING = ON  
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON)  

変更の追跡は、SQL Server Management Studio で [データベースのプロパティ] ([ChangeTracking] ページ) ダイアログ ボックスを使って有効にすることもできます。 データベースにメモリ最適化テーブルが含まれる場合、SQL Server Management Studio で変更の追跡を有効にすることはできません。 有効にするには、T-SQL を使用します。

変更の追跡を有効にするときに、CHANGE_RETENTION および AUTO_CLEANUP オプションを指定できます。これらの値は、変更の追跡を有効にした後いつでも変更できます。

change retention 値は、変更追跡情報を保持する期間を指定します。 この期間を過ぎると、変更追跡情報は定期的に削除されます。 この値を設定する場合は、アプリケーションとデータベース内のテーブルを同期する間隔を考慮する必要があります。 保有期間は、同期間隔と同じかそれ以上の長さに指定する必要があります。 アプリケーションが変更を取得する間隔の方が長い場合、変更情報の一部が削除済みである可能性があるので、正しくない結果が返されることがあります。 正しくない結果を取得しないようにするために、アプリケーションでは、CHANGE_TRACKING_MIN_VALID_VERSION システム関数を使用して、同期間隔が長すぎないかどうかを判断できます。

AUTO_CLEANUP オプションは、古い変更追跡情報を削除するクリーンアップ タスクを有効または無効にするために使用できます。 これは、アプリケーションを同期できない一時的な問題が発生しており、保有期間を過ぎた変更追跡情報を削除するプロセスを問題が解決されるまで一時停止する必要がある場合に役立ちます。

変更の追跡を使用するデータベースについて、以下の点に注意してください。

  • 変更の追跡を使用するには、データベースの互換性レベルを 90 以上に設定する必要があります。 データベースの互換性レベルが 90 未満の場合でも、変更の追跡は構成できます。 ただし、変更追跡情報の取得に使用される CHANGETABLE 関数からエラーが返されます。

  • スナップショット分離を使用すると、すべての変更追跡情報の一貫性を最も簡単に確保できます。 このため、データベースのスナップショット分離を ON に設定することを強くお勧めします。 詳細については、「変更の追跡のしくみ (SQL Server)」を参照してください。

テーブルの変更の追跡を有効にする

変更の追跡は、追跡するテーブルごとに有効にする必要があります。 変更の追跡を有効にすると、DML 操作の影響を受けるテーブル内のすべての行に関する変更追跡情報が保持されます。

次の例では、 ALTER TABLEを使用してテーブルの変更の追跡を有効にする方法を示します。

ALTER TABLE Person.Contact  
ENABLE CHANGE_TRACKING  
WITH (TRACK_COLUMNS_UPDATED = ON)  

テーブルの変更の追跡は、SQL Server Management Studio で [データベースのプロパティ] ([ChangeTracking] ページ) ダイアログ ボックスを使って有効にすることもできます。

TRACK_COLUMNS_UPDATED オプションを ON に設定すると、SQL Server データベース エンジン によって、更新された列に関する追加情報が内部変更追跡テーブルに格納されます。 列追跡を行うと、アプリケーションは更新された列のみを同期できます。 これにより、効率とパフォーマンスが向上します。 ただし、列追跡情報を保持すると追加のストレージ オーバーヘッドがかかるので、このオプションは既定では OFF に設定されています。

テーブルまたはデータベースに対する変更の追跡を無効にする

まず変更の追跡の対象になっているすべてのテーブルの変更の追跡を無効にして、次にデータベースの変更の追跡を OFF に設定する必要があります。 データベース内で変更の追跡が有効になっているテーブルを確認するには、 sys.change_tracking_tables カタログ ビューを使用します。

次の例では、 ALTER TABLEを使用してテーブルの変更の追跡を無効にする方法を示します。

ALTER TABLE Person.Contact  
DISABLE CHANGE_TRACKING;  

データベース内のテーブルで変更が追跡されていなければ、データベースの変更の追跡を無効にすることができます。 次の例では、 ALTER DATABASEを使用してデータベースの変更の追跡を無効にする方法を示します。

ALTER DATABASE AdventureWorks2022  
SET CHANGE_TRACKING = OFF  

参照

[データベースのプロパティ] ([変更の追跡] ページ)
ALTER DATABASE SET のオプション (Transact-SQL)
sys.change_tracking_databases (Transact-SQL)
sys.change_tracking_tables (Transact-SQL)
データ変更の追跡 (SQL Server)
変更の追跡について (SQL Server)
変更データの処理 (SQL Server)
変更の追跡の管理 (SQL Server)