変更の追跡は、アプリケーションに効率的な変更追跡メカニズムを提供する軽量ソリューションです。 一般に、データベース内のデータに対する変更のクエリをアプリケーションで実行し、その変更に関連する情報にアクセスできるようにするには、アプリケーション開発者がカスタムの変更追跡メカニズムを実装する必要がありました。 これらのメカニズムの作成には、通常、多くの作業が必要であり、多くの場合、トリガー、 timestamp
列、追跡情報を格納するための新しいテーブル、カスタム クリーンアップ プロセスの組み合わせを使用する必要があります。
変更に必要な情報量はアプリケーションの種類ごとに異なります。 アプリケーションでは、変更の追跡を使用して、ユーザー テーブルに加えられた変更に関する次の情報を取得することができます。
ユーザー テーブルのどの行が変更されたか
行が変更されたという情報のみが必要で、行が変更された回数やその間に行われた変更の値は不要です。
最新のデータは、追跡されているテーブルから直接取得できます。
行が変更されたか
- 同じトランザクションで変更が行われたときに、行が変更されたという情報とその変更に関する情報を取得でき、それらの情報が記録される必要があります。
注
変更の追跡ではなく、変更データ キャプチャを使用して、アプリケーションで行われたすべての変更と変更されたデータの中間値に関する情報が必要な場合は、適切な場合があります。 詳細については、「変更データ キャプチャについて (SQL Server)」を参照してください。
One-WayとTwo-Wayの同期アプリケーション群
SQL Server データベース エンジン のインスタンスとデータを同期する必要があるアプリケーションの場合は、変更に対するクエリを実行できる必要があります。 変更の追跡は、一方向および双方向の両方の同期アプリケーションの基礎として使用できます。
One-Way 同期アプリケーション
クライアントや中間層のキャッシュ アプリケーションなどの一方向の同期アプリケーションは、変更の追跡を使用して構築できます。 次の図に示すように、キャッシュ アプリケーションでは、データが データベース エンジン に格納され、他のデータ ストアにキャッシュされる必要があります。 また、データベース テーブルに加えられた変更を含むように、キャッシュを最新の状態に保つ必要があります。 変更は データベース エンジンに返されません。
Two-Way 同期アプリケーション
変更の追跡を使用する双方向同期アプリケーションを構築することもできます。 このシナリオでは、 データベース エンジン のインスタンスのデータが 1 つ以上のデータ ストアと同期されます。 これらのデータ ストアのデータは更新でき、変更は データベース エンジンに返され、同期される必要があります。
双方向同期アプリケーションの良い例は、時々接続されるアプリケーションです。 この種類のアプリケーションでは、クライアント アプリケーションがローカル ストアに対してクエリを実行して更新します。 クライアントとサーバー間の接続が使用可能な場合、アプリケーションはサーバーと同期し、変更されたデータは双方向に流れます。
双方向同期アプリケーションは、競合を検出できる必要があります。 同期の間に両方のデータ ストアで同じデータが変更された場合、競合が発生します。 競合を検出する機能により、アプリケーションは変更が失われないようにすることができます。
変更の追跡のしくみ
変更の追跡を構成するには、DDL ステートメントまたは SQL Server Management Studio を使用できます。 詳細については、「 変更の追跡の有効化と無効化 (SQL Server)」を参照してください。 変更を追跡するには、最初にデータベースに対して変更の追跡を有効にしてから、そのデータベース内で追跡するテーブルに対して有効にする必要があります。 テーブル定義を変更する必要はなく、トリガーも作成されません。
テーブルに対して変更の追跡を構成すると、テーブル内の行に影響を与える DML ステートメントによって、変更された各行の変更追跡情報が記録されます。 変更された行を照会し、変更に関する情報を取得するには、 変更追跡関数を使用できます。
主キー列の値は、変更情報と共に記録される追跡対象テーブルからの情報のみです。 これらの値は、変更された行を識別します。 それらの行の最新のデータを取得するには、アプリケーションでこの主キー列の値を使用して、ソース テーブルを追跡対象テーブルに結合します。
各行に加えられた変更に関する情報は、変更追跡を使用して取得することもできます。 たとえば、変更の原因となった DML 操作の種類 (挿入、更新、または削除) や、更新操作の一部として変更された列などです。
こちらもご覧ください
変更履歴の有効化と無効化 (SQL Server)
変更の追跡のしくみ (SQL Server)
変更の追跡の管理 (SQL Server)
データ変更の追跡 (SQL Server)