このトピックでは、データベースとテーブルの変更追跡を有効または無効にする方法について説明します。
データベースの変更の追跡を有効にする
変更の追跡を使用するには、あらかじめデータベース レベルで変更の追跡を有効にしておく必要があります。 次の例は、 ALTER DATABASE を使用して変更の追跡を有効にする方法を示しています。
ALTER DATABASE AdventureWorks2012
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON)
SQL Server Management Studio の [ データベースのプロパティ] ([変更履歴] ページ) ダイアログ ボックスを使用して、変更の追跡を有効にすることもできます。
変更の追跡を有効にするときに、CHANGE_RETENTION および AUTO_CLEANUP オプションを指定できます。これらの値は、変更の追跡を有効にした後いつでも変更できます。
変更保持の値は、変更追跡情報を保持する期間を指定します。 この期間より古い変更追跡情報は定期的に削除されます。 この値を設定するときは、アプリケーションがデータベース内のテーブルと同期する頻度を考慮する必要があります。 保有期間は、同期間隔と同じかそれ以上の長さに指定する必要があります。 アプリケーションが長い間隔で変更を取得した場合、変更情報の一部が削除された可能性があるため、返される結果が正しくない可能性があります。 正しくない結果を取得しないようにするために、アプリケーションでは、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 のテーブルの変更の追跡は、[ データベースのプロパティ] ([変更履歴] ページ) ダイアログ ボックスを使用して有効にすることもできます。
TRACK_COLUMNS_UPDATED オプションが ON に設定されている場合、SQL Server データベース エンジンには、内部変更追跡テーブルに更新された列に関する追加情報が格納されます。 列追跡を行うと、アプリケーションは更新された列のみを同期できます。 これにより、効率とパフォーマンスが向上します。 ただし、列の追跡情報を維持するとストレージのオーバーヘッドが増えるため、このオプションは既定で OFF に設定されています。
データベースまたはテーブルの変更の追跡を無効にする
まず変更の追跡の対象になっているすべてのテーブルの変更の追跡を無効にして、次にデータベースの変更の追跡を OFF に設定する必要があります。 データベースに対して変更の追跡が有効になっているテーブルを確認するには、 sys.change_tracking_tables カタログ ビューを使用します。
データベース内のテーブルで変更が追跡されていなければ、データベースの変更の追跡を無効にすることができます。 次の例は、 ALTER DATABASE を使用してデータベースの変更追跡を無効にする方法を示しています。
ALTER DATABASE AdventureWorks2012
SET CHANGE_TRACKING = OFF
次の例は、 ALTER TABLE を使用してテーブルの変更追跡を無効にする方法を示しています。
ALTER TABLE Person.Contact
DISABLE CHANGE_TRACKING;
こちらもご覧ください
[データベースのプロパティ] ([ChangeTracking] ページ)
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)