変更の追跡の有効化と無効化 (SQL Server)Enable and Disable Change Tracking (SQL Server)

適用対象: ○SQL Server (2008 以降) ○Azure SQL Database XAzure SQL Data Warehouse XParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

このトピックでは、データベースとテーブルに対する変更の追跡を有効または無効にする方法について説明します。This topic describes how to enable and disable change tracking for a database and a table.

データベースの変更の追跡を有効にするEnable Change Tracking for a Database

変更の追跡を使用するには、あらかじめデータベース レベルで変更の追跡を有効にしておく必要があります。Before you can use change tracking, you must enable change tracking at the database level. 次の例では、 ALTER DATABASEを使用して変更の追跡を有効にする方法を示します。The following example shows how to enable change tracking by using ALTER DATABASE.

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

変更の追跡は、 SQL Server Management StudioSQL Server Management Studio[データベースのプロパティ] ([変更の追跡] ページ) ダイアログ ボックスを使用して有効にすることもできます。You can also enable change tracking in SQL Server Management StudioSQL Server Management Studio by using the Database Properties (ChangeTracking Page) dialog box.

変更の追跡を有効にするときに、CHANGE_RETENTION および AUTO_CLEANUP オプションを指定できます。これらの値は、変更の追跡を有効にした後いつでも変更できます。You can specify the CHANGE_RETENTION and AUTO_CLEANUP options when you enable change tracking, and you can change the values at any time after change tracking is enabled.

change retention 値は、変更追跡情報を保持する期間を指定します。The change retention value specifies the time period for which change tracking information is kept. この期間を過ぎると、変更追跡情報は定期的に削除されます。Change tracking information that is older than this time period is removed periodically. この値を設定する場合は、アプリケーションとデータベース内のテーブルを同期する間隔を考慮する必要があります。When you are setting this value, you should consider how often applications will synchronize with the tables in the database. 保有期間は、同期間隔と同じかそれ以上の長さに指定する必要があります。The specified retention period must be at least as long as the maximum time period between synchronizations. アプリケーションが変更を取得する間隔の方が長い場合、変更情報の一部が削除済みである可能性があるので、正しくない結果が返されることがあります。If an application obtains changes at longer intervals, the results that are returned might be incorrect because some of the change information has probably been removed. 正しくない結果を取得しないようにするために、アプリケーションでは、CHANGE_TRACKING_MIN_VALID_VERSION システム関数を使用して、同期間隔が長すぎないかどうかを判断できます。To avoid obtaining incorrect results, an application can use the CHANGE_TRACKING_MIN_VALID_VERSION system function to determine whether the interval between synchronizations has been too long.

AUTO_CLEANUP オプションは、古い変更追跡情報を削除するクリーンアップ タスクを有効または無効にするために使用できます。You can use the AUTO_CLEANUP option to enable or disable the cleanup task that removes old change tracking information. これは、アプリケーションを同期できない一時的な問題が発生しており、保有期間を過ぎた変更追跡情報を削除するプロセスを問題が解決されるまで一時停止する必要がある場合に役立ちます。This can be useful when there is a temporary problem that prevents applications from synchronizing and the process for removing change tracking information older than the retention period must be paused until the problem is resolved.

変更の追跡を使用するデータベースについて、以下の点に注意してください。For any database that uses change tracking, be aware of the following:

  • 変更の追跡を使用するには、データベースの互換性レベルを 90 以上に設定する必要があります。To use change tracking, the database compatibility level must be set to 90 or greater. データベースの互換性レベルが 90 未満の場合でも、変更の追跡は構成できます。If a database has a compatibility level of less than 90, you can configure change tracking. ただし、変更追跡情報の取得に使用される CHANGETABLE 関数からエラーが返されます。However, the CHANGETABLE function, which is used to obtain change tracking information, will return an error.

  • スナップショット分離を使用すると、すべての変更追跡情報の一貫性を最も簡単に確保できます。Using snapshot isolation is the easiest way for you to help ensure that all change tracking information is consistent. このため、データベースのスナップショット分離を ON に設定することを強くお勧めします。For this reason, we strongly recommend that snapshot isolation be set to ON for the database. 詳細については、「変更の追跡のしくみ (SQL Server)」を参照してください。For more information, see Work with Change Tracking (SQL Server).

テーブルの変更の追跡を有効にするEnable Change Tracking for a Table

変更の追跡は、追跡するテーブルごとに有効にする必要があります。Change tracking must be enabled for each table that you want tracked. 変更の追跡を有効にすると、DML 操作の影響を受けるテーブル内のすべての行に関する変更追跡情報が保持されます。When change tracking is enabled, change tracking information is maintained for all rows in the table that are affected by a DML operation.

次の例では、 ALTER TABLEを使用してテーブルの変更の追跡を有効にする方法を示します。The following example shows how to enable change tracking for a table by using ALTER TABLE.

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

テーブルの変更の追跡は、 SQL Server Management StudioSQL Server Management Studio[データベースのプロパティ] ([変更の追跡] ページ) ダイアログ ボックスを使用して有効にすることもできます。You can also enable change tracking for a table in SQL Server Management StudioSQL Server Management Studio by using the Database Properties (ChangeTracking Page) dialog box.

TRACK_COLUMNS_UPDATED オプションが ON に設定されている場合、 SQL Server データベース エンジンSQL Server Database Engine によって、どの列が更新されたかという追加情報が内部変更追跡テーブルに格納されます。When the TRACK_COLUMNS_UPDATED option is set to ON, the SQL Server データベース エンジンSQL Server Database Engine stores extra information about which columns were updated to the internal change tracking table. 列追跡を行うと、アプリケーションは更新された列のみを同期できます。Column tracking can enable an application to synchronize only those columns that were updated. これにより、効率とパフォーマンスが向上します。This can improve efficiency and performance. ただし、列追跡情報を保持すると追加のストレージ オーバーヘッドがかかるので、このオプションは既定では OFF に設定されています。However, because maintaining column tracking information adds some extra storage overhead, this option is set to OFF by default.

データベースまたはテーブルに対する変更の追跡を無効にするDisable Change Tracking for a Database or Table

まず変更の追跡の対象になっているすべてのテーブルの変更の追跡を無効にして、次にデータベースの変更の追跡を OFF に設定する必要があります。Change tracking must first be disabled for all change-tracked tables before change tracking can be set to OFF for the database. データベース内で変更の追跡が有効になっているテーブルを確認するには、 sys.change_tracking_tables カタログ ビューを使用します。To determine the tables that have change tracking enabled for a database, use the sys.change_tracking_tables catalog view.

データベース内のテーブルで変更が追跡されていなければ、データベースの変更の追跡を無効にすることができます。When no tables in a database track changes, you can disable change tracking for the database. 次の例では、 ALTER DATABASEを使用してデータベースの変更の追跡を無効にする方法を示します。The following example shows how to disable change tracking for a database by using ALTER DATABASE.

ALTER DATABASE AdventureWorks2012  
SET CHANGE_TRACKING = OFF  

次の例では、 ALTER TABLEを使用してテーブルの変更の追跡を無効にする方法を示します。The following example shows how to disable change tracking for a table by using ALTER TABLE.

ALTER TABLE Person.Contact  
DISABLE CHANGE_TRACKING;  

参照See Also

[データベースのプロパティ] ([変更の追跡] ページ) Database Properties (ChangeTracking Page)
ALTER DATABASE SET のオプション (Transact-SQL) ALTER DATABASE SET Options (Transact-SQL)
sys.change_tracking_databases (Transact-SQL) sys.change_tracking_databases (Transact-SQL)
sys.change_tracking_tables (Transact-SQL) sys.change_tracking_tables (Transact-SQL)
データ変更の追跡 (SQL Server) Track Data Changes (SQL Server)
変更の追跡について (SQL Server) About Change Tracking (SQL Server)
変更データの処理 (SQL Server) Work with Change Data (SQL Server)
変更の追跡の管理 (SQL Server)Manage Change Tracking (SQL Server)