変更の追跡の管理 (SQL Server)Manage Change Tracking (SQL Server)

適用対象: ○SQL Server ○Azure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

このトピックでは、変更の追跡を管理する方法について説明します。This topic describes how to manage change tracking. また、セキュリティを構成する方法、および変更の追跡を使用する場合のストレージとパフォーマンスへの影響を判断する方法について説明します。It also describes how to configure security and determine the effects on storage and performance when change tracking is used.

変更の追跡の管理Managing Change Tracking

ここでは、変更の追跡の管理に関連するカタログ ビュー、権限、および設定の一覧を示します。The following sections list catalog views, permissions, and settings that are relevant for managing change tracking.

カタログ ビューCatalog Views

変更の追跡が有効になっているテーブルおよびデータベースを確認するには、次のカタログ ビューを使用します。To determine which tables and databases have change tracking enabled, you can use the following catalog views:

また、 sys.internal_tables カタログ ビューには、ユーザー テーブルの変更の追跡を有効にしたときに作成された内部テーブルが表示されます。Also, the sys.internal_tables catalog view lists the internal tables that are created when change tracking is enabled for a user table.

SecuritySecurity

変更追跡関数を使用して変更追跡情報にアクセスするには、プリンシパルに次の権限が必要です。To access change tracking information by using the change tracking functions, the principal must have the following permissions:

  • 少なくともクエリ対象テーブルへの変更の追跡対象テーブルの主キー列に対する SELECT 権限。SELECT permission on at least the primary key columns on the change-tracked table to the table that is being queried.

  • 変更が取得されるテーブルに対する VIEW CHANGE TRACKING 権限。VIEW CHANGE TRACKING permission on the table for which changes are being obtained. VIEW CHANGE TRACKING 権限は、次の理由のため必要です。The VIEW CHANGE TRACKING permission is required for the following reasons:

    • 変更追跡レコードには、削除された行に関する情報 (特に削除された行の主キー値) が含まれます。Change tracking records include information about rows that have been deleted, specifically the primary key values of the rows that have been deleted. 機密データが削除された後の変更の追跡対象テーブルに対する SELECT 権限がプリンシパルに付与されている可能性があります。A principal could have been granted SELECT permission for a change tracked table after some sensitive data had been deleted. この場合、そのプリンシパルが変更の追跡を使用して、削除済みの情報にアクセスできることは望ましくありません。In this case, you would not want that principal to be able to access that deleted information by using change tracking.

    • 変更追跡情報には、更新操作によってどの列が変更されたかという情報が格納される場合があります。Change tracking information can store information about which columns have been changed by update operations. プリンシパルは、機密情報を含む列に対する権限を拒否されている場合があります。A principal could be denied permission to a column that contains sensitive information. ただし、変更追跡情報は参照できるので、列の値が更新されたことは確認できますが、列の値を確認することはできません。However, because change tracking information is available, a principal can determine that a column value has been updated, but the principal cannot determine the value of the column.

変更の追跡のオーバーヘッドについてUnderstanding Change Tracking Overhead

テーブルの変更の追跡を有効にすると、一部の管理操作が影響を受けます。When change tracking is enabled for a table, some administration operations are affected. 次の表に、考慮する必要がある操作と影響を示します。The following table lists the operations and the effects you should consider.

演算Operation 変更の追跡が有効になっている場合When change tracking is enabled
DROP TABLEDROP TABLE 削除するテーブルのすべての変更追跡情報が削除されます。All change tracking information for the dropped table is removed.
ALTER TABLE DROP CONSTRAINTALTER TABLE DROP CONSTRAINT PRIMARY KEY 制約を削除しようとすると失敗します。An attempt to drop the PRIMARY KEY constraint will fail. PRIMARY KEY 制約を削除する前に、変更の追跡を無効にする必要があります。Change tracking must be disabled before a PRIMARY KEY constraint can be dropped.
ALTER TABLE DROP COLUMNALTER TABLE DROP COLUMN 削除する列が主キーの一部である場合、変更の追跡に関係なく列は削除できません。If a column that is being dropped is part of the primary key, dropping the column is not allowed, regardless of change tracking.

削除する列が主キーの一部ではない場合、列の削除は成功します。If the column that is being dropped is not part of the primary key, dropping the column succeeds. ただし、このデータの同期を実行しているアプリケーションへの影響についてまず理解しておく必要があります。However, the effect on any application that is synchronizing this data should be understood first. テーブルで列の変更の追跡が有効になっている場合、削除した列がまだ変更追跡情報の一部として返される場合があります。If column change tracking is enabled for the table, the dropped column might still be returned as part of the change tracking information. 削除した列の処理は、アプリケーションで行う必要があります。It is the responsibility of the application to handle the dropped column.
ALTER TABLE ADD COLUMNALTER TABLE ADD COLUMN 変更の追跡対象のテーブルに新しい列を追加する場合、その列の追加は追跡されません。If a new column is added to the change tracked table, the addition of the column is not tracked. 新しい列に加えられた更新および変更のみが追跡されます。Only the updates and changes that are made to the new column are tracked.
ALTER TABLE ALTER COLUMNALTER TABLE ALTER COLUMN 主キー列以外の列のデータ型の変更は追跡されません。Data type changes of a non-primary key columns are not tracked.
ALTER TABLE SWITCHALTER TABLE SWITCH いずれかまたは両方のテーブルで変更の追跡が有効になっている場合、パーティションの切り替えは失敗します。Switching a partition fails if one or both of the tables has change tracking enabled.
DROP INDEX または ALTER INDEX DISABLEDROP INDEX, or ALTER INDEX DISABLE 主キーを設定するインデックスは削除または無効化できません。The index that enforces the primary key cannot be dropped or disabled.
TRUNCATE TABLETRUNCATE TABLE テーブルの切り捨ては、変更の追跡が有効になっているテーブルに対して実行できます。Truncating a table can be performed on a table that has change tracking enabled. ただし、この操作によって削除される行は追跡されず、有効な最小バージョンが更新されます。However, the rows that are deleted by the operation are not tracked, and the minimum valid version is updated. アプリケーションがそのバージョンをチェックすると、バージョンが古すぎるため再初期化が必要であることが示されます。When an application checks its version, the check indicates that the version is too old and a reinitialization is required. これは、テーブルの変更の追跡を無効にして再度有効にした場合と同じです。This is the same as change tracking being disabled, and then reenabled for the table.

変更の追跡を使用すると、DML 操作の一部として格納される変更追跡情報が原因で、DML 操作のオーバーヘッドが多少増加します。Using change tracking does add some overhead to DML operations because of the change tracking information that is being stored as part of the operation.

DML への影響Effects on DML

変更の追跡は、DML 操作のパフォーマンスのオーバーヘッドを最小限に抑えるように最適化されています。Change tracking has been optimized to minimize the performance overhead on DML operations. テーブルに対する変更の追跡の使用に関連するパフォーマンスのオーバーヘッドの増加は、テーブルにインデックスを作成して維持する必要がある場合に発生するオーバーヘッドに似ています。The incremental performance overhead that is associated with using change tracking on a table is similar to the overhead incurred when an index is created for a table and needs to be maintained.

DML 操作で変更された行ごとに、行が内部変更追跡テーブルに追加されます。For each row that is changed by a DML operation, a row is added to the internal change tracking table. DML 操作に関連するこの影響は、次のようなさまざまな要因によって異なります。The effect of this relative to the DML operation depends on various factors, such as the following:

  • 主キー列の数The number of primary key columns

  • ユーザー テーブル行で変更されるデータの量The amount of data that is being changed in the user table row

  • トランザクションで実行される操作の数The number of operations that are being performed in a transaction

スナップショット分離を使用している場合も、変更の追跡が有効になっているかどうかに関係なく、すべての DML 操作のパフォーマンスに影響します。Snapshot isolation, if used, also has an effect on performance for all DML operations, whether change tracking is enabled or not.

ストレージへの影響Effects on Storage

変更追跡データは、次の種類の内部テーブルに格納されます。Change tracking data is stored in the following types of internal tables:

  • 内部変更テーブルInternal change table

    変更の追跡が有効になっているユーザー テーブルごとに 1 つずつ内部変更テーブルがあります。There is one internal change table for each user table that has change tracking enabled.

  • 内部トランザクション テーブルInternal transaction table

    データベースごとに 1 つずつ内部トランザクション テーブルがあります。There is one internal transaction table for the database.

これらの内部テーブルは、ストレージ要件に次のような影響を与えます。These internal tables affect storage requirements in the following ways:

  • ユーザー テーブル内の各行が変更されるごとに、行が内部変更テーブルに追加されます。For each change to each row in the user table, a row is added to the internal change table. この行によって、一定のわずかなオーバーヘッドおよび主キー列のサイズと同じ可変のオーバーヘッドが生じます。This row has a small fixed overhead plus a variable overhead equal to the size of the primary key columns. この行には、アプリケーションによって設定されるオプションのコンテキスト情報が含まれる場合があります。The row can contain optional context information set by an application. また、列の追跡が有効になっている場合、列が変更されるごとに追跡テーブルで 4 バイトが必要になります。And, if column tracking is enabled, each changed column requires 4 bytes in the tracking table.

  • トランザクションがコミットされるごとに、行が内部トランザクション テーブルに追加されます。For each committed transaction, a row is added to an internal transaction table.

その他の内部テーブルと同様に、変更追跡テーブルに使用される領域は、 sp_spaceused ストアド プロシージャを使用して確認できます。As with other internal tables, you can determine the space used for the change tracking tables by using the sp_spaceused stored procedure. 内部テーブルの名前は、次の例に示すように、 sys.internal_tables カタログ ビューを使用して取得できます。The names of the internal tables can be obtained by using the sys.internal_tables catalog view, as shown in the following example.

sp_spaceused 'sys.change_tracking_309576141'  
sp_spaceused 'sys.syscommittab'  

参照See Also

データ変更の追跡 (SQL Server) Track Data Changes (SQL Server)
ALTER TABLE (Transact-SQL) ALTER TABLE (Transact-SQL)
[データベースのプロパティ] ([変更の追跡] ページ) 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)