適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric プレビューの SQL データベース
この記事では、データベースとテーブルの変更追跡を有効または無効にする方法について説明します。
データベースの変更の追跡を有効にする
変更の追跡を使用するには、あらかじめデータベース レベルで変更の追跡を有効にしておく必要があります。 次の例は、 ALTER DATABASE SET オプションを使用して変更の追跡を有効にする方法を示しています。
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 SET オプションを使用してデータベースの変更の追跡を無効にする方法を示しています。
ALTER DATABASE AdventureWorks2022
SET CHANGE_TRACKING = OFF