次の方法で共有


データ エクスポート サービスを使用した Azure SQL Database へのデータの複製

Note

2021 年 11 月より、データ エクスポート サービスは廃止されました。 データ エクスポート サービスは引き続き機能し、2022 年 11 月にサポート終了と販売終了となるまで完全にサポートされます。 詳細: https://aka.ms/DESDeprecationBlog

データ エクスポート サービスは、Microsoft AppSource で使用できるようになったアドオン サービスで、顧客の契約している Azure サブスクリプションで保管されている Azure SQL Database へ Microsoft Dataverse データベースのデータをレプリケーションする機能が追加されています。 対応している対象は、Azure SQL Database と Azure 仮想マシン上の SQL Server です。 データ エクスポート サービスはデータ全体を最初に同期して、その後はシステムで変更 (差分変更) が発生すると継続的に同期します。 この機能は、Azure のデータと分析サービスを使用して、データに加えてさまざまな分析やレポートのシナリオに対応し、顧客とパートナーがカスタム ソリューションを構築するための新しい可能性を開きます。

Note

Dataverse データを Azure Synapse Analytics や Azure Data Lake Gen2 に Azure Synapse Link for Dataverse を使用してエクスポートすることを強くお勧めします。 詳細: Azure Synapse Link for Dataverse を使用した分析情報の取得時間の短縮

顧客エンゲージメント アプリ (Dynamics 365 Sales、Dynamics 365 Customer Service、Dynamics 365 Field Service、Dynamics 365 Marketing、Dynamics 365 Project Service Automation) とともにデータ エクスポート サービスを使用できます。

データ エクスポート サービスの構成と管理を行うプログラム インターフェイスについては、開発者ガイドの データ エクスポート サービス を参照してください。

データ エクスポート サービスを使用するための前提条件

データ エクスポート サービスの使用を開始する際は、次の前提条件が必要です。

Azure SQL データベース サービス

  • 顧客が所有する Azure SQL Database サブスクリプション。 このサブスクリプションでは、同期されるデータ量を許可する必要があります。

  • ファイアウォール設定。 Azure サービスへのアクセスを許可するをオフにし、このトピックで示されている適切なクライアント IP アドレスを指定することをお勧めします。 詳細: データ エクスポート サービスにより使用される Azure SQL データベースの静的 IP アドレス

    また、Azure サービスへのアクセスを許可するをオンにし、すべての Azure サービス アクセスを許可できます。

    Azure VM 上の SQL Server については、"インターネット経由で SQL Server を接続する" オプションを有効化する必要があります。 詳細については、Azure: Azure で SQL サーバー仮想マシンに接続する を参照してください

    さらに、ファイアウォール ルールを構成して、データ エクスポート サービスと SQL Server 間の通信を許可します。

  • データベース ユーザーは、次のテーブルに従って、データベースとスキーマ レベルのアクセス許可を持っている必要があります。 データベース ユーザーは、データ エクスポート接続文字列で使用されます。

    必要なデータベース アクセス許可

    アクセス許可の種類コード アクセス許可の名前
    CRTB テーブルの作成
    CRTY 種類の作成
    CRVW ビューの作成
    CRPR 手順の作成
    ALUS ALTER ANY USER
    VWDS データベース状態の表示

    必要なスキーマ アクセス許可。

    アクセス許可の種類コード アクセス許可の名前
    AL ALTER
    IN 挿入
    DL Del
    SL 選択
    UP 更新
    EX 実行
    RF 参照

Azure Key Vault サービス

  • 顧客所有の Key Vault サブスクリプションは、データベース接続文字列を安全に維持するために使用されます。

  • ID "b861dbcc-a7ef-4219-a005-0e4de4ea7dcf" のアプリケーションに PermissionsToSecrets アクセス許可を付与します。この操作を完了する際は、以下の AzurePowerShell コマンドを実行し、接続文字列シークレットを含む Key Vault へのアクセスに使用します。 詳細情報: Azure Key Vault の設定方法

  • Key Vault 内のシークレットは、 組織 (OrgId) とテナント ID (TenantId) でタグ付けされる必要があります。 これを完了する際は以下の AzurePowerShell コマンドを実行します。 詳細情報: Azure Key Vault の設定方法

  • ファイアウォール ルールを構成して、データ エクスポート サービスと Azure Key Vault 間の通信を許可します。

顧客エンゲージメント アプリ

  • バージョン 9.0 以降の環境です。

  • データ エクスポート サービス ソリューションのインストールが必要です。

    • 設定>Microsoft Appsource> に移動して、Microsoft Dynamics 365 - データ エクスポート サービス を参照または検索し、今すぐ入手する を選択します。
    • または、Microsoft AppSourceで検索します。
  • エクスポート プロファイルに追加されるエンティティが変更追跡と共に有効にされている必要があります。 カスタマイズ>システムのカスタマイズ に移動してエンティティを選択することにより、標準またはカスタムのエンティティを同期できることを確認します。 全般タブが、データ サービスセクションの変更履歴オプションで有効になっていることを確認します。

  • 環境では、システム管理者セキュリティ ロールを所有している必要があります。

Web ブラウザー

Web ブラウザーで、ドメイン https://discovery.crmreplication.azure.net/ のポップアップを有効にします。 これは、[設定] > [データ エクスポート] の順に移動するときの自動サインインに必要です。

サービス、資格情報、および権限が必要

データ エクスポート サービスの機能を使用する際は、次のサービス、資格情報、特権が必要です。

  • A サブスクリプション。 システム管理者セキュリティ ロールが割り当てられたユーザーだけが、エクスポート プロファイルを設定または変更することができます。

  • 次のサービスを含む Azure サブスクリプション。

    • Azure 仮想マシン上の Azure SQL Database または Azure SQL Server。

    • Azure Key Vault。

重要

データ エクスポート サービス、Customer Engagement アプリおよび Azure Key Vaul サービスを使用するには、サービスが同じテナントの下で、また同じ Microsoft Entra ID で実行されている必要があります。 詳細情報: Azure と Microsoft 365 の統合

Azure SQL Database サービスは、サービスと同じまたは異なるテナントを使用できます。

データ エクスポート サービスを使用する前に知っておくべきこと

  • 環境上の次の任意のアクション実行するときは、エクスポートのプロファイルを削除してから再び作成することが必要です。

    • 環境を復元します。
    • 環境をコピーします (完全または最小のいずれか)。
    • 環境をリセットします。
    • 環境を別の国または地域に移動します。

    そのためには、エクスポート プロファイル ビュー内のエクスポート プロファイルを削除し、次にテーブルおよび保存された手順を削除し、次に新しいプロファイルを作成します。 詳細情報: データ エクスポート プロファイル テーブルとストアド プロシージャをすべて削除する方法

  • 管理者モードを有効化する オプションが有効化されているサンドボックス環境や運用環境では、データ エクスポート サービスを使用できません。 詳細については次を参照してください: 管理モード

  • 次のアクションが発生する場合、データ エクスポート サービスは目的の Azure SQL データベース内で関連付けされたテーブル、列、またはストアド プロシージャ オブジェクトをドロップ (削除) しません。

エクスポート ファイル

顧客エンゲージメント アプリからデータをエクスポートするには、 管理者がエクスポート プロファイルを作成します。 複数のプロファイルを作成してアクティブ化することで、異なる転送先データベースへ同時にデータを同期させることができます。

エクスポート プロファイルはデータ エクスポート サービスのコアの概念です。 エクスポート プロファイルでは、転送先データベースとデータを同期する設定と構成情報を収集します。 エクスポート プロファイルの一部として、管理者は転送先データベースへエクスポートするエンティティの一覧を提供します。 アクティブ化されると、エクスポート プロファイルはデータの自動同期を開始します。 最初は、指定のエンティティに対応するすべてのデータがエクスポートされます。 その後、エンティティ レコードに発生するデータの変更のみ、または顧客エンゲージメント アプリ内のメタデータが、実際の時間と近いプッシュ メカニズムを使用して継続的に同期されます。 したがって、顧客エンゲージメント アプリからデータを取得するようにスケジュールを設定する必要はありません。

有効な変更の追跡をするエンティティにのみ、エクスポート プロファイルを追加できます。 データをキャプチャする標準のエンティティのほとんどは、変更の追跡が有効になっていることに注意してください。 ユーザー定義エンティティは、エクスポート プロファイルに追加する前に変更の追跡を明示的に有効にする必要があります。 詳細については、変更の追跡を有効化してデータの同期をコントロールするを参照してください。

データ エクスポート サービスはメタデータとデータの同期を行います。 各エンティティは 1 つのテーブルを変換し、各フィールドは目的のデータベース テーブルの列を変換します。 テーブルおよび列名は、メタデータのスキーマ名を使用します。

アクティブ化されると、エクスポート プロファイルは、エクスポートされたデータの操作上の可視性および診断に役立つデータ同期のための統計を収集します。

エクスポート プロファイルで使用可能なデータ同期

カテゴリ 機能 サポートされているデータの種類
初期同期 メタデータ - 基本的なデータの種類 整数、浮動小数点数、10 進数、1 行テキスト、複数行テキスト、日時のデータ型。
初期同期 メタデータ - 高度なデータの種類 通貨、PartyList、オプション セット、状態、ステータス、検索 (顧客および関連の種類検索)。 PartyList は、バージョン 8.1 以降のみエクスポートの利用ができます。
初期同期 データ - 基本的な種類 すべての基本データの種類。
初期同期 データ - 高度なデータの種類 すべての高度なデータの種類。
差分同期 スキーマの変更 - 基本的な種類 フィールドの変更点、すべての基本的なデータの種類を追加または修正します。
差分同期 スキーマの変更 - 高度な種類 フィールドの変更点、すべての高度なデータの種類を追加または修正します。
差分同期 スキーマの変更 - 基本的な種類 すべての基本データの種類。
差分同期 スキーマの変更 - 高度な種類 PartyList など、すべての高度なデータの種類。

エクスポート プロファイルの作成

エクスポート プロファイルを作成する前に、次の要件が満たされていることを確認します。

  • データ エクスポート サービス ソリューションを環境にインストールします。

  • SQL Database 接続文字列を Key Vault で維持して、エクスポート プロファイルに提供する Key Vault URL をコピーします。 詳細については、Azure: Azure Key Vault の開始 を参照してください。

  • エクスポート プロファイルに追加されるエンティティは、変更の追跡が有効になります。 詳細については、変更の追跡を有効化してデータの同期をコントロールするを参照してください。

  • SQL Database サービスにはデータの保存に十分な記憶域があります。

  • あなたは、環境のシステム管理者です。

  1. 設定>データ エキスポートの順に移動します。

  2. データをエクスポートしたくない場合、通知をレビューし、続行 または キャンセル を選択します。

  3. 新しいエクスポート プロファイルを作成するには、新規 を選択します。

  4. プロパティ ステップでは、次の情報を入力し、Key Vault を接続せずに 次へ を選択して続行します。 検証 を選択し、Key Vault への接続を提供する Key Vault URL を使用します。

    • 名前。 プロファイルの一意の名前です。 このフィールドは必須です。

    • Key Vault 接続 URL。 転送先データベースを接続するために使用される資格情報を保存する接続文字列を指す Key Vault URL です。 このフィールドは必須です。 詳細情報: Azure Key Vault の設定方法

      重要

      Key Vault 接続 URL は大文字/小文字の区別があります。 このトピックでは、Windows PowerShell コマンドを実行した後に表示される Key Vault 接続 URL を正確に入力します。

    • スキーマ。 代替データベース スキーマの名前です。 英数字のみ有効です。 このフィールドは任意です。 既定では、dbo が転送先 SQL Database データベースで使用されるスキーマです。

    • 接頭辞。 転送先データベースで作成されたテーブル名に使用する接頭辞です。 これにより、転送先データベースのエクスポート プロファイルで作成されたテーブルを簡単に見分けることができるようになります。 指定された場合、接頭辞は 15 文字未満である必要があります。 このフィールドは任意であり、英数字のみ使用できます。

    • 再試行回数。 転送先テーブルで挿入または更新に失敗した場合に再試行されるレコードの回数。 このフィールドは必須です。 既定値は 12 で、利用可能な値は 0-20 です。

    • 再試行間隔。 失敗した場合の再試行までの待機秒数。 このフィールドは必須です。 既定値は 5 で、利用可能な値は 0-3600 です。

    • 削除ログの書き込み。 削除されたレコードを記録するためのオプション設定。

    [エクスポート プロファイルの作成] ダイアログ ボックスの [プロパティ] タブ。

  5. エンティティの選択 ステップで、転送先 SQL Database データベースにエクスポートするべきエンティティを選択し、次へ を選択します。

    [エクスポート プロファイルの作成] ダイアログ ボックスの [エンティティ] タブ。

  6. 関連付けの選択 ステップで、前のステップで選択したエンティティと一緒に存在する M:N (多対多) の関連付け を同期できます。 次へ を選択します。

    輸出プロフィールの作成 - リレーションシップの管理 - リレーションシップの選択。

  7. 概要 ステップで、作成とアクティブ化 を選択してプロファイル レコードを作成し、同期プロセスを開始する Key Vault に接続します。 それ以外の場合は、作成 を選択してエクスポート プロファイルを保存し、後でアクティブ化します。

    [エクスポート プロファイルの作成] ダイアログ ボックスの [概要] タブ。

既存のエクスポート プロファイルの変更

重複する既存のエクスポート プロファイルからエンティティおよび関連付けを追加または削除できます。

  1. 設定>データ エキスポートの順に移動します。

  2. [すべてのデータ エクスポート プロファイル] ビューで、変更するデータ エクスポートを選択します。

    エクスポート プロファイルの選択。

  3. [操作] ツール バーで、エンティティの管理 を選択し、データ エクスポート用のエンティティを追加、または削除します。 エンティティの関連付けを追加または削除するには、関連付けの管理 を選択します。

    エンティティまたはエンティティの関連付けの管理。

  4. 追加または削除するエンティティまたはエンティティの関連付けを選択します

    追加または削除するエンティティまたはエンティティの関連付けを選択する。

  5. 更新 を選択し、変更をエクスポート プロファイルに送信します。

重要

エクスポート プロファイルからエンティティまたはエンティティのリレーションシップを削除した場合、目的とするデータベース内に対応するテーブルをドロップしません。 削除したエンティティを再度追加する前に、目的とするデータベース内に対応するテーブルをドロップする必要があります。 エンティティ テーブルをドロップするには、特定のエンティティに対するデータ エクスポート プロファイルのテーブルおよびストアド プロシージャの削除方法 を参照してください。

目的とする Azure SQL データベースのテーブルの詳細

データ エクスポート サービスはデータとメタデータのテーブルを両方作成します。 テーブルには、各エンティティと同期される M:N の関連付けが作成されます。

エクスポート プロファイルがアクティブ化されると、これらのテーブルが目的とするデータベース内に作成されます。 これらはシステム テーブルで、SinkCreatedTime と SinkModifiedTime のフィールドは追加されません。

Table name Created
<接頭辞>_GlobalOptionsetMetadata エクスポートプロフィールのアクティブ化の時に。
<接頭辞>_OptionsetMetadata エクスポートプロフィールのアクティブ化の時に。
<接頭辞>_StateMetadata エクスポートプロフィールのアクティブ化の時に。
<接頭辞>_StatusMetadata エクスポートプロフィールのアクティブ化の時に。
<接頭辞>_TargetMetadata エクスポートプロフィールのアクティブ化の時に。
<接頭辞>_AttributeMetadata エクスポートプロフィールのアクティブ化の時に。
<接頭辞>_DeleteLog ログの削除オプションが有効化された場合に、エクスポート プロファイルをアクティブ化します。

同期の問題の解決

複数回再試行した後でも、データベースの記憶域の制約または長時間にわたるクエリの実行によるテーブルのロックにより、レコードの同期エラーが引き起こされる場合があります。 これらのエラーを解決するために、失敗したレコードのみの再同期、またはすべてのレコードの再同期を強制できます。

  1. エクスポート プロファイルを表示してレコードの同期エラーを探します。 同期エリアのデータ プロファイルの表示、またはコンタクト エンティティ レコード同期エラーがあるこのプロファイルなどのエクスポート プロファイルを開くことによりこれを行います。

    DataExport_failed_records_exist.

  2. 同期エラーの原因を調査し、解決します。 詳細情報: エラーの処理と監視

  3. 問題を解決した後、失敗したレコードを再同期します。

    Note

    失敗したレコードの再同期は、パブリック プレビューの機能です。

    • プレビュー機能は運用環境での使用を想定しておらず、機能が制限されている可能性があります。 これらの機能を公式リリースの前に使用できるようにすることで、顧客が一足先にアクセスし、そこからフィードバックを得ることができます。
      • この機能は変更される予定であるため、運用環境では使用しないでください。 開発環境およびテスト環境に限ってご使用ください。
      • マイクロソフトはこのプレビュー機能のサポートを提供しません。 Microsoft Dynamics 365 テクニカル サポートでは、問題や質問への対応ができません。 プレビュー機能は運用環境での使用を想定しておらず、別個の追加使用条件が適用されます。
    1. 環境にサイン インして、設定>データ エキスポートの順に移動します。

    2. レコード同期エラーが含まれるエクスポート プロファイルを開きます。

    3. [エクスポート プロファイル] ツールバーの 失敗したレコードの再同期 を選択します。

    4. 確認ダイアログで失敗したレコードの再同期の成功を確認し、Ok を選択します。

    再同期成功の通知。

    1. エクスポート プロファイルに失敗したレコードの通知が含まれていないことを確認します。これは、データ エクスポート プロファイルを開き、プロパティと概要 タブの 失敗した通知 カウンターが 0 になっているこで確認できます。 [エクスポート プロファイル] ツールバーの 更新 を選択して、失敗した通知 の値が現在の値であることを確認します。

    ゼロは失敗を記録します。

  4. 前の手順の後に同期を試みた後、レコードの同期機能が失敗し続ける場合、Microsoft カスタマ サポート サービスにご連絡ください。

エラー処理と監視

エクスポート プロファイルの同期状態を表示するには、設定>データ エクスポートに移動し、エクスポート プロファイルを開きます。 エンティティタブでは、同期できなかった失敗したレコード列のレコードを含む同期ステータスが表示されます。 失敗したレコードの場合、ステータス理由を含むレコードの一覧は、コマンド バーの 失敗したレコード を選択してダウンロードすることができます。

エクスポート プロファイルのコマンド バー - [失敗したレコード] ボタン。

[エクスポート プロファイル] で、プロパティと概要 を選択するとプロファイルのプロパティが表示されます。 関連付けの同期ステータスを表示するには、関連付け を選択します。

同期に失敗したレコードに関する詳細情報を表示する方法

失敗したレコード ログの表示は同期エラーの原因を特定する助けになります。 送信先の Azure 宛先データベースで失敗したレコードを表示するには、Azure Storage データの使用を簡単にするフリー スタンドアロン アプリケーションである Azure Storage Explorer を使用します。 詳細情報: Azure Storage Explorer

  1. 設定>データ エキスポートの順に移動します。

  2. すべてのデータ エクスポート プロファイル ビューで、失敗通知があるエクスポート プロファイルを選択します。

    失敗した通知数。

  3. [操作] ツール バーで、既定として設定 を選択します。

    失敗したレコードのツールバー ボタン。

  4. 失敗したレコードのダイアログ ボックスのダウンロードでは、BLOB URL のコピー を選択した後に、Ok を選択します。

    失敗したレコードのダイアログ ボックスのダウンロード。

    注意

    blob URL は最大 24 時間有効です。 URL が 24 時間 を超える場合は、新規 BLOB URL を生成するには、先ほど説明された手順を繰り返します。

  5. Azure Storage Explorer を起動します。

  6. Azure Storage Explorer で、Azure Storage へ接続する を選択します。

  7. クリップボードから URL を Azure Storage へ接続する ボックスにペーストし、次へ を選択します。

    ストレージ URL。

  8. [接続概要] ページで、接続 を選択します。

  9. Azure Storage Explorer は宛先データベースに接続されます。 エクスポート プロファイルに対して失敗したレコードが存在する場合、Azure Storage Explorer は失敗したレコード同期のフォルダを表示します。

同期に失敗したレコードに関する詳細情報を表示する方法 (プレビュー)

データ エクスポート サービス ユーザー インターフェイス内から、失敗したレコードを直接ダウンロードできます。 この機能は、現在プレビュー段階で、テストしてフィードバックを提供するのに最適です。

失敗したレコード ダウンロードのステップ

  1. 失敗したレコードを含むプロファイルを識別します。

    データ エクスポート プロファイル。

  2. プロファイルを選択し、上部にあるメニュー バーで 失敗したレコードのダウンロード (プレビュー) を選択します。

    失敗したレコードのダウンロード (プレビュー)。

  3. 失敗したレコードのダウンロード ダイアログ ボックスで、最後の 20 個 (最大) の Bolb ファイルの並び替えられたリストが表示されます。 ダウンロードするレコードを選択し、Ok を選択します。

    失敗したレコードのダウンロード。

  4. ダウンロードした場合は、任意のテキスト エディターのファイル (たとえば、メモ帳など) を開き、エラーの詳細を参照してください。

    エラー ログのサンプル。

失敗したレコードの再同期フォルダー構造およびログ ファイル

失敗したレコードの Azure Blob Storage の URL は、次のフォルダー構造がある場所を指します。

  • data。 このフォルダーには失敗したデータの通知と関連するレコード データに対する JSON が含まれます。

  • metadata。 このフォルダーには失敗したメタデータの通知と関連するメタデータに対する JSON が含まれます。

  • failurelog。 このフォルダーには同期のエラーおよびエラーが発生した理由に関する情報を提供するログが含まれます。

  • forcerefreshfailurelog。 このフォルダーには、失敗したレコードの再同期に使用された、データ エクスポート サービスの失敗したレコード コマンドの最後の実行によるエラーが含まれます。

  • unprocessablemessages。 このフォルダーには、データまたはメタデータおよび関連する JSON の削除のいずれかによって処理されなかったデータ通知が含まれます。

    failurelog および forcerefreshfailurelog フォルダーは \\\時間 という形式で構築されるので、最新のエラーを素早く見つけられます。 30 日経過したすべての失敗レコードは削除されます。

    取引先担当者エンティティ レコードの同期エラーを示す例のログ ファイルを以下に示します。

Entity: contact, RecordId: 459d1d3e-7cc8-e611-80f7-5065f38bf1c1, NotificationTime: 12/28/2016 12:32:39 AM, ChangeType: Update, FailureReason: The database 'tempdb' has reached its size quota. Partition or delete data, drop indexes, or consult the documentation for possible resolutions.  
The statement has been terminated.  

レコード同期エラーの一般的な理由

レコード同期エラーが発生するいくつかの理由を説明します。

  • 目的のデータベースに対する不十分なストレージ 失敗したレコードを再同期する前に、適切に Azure SQL Database ストレージを増やすか、または空き容量を確保します。 この問題が発生すると、これと似たメッセージがエラー ログに記録されます。

    'databasename' データベースの最大サイズに達しました。 データを分割または削除、インデックスをドロップ、または解決方法のドキュメントを参照します。

  • Azure SQL Database の同期のタイムアウト。 これは 1 度に大きな容量のデータが処理された場合に、データ エクスポート プロファイルの最初の同期中に発生する場合があります。 この問題が発生した場合、失敗したレコードを再同期します。 同期の問題の解決

データ エクスポートと共に Azure SQL Database を使用する場合のベスト プラクティス

  • リソース調整による同期エラーを防ぐために、Azure SQL Database Premium P1 またはデータ エクスポート サービスを使用する場合より適切なプランの使用をお勧めします。 詳細情報: Azure SQL Database リソースの制限SQL Database の価格

  • Azure SQL Database を設定し、ワークロードに対する読み取りコミット スナップショット分離 (RCSI) が、レポートおよび ETL ジョブなどの、長く読み取りクエリを実行する目的のデータベース上で正常に実行されるようにします。 これはデータ エクスポート サービスで発生する read\write の競合によるタイムアウト エラーの発生を減少します。

  • クエリのパフォーマンスを向上するため、データ エクスポート サービス データベースの並列処理の最大限度 (MAXDOP) を 1 に設定することをお勧めします。 詳細: MSDN: サーバー メモリ オプション

  • 断片化の量を頻繁に評価し、必要な場合は、データ エクスポート サービス データベース内のインデックスを再構築します。 詳細: インデックスの再編成と再構築

  • データ エクスポート サービス データベース内のテーブルおよびインデックス ビューで、定期的にデータベース統計を更新します。 詳細: 統計の更新

  • データ エクスポート サービス データベースの使用率を監視します。 詳細: PERF の監視

データ同期遅延時間について

データ エクスポート サービスは、データ変更が顧客エンゲージメント アプリで発生するときにプッシュ メカニズムを使用してそれらをリッスンすることで、変更を宛先データベースに同期するように設計されています。 サービスは数分以内にデータを格納しようと努力しますが、エンド ツー エンドの同期遅延時間に影響を及ぼす可能性があるいくつかの要因があります。

同期の期間に影響を与える要因には、以下が含まれます。

  • 顧客エンゲージメント アプリの現在の作業負荷。
  • 顧客エンゲージメント アプリのデータ変化率。
  • 各エクスポート プロファイルとそれらの属性に追加されたエンティティの数。
  • SQL Server のパフォーマンス。 例:
    • SQL 接続セットアップ時間。
    • SQL ステートメントの実行時間。

サービスの監視の基づくと、サービスが以下の条件で提供される場合、ほとんどの進行中の差分同期は 15 分で終了することが観測されています。

  • 発生している同期は差分同期であり、初期同期ではありません。 差分同期の対象は、レコードの作成、更新、および削除のランザクションを含むデータ変更操作のみです。 初期同期が終了すると、差分同期が開始することに注意してください。
  • 顧客エンゲージメント アプリにおけるエクスポート プロファイルのすべてのエンティティのデータ変化率は、1 時間に 3000 レコード未満です。 最大変化率を超えるレコードの一括変更によってデータ変化率が突然増加すると、追加の遅延時間が発生します。
  • エクスポート プロファイルに追加された各エンティティの属性数は 150 未満です。
  • データベース接続または SQL ステートメントの実行が 10 秒未満に終了します。 この制限を超え束愛、追加の遅延時間が発生します。
  • 宛先データベース接続または SQL 実行エラーが同期中に発生しません。

上記の条件が満たされる場合、15 分が一般的な同期遅延時間です。 Microsoft はデータ エクスポート サービスのサービス レベル アグリーメント (SLA) を提供しないので、同期遅延時間に関して保証または確約を行いません。

Azure Key Vault の設定方法

ここで説明する Windows PowerShell スクリプトを Azure アカウント管理者として実行し、データ エクスポート サービス機能にアクセス許可を付与し、Azure Key Vault にアクセス可能にします。 このスクリプトは、接続文字列のアクセスに使用されるエクスポート プロファイルを作成するために必要な Key Vault URL を表示します。

スクリプトを実行する前に、次の変数のプレースホルダーを置き換えます。

  • $subscriptionId。 使用する Key Vault リソース グループ。 リソース グループが存在しない場合は、指定した名称で新たなグループが作成されます。 この例では、[ContosoResourceGroup1] が使用されます。

  • $location。 [米国西部] などの、リソース グループまたはあるべき場所を指定します。

  • $connectionString。 Azure SQL Database への接続文字列。 Azure ダッシュボードに表示される場合は、ADO.NET 接続文字列を使用できます。

  • $organizationIdList = 許可された組織のコンマ区切り一覧は、データ エクスポート サービスを有効化する組織 ID (organizationId) を一覧表示します。 組織の ID を調べるには、設定>カスタマイズ>開発者リソースの順に移動します。 組織 ID は、環境の参照情報にあります。

  • $tenantId。 Key Vault サブスクリプションへの Azure Active Directory テナント ID を指定します。

重要

Azure サブスクリプションには複数の Azure Active Directory テナント ID を指定できます。 データ エクスポートに使用するインスタンスに関連付けられる正しい Azure Active Directory テナント ID を選択していることを確認します。

Note

$connectionString 内で参照されているユーザー ID がターゲット Azure SQL データベースに対する適切なアクセス許可を持っていることを確認してください。

# -------------------------------------------------------------------------------- #
    #  Provide the value for the following parameters before executing the script
$subscriptionId = 'ContosoSubscriptionId'    
$keyvaultName = 'ContosoKeyVault'
    $secretName = 'ContosoDataExportSecret'
    $resourceGroupName = 'ContosoResourceGroup1'
    $location = 'West US'
    $connectionString = 'AzureSQLconnectionString'
$organizationIdList = 'ContosoSalesOrg1_id, ContosoSalesOrg2_id'
$tenantId = 'tenantId'
    # -------------------------------------------------------------------------------- #

# Login to Azure account, select subscription and tenant Id
Connect-AzAccount -Tenant $tenantId -Subscription $subscriptionId

# Create new resource group if not exists.
$rgAvail = Get-AzResourceGroup -Name $resourceGroupName -Location $location -ErrorAction SilentlyContinue
if(!$rgAvail){
    New-AzResourceGroup -Name $resourceGroupName -Location $location
}

# Create new key vault if not exists.
$kvAvail = Get-AzKeyVault -VaultName $keyvaultName -ResourceGroupName $resourceGroupName -ErrorAction SilentlyContinue
if(!$kvAvail){
    New-AzKeyVault -VaultName $keyvaultName -ResourceGroupName $resourceGroupName -Location $location
    # Wait few seconds for DNS entry to propagate
    Start-Sleep -Seconds 15
}

# Create tags to store allowed set of Organizations.
$secretTags = @{}
foreach ($orgId in $organizationIdList.Split(',')) {
    $secretTags.Add($orgId.Trim(), $tenantId)
}

# Add or update a secret to key vault.
$secretValue = ConvertTo-SecureString $connectionString -AsPlainText -Force
$secret = Set-AzKeyVaultSecret -VaultName $keyvaultName -Name $secretName -SecretValue $secretValue -Tags $secretTags

# Authorize application to access key vault.
$servicePrincipal = 'b861dbcc-a7ef-4219-a005-0e4de4ea7dcf'
Set-AzKeyVaultAccessPolicy -VaultName $keyvaultName -ServicePrincipalName $servicePrincipal -PermissionsToSecrets get

# Display secret url.
Write-Host "Connection key vault URL is "$secret.id.TrimEnd($secret.Version)""

すべてのデータ エクスポート プロファイルのテーブルおよびストアド プロシージャの削除方法

重要

この SQL ステートメントを実行する前に @prefix と @schema 値をステートメントに正しく定義していることを確認します。 エクスポート ファイル はこの SQL ステートメントを実行した後に再作成する必要があります。

-----------------------------------------------------------------
-- Provide the value for the following parameters
DECLARE @prefix nvarchar(32) =''
DECLARE @schema nvarchar(32) ='dbo'
-----------------------------------------------------------------

DECLARE @sql nvarchar(max) = '';

SELECT @sql += 'DROP TABLE ' + QUOTENAME([TABLE_SCHEMA]) + '.' + QUOTENAME([TABLE_NAME]) + ';'
FROM [INFORMATION_SCHEMA].[TABLES]
WHERE [TABLE_TYPE] = 'BASE TABLE' AND [TABLE_NAME] like @prefix + '_%' AND [TABLE_SCHEMA]= @schema;

PRINT @sql
EXEC SP_EXECUTESQL @sql;

PRINT 'Finished dropping all tables. Starting to drop all stored procedures now.'

SELECT @sql='';
SELECT @sql += 'DROP PROCEDURE ' + QUOTENAME([ROUTINE_SCHEMA]) + '.' + QUOTENAME([ROUTINE_NAME]) + ';'
FROM [INFORMATION_SCHEMA].[ROUTINES]
WHERE [ROUTINE_TYPE] = 'PROCEDURE' AND [ROUTINE_NAME] like @prefix + '_%' AND [ROUTINE_SCHEMA]= @schema;
PRINT @sql
EXEC SP_EXECUTESQL @sql;

PRINT 'Finished dropping all stored procedures. Starting to drop all types now.'

SELECT @sql=''; 
SELECT @sql += 'DROP TYPE ' + QUOTENAME(SCHEMA_NAME([SCHEMA_ID])) + '.' +  QUOTENAME([NAME]) + ';'
FROM SYS.TYPES
WHERE is_user_defined = 1 AND [NAME] LIKE @prefix + '_%' AND [SCHEMA_ID]=SCHEMA_ID(@schema);

PRINT @sql
EXEC SP_EXECUTESQL @sql;

特定のエンティティに対するデータ エクスポート プロファイルのテーブルおよびストアド プロシージャの削除方法

重要

この SQL ステートメントを実行する前に @prefix、@schema、@entityName の値をステートメントに正しく定義していることを確認します。 この例では、潜在顧客エンティティのテーブル、種類、およびストアド プロシージャは除外されます。

-----------------------------------------------------------------
-- Provide the value for the following parameters
DECLARE @prefix nvarchar(32) ='crm'
DECLARE @schema nvarchar(32) ='dbo'
DECLARE @entityName nvarchar(32) ='lead'
-----------------------------------------------------------------
DECLARE @sql nvarchar(max) = '';

IF @prefix != '' 
BEGIN
       SET @prefix = @prefix + '_'
END

SELECT @sql += 'DROP TABLE ' + QUOTENAME([TABLE_SCHEMA]) + '.' + QUOTENAME([TABLE_NAME]) + ';'
FROM [INFORMATION_SCHEMA].[TABLES]
WHERE [TABLE_TYPE] = 'BASE TABLE' AND [TABLE_NAME] like @prefix + @entityName  AND [TABLE_SCHEMA]= @schema;
PRINT @sql
EXEC SP_EXECUTESQL @sql;
PRINT 'Finished dropping the entity. Starting to drop the types associated with the entity'

SELECT @sql='';
SELECT @sql += 'DROP TYPE ' + QUOTENAME(SCHEMA_NAME([SCHEMA_ID])) + '.' + QUOTENAME([NAME]) + ';'
FROM SYS.TYPES
WHERE
  is_user_defined = 1
  AND (
    [NAME] LIKE @prefix + @entityName +'Type' 
    OR [NAME] LIKE @prefix + @entityName +'IdType'
  )
  AND [SCHEMA_ID] = SCHEMA_ID(@schema);
PRINT @sql
EXEC SP_EXECUTESQL @sql;

管理 Power Platform から Data Export Service をアンインストールする方法

  1. 高度な設定に移動します。
  2. 設定 > カスタマイズ を選択して、ソリューション を選択します。
  3. Microsoft Dynamics 365 によって発行された DataExportService を選択し、消去 を選択します。

テナントで使用する Microsoft Entra のテナント ID を見つける

  1. Azure ポータルにサインインします。
  2. Azure サービス配下で、テナントのプロパティを選択します。
  3. テナント ID フィールドの値を選択します。

データ エクスポート サービスにより使用される Azure SQL データベースの静的 IP アドレス

Azure SQL Database で ファイアウォール サーバーの設定 を選択し、Azure サービスへのアクセスを許可するOFF にし、クライアント IP の追加 を選択して、環境のリージョンに適した IP アドレスを追加します。 詳細情報: Azure: Azure ポータルを使用して Azure SQL データベース サーバー レベルのファイアウォール ルールを構成する

Region 新しい IP アドレス 古い IP アドレス
米国西部 20.245.127.60 13.64.148.9
米国東部 172.174.41.63 20.228.153.81
東アジア 20.239.192.9 104.208.84.217
東南アジア 20.24.15.60 20.205.153.14
中央インド 20.219.158.75 20.198.113.107
インド南部 52.140.54.95 104.211.204.18
西ヨーロッパ 20.126.43.104 40.68.244.253
北ヨーロッパ 20.166.94.137 20.238.83.32
西日本 変更なし 104.214.144.93
東日本 52.253.104.175 20.89.138.246
ブラジル南部 4.228.211.102 20.197.186.17
オーストラリア南東部 変更なし 20.70.112.80
オーストラリア東部 20.5.88.96 20.213.58.3
カナダ中部 20.220.227.230 20.151.173.107
カナダ東部 40.86.216.207 52.229.109.91
英国西 51.142.173.150 20.68.113.18
英国南 20.117.159.198 20.117.89.184

注意

北米のお客様は、米国東部および米国西部の両方の承認済みリストに IP アドレスを追加する必要があります。

データ同期の中断を防ぐために、お客様は新しい IP アドレスと古い IP アドレスを保持する必要があります。

既知の問題

削除されたレコードは、再同期が失敗した後にエンティティ テーブルに再挿入される場合があります。

再同期の失敗から回復した場合、以前に削除されたレコードが元のエンティティ テーブルに再挿入される場合があります。 同期エラーの問題を回避するには、次の手順を実行してください。

  1. Write Delete Log が有効化されたエクスポート プロフィルを作成します。 Write Delete Log が有効化されていない既存のエクスポート プロフィルを再作成します。

  2. DeleteLog テーブルのレコードを検索する Azure SQL 配布先データベースに対する SQL クエリを作成し実行します。 1 つ以上のレコードが存在する場合、削除したレコードの存在を意味します。

  3. 1 つ以上のレコードが DeleteLog テーブルにある場合は、DeleteLog テーブルにあるレコードのレコード ID が EntityName テーブルのレコードのレコード ID に一致し、deleteLog の versionNumber が EntityName テーブルのレコードの versionNumber よりも大きい環境を検出する SQL クエリを作成および実行します。 レコード Id が一致している場合、EntityName テーブルからレコードを削除します。 たとえば、DeleteLog テーブルの AccountId 列内のレコード ID が、AccountBase エンティティ テーブルの AccountId 列のレコード ID と一致し、DeleteLog の versionNumber が Account テーブルの versionNumber より大きい場合、AccountBase エンティティ テーブルからレコードを削除します。

    重要

    ビジネス ニーズと要件に応じて、レコード削除の SQL クエリを頻繁に実施することをお勧めしますが、非運用の時間中には実施しないでください。

    エンティティ レコードを削除するためのクエリの例。

DELETE A FROM [dbo].[prefix_account] A
WHERE id IN (SELECT CONVERT(uniqueidentifier, recordid) FROM [dbo].[prefix_DeleteLog] DL WHERE DL.entityname ='account'
AND DL.VersionNumber > A.VersionNumber)

データ エクスポートをサポートしないエンティティ

ここに記載されたエンティティは変更履歴をサポートしますが、データ エクスポート サービスを使用したデータ エクスポートはサポートされません。

Entity テーブル名 回避策
活動​ ActivityPointerBase 電話、予定、電子メール、およびタスクなどの、エクスポートに特定の活動エンティティを選択します。

許容された最大の行サイズ (8K) を超える行を作成できない

エラー ログに「行の最大許容サイズ 8060 より大きいサイズ (size) の行を作成できない」と表示される場合、行の最大許容サイズの制限を超えています。 データ エクスポートのサービスは、8k の行最大許容サイズを超えた行サイズをサポートしていません。 この問題を軽減するには、行サイズの制限を超えていないことを確認する必要があります。

ソースの文字列の長さは、ColumnName の宛先スキーマより長くなります。

エラー ログに「ソースの文字列の長さが [ColumnName, MaxDataLength] の宛先スキーマより長い」と表示される場合、ソースの文字列の長さが宛先よりも長いという問題が発生しています。 ソース データの文字列の長さが宛先よりも長い場合、宛先への書き込みは失敗します。この問題を軽減するには、データサイズを小さくするか、列の長さを手動で MaxLength より増やす必要があります。

添付ファイルのサポートはありません

Annotation テーブルでの documentbody などの添付ファイルのエクスポートはサポートされていません。

プライバシー通知

データ エクスポート サービスを使用すると、Dynamics 365 内からデータ エクスポート プロファイルをアクティブ化する際に、プロファイルに追加されたエンティティのデータが Azure に送信されます。 最初の同期には、エクスポート プロファイルに追加されたエンティティに関連付けられているすべてのデータが含まれますが、以降の同期には、データ エクスポート サービスに継続的に送信される新しく加えられた変更のみが含まれます。 データ エクスポート サービスに送信されたデータは一時的に Azure Service Bus と Azure Storage に保存されて Azure Service Fabric で処理され、最終的に Azure サブスクリプションで指定されている送信先のデータベースに同期 (挿入、更新、または削除) されます。 データが同期されると、そのデータは Azure Service Bus と Azure Storage から削除されます。 データ同期中にエラーが発生すると、エンティティの種類、レコード ID、および同期タイムスタンプに対応する最小データが Azure Storage に保存され、更新されなかった一覧のレコードがダウンロードできるようになります。

管理者は任意のタイミングでデータ エクスポート プロファイルを非アクティブ化し、データ同期を停止できます。 さらに、管理者はエクスポート プロファイルを削除してエラーが発生したレコードのログを削除し、データ エクスポート サービス ソリューションをアンインストールしてデータ エクスポート サービスの使用を停止できます。

データ同期は Dynamics 365 とデータ エクスポート サービスの間で安全な方法で継続的に発生します。 データが Dynamics 365 とデータ エクスポート サービスの間で継続的に交換される際には暗号化されます。

データ エクスポート サービスに関連する Azure コンポーネントとサービスについては、以下のセクションで説明します。

Microsoft Azure セキュリティ センター

Azure Service Fabric

これは Dynamics 365 から受け取ったレコード同期通知を処理するための API および Azure VM のコンピューティングを提供し、それらを処理して宛先データベースでレコード データの挿入、更新、または削除を行います。 Azure Service Fabric ランタイムで管理される仮想マシンに展開されたマイクロサービスは、データ同期に関連するすべてのコンピューティング サービスを処理します。

Azure Service Bus

これにより、Azure Service Fabric の計算ノードで処理する同期通知メッセージを Dynamics 365 が挿入するメッセージ バスが提供されます。 各メッセージに、組織 ID やレコードなど、同期するデータの情報が保存されます。 Azure Service Bus のデータは、保管時に暗号化され、データ エクスポート サービスによるアクセスのみが可能です。

Azure Blob Storage

レコード同期通知データが大きすぎてメッセージに格納できない、または同期通知の処理で一時エラーが発生した場合、データは一時的に Azure Blob Storage に保存されます。 これらの BLOB は、対称および非対称暗号化のサポート、Azure Key Vault との統合といった機能を備えた、Azure Storage SDK の最新機能を利用して暗号化されます。

Azure SQL

Azure SQL Database はデータ エクスポート プロファイルの構成とデータ同期の指標を保存します。

参照

エンティティの関連付けの概要
データ エクスポート サービス
チームのブログ: データ エクスポート サービス