次の方法で共有


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

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

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

変更の追跡を使用するには、あらかじめデータベース レベルで変更の追跡を有効にしておく必要があります。 次の例は、 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)