この記事では、データ管理ワークスペースから設定するSQL Serverの変更追跡メカニズムについて説明します。 SQLの変更追跡を使えば、財務やオペレーションアプリからデータを段階的にエクスポートできます。 増分エクスポートでは、変更されたレコードのみをエクスポートします。 エンティティでSQLの変更追跡を有効にしていなければ、毎回完全なエクスポートしか有効にできません。
データ管理では、独自データベース (BYOD) エクスポートと非 BYOD エクスポートの両方で、SQL の変更追跡を有効にすることができます。
別行バージョンのメカニズムについては、 テーブルおよびデータエンティティの行バージョン変更追跡を参照してください。 各メカニズムに適用されるテーブル除外については、「 変更トラッキングのテーブル適格性」を参照してください。
Note
データ管理のエクスポートでは、レコード削除はBYODのみ、かつエンティティ内のルートデータソースのみで追跡されます。 非 BYOD のエクスポートには、追跡レコードの削除は含まれません。 行バージョン削除の追跡については、「 トラック削除とクリーンアップ」をご覧ください。
SQL変更追跡の要件
SQL変更追跡を有効にする前に、 SQLテーブルの適格性制限とエクスポートパフォーマンスガイダンスを確認してください。
財務および運用データベースでもSQL Server変更追跡を有効にする必要があります。 財務および運用サービスがこの構成を管理します。 アプリケーションデータベースに対してSQL文を実行する代わりに、以下のアプリケーション手順を使用してください。
BYOD の変更追跡を有効する
データ ストア (BYOD) に 1 つまたは複数のエンティティを発行するとき、変更追跡を有効にすることができます。
データ管理ワークスペースで、データベースへのエンティティのエクスポートのコンフィギュレーションを選択します。
データのエクスポート先のデータベースを選択し、発行 を選択します。
1 つまたは複数のエンティティをデータベースに公開することができます。 [ 発行済みのみを表示 ] を選択すると、以前に発行したエンティティの一覧が表示されます。
発行したエンティティを選択し、[ 変更の追跡] を選択します。
環境内の変更追跡の適切なオプションを選択します。
エンティティは複数のテーブルを使用できます。 これらのオプションでは、エンティティの変更を追跡できる粒度を指定します。
Option 変更の追跡方法 プライマリ テーブルの有効化 プライマリ テーブル内のすべてのフィールドを変更すると、エンティティの変更がトリガーされます。 セカンダリ テーブルのフィールドを変更しても、エンティティの変更はトリガーされません。 エンティティ全体の有効化 エンティティ内の追跡可能なテーブルのフィールドに変更を加えると、エンティティに変更が発生します。 テーブルの適格性の制限は引き続き適用されます。 カスタム クエリの有効化 変更を追跡する必要があるテーブルを識別するカスタム クエリを使用します。 カスタム クエリはエンティティで定義されます。 Note
変更によって変更の追跡がトリガーされた場合、変更はフィールド レベルではなくレコード全体で追跡されます。 エンティティ レコード全体がエクスポート先にエクスポートされます。 選択したオプションに関係なく、エンティティのフィールドの数はターゲットにエクスポートされた数になります。
非 BYOD シナリオでの変更追跡の有効化
Data Managementで、非BYOD宛先へのインクリメンタルエクスポートのためにSQLの変更追跡を有効にすることができます。
Note
Dataverse仮想テーブルの行バージョン変更追跡設定については、「 Dataverseの財務および運用仮想テーブルの変更追跡」をご覧ください。
非 BYOD シナリオで変更追跡を有効化する方法 :
- データ管理ワークスペースから、データ エンティティ リスト ページを選択します。
- 変更追跡を有効にするエンティティを選択します。
- アクションリボンの 「変更追跡 アクション」を選択し、エンティティの変更の追跡方法のオプションを選択します。 利用可能なオプションの詳細については、「 BYODの変更追跡を有効にする 」セクションの表をご覧ください。
変更追跡用のカスタム クエリ
次の例は、エンティティに静的メソッドを追加する方法を示しています。 メソッドがクエリを返し、ルートノードがエンティティと同じであることを確認しましょう。 例えば、カスタマーエンティティの場合、ルートノードは CustTableされており、変更追跡クエリもルートとして CustTable を使用します。
- クエリの一部であるテーブルで変更の追跡を有効にします。
- エンティティと変更追跡クエリ (ルート テーブル) の間に結合を作成して、エンティティ内で変更されたレコードを特定します。
public static Query defaultCTQuery()
{
Query q = new Query();
QueryBuildDataSource custDs = q.addDataSource(tableNum(CustTable));
QueryBuildDataSource partyDs = custDs.addDataSource(tableNum(DirPartyTable));
partyDs.relations(true);
QueryBuildDataSource locationDs = partyDs.addDataSource(tableNum(DirPartyLocation));
locationDs.addRange(fieldNum(DirPartyLocation, IsPrimary)).value(queryValue(NoYes::Yes));
locationDs.addLink(fieldNum(DirPartyTable, RecId), fieldNum(DirPartyLocation, Party));
QueryBuildDataSource addressDs = locationDs.addDataSource(tableStr(LogisticsPostalAddress));
addressDs.addLink(fieldNum(DirPartyLocation, Location), fieldNum(LogisticsPostalAddress, Location));
return q;
}