Azure SQL データベースでデータを複製

適用対象: Dynamics 365 for Customer Engagement アプリ バージョン 9.x

Dynamics 365 for Customer Engagement アプリ -データ エクスポート サービス は、Microsoft AppSource で利用できるアドオン サービスです。これは顧客が所有する Azure サブスクリプションに保管されている Azure SQL Database に Dynamics 365 for Customer Engagement アプリ データを複製する機能を追加します。 サポートされている対象先は、Azure 仮想マシン上の Azure SQL Database および SQL Server です。 データ エクスポート サービス は、Customer Engagement アプリ データ全体をインテリジェントに同期処理し、Dynamics 365 for Customer Engagement アプリ システムで変更 (差分変更) が発生すると継続的に同期処理します。 これにより、Azure データと組み合わされた Customer Engagementアプリ データと分析サービスに加えて、複数の分析とレポーティングのシナリオを可能にし、顧客とパートナーがカスタム ソリューションを開発する上で新たな機会が開かれます。

注意

次の事柄と共に データ エクスポート サービス を使用できます。

  • Dynamics 365 for Customer Engagement アプリ
  • Dynamics 365 for Customer Engagement アプリ バージョン 9.0

データ エクスポート サービス の管理と構成プロファイルの管理に対するプログラム インターフェイスについては、「データ エクスポート サービス」を参照してください。

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

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

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

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

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

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

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

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

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

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

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

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

Azure Key Vault サービス

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

  • 「b861dbcc-a7ef-4219-a005-0e4de4ea7dcf」の ID を使って、アプリケーションへの PermissionsToSecrets アクセス許可を付与します。 これは、以下の AzurePowerShell コマンドを実行して完了することができ、接続文字列を含む Key Vault のアクセスに使用されます。 詳細: Azure Key Vault の設定方法

  • Key Vault は、Dynamics 365 for Customer Engagement アプリ組織 (OrgId) とテナント ID (TenantId) でタグ付けされる必要があります。 これは、以下の [AzurePowerShell] コマンドを実行して完了することができます。 詳細: Azure Key Vault の設定方法

Dynamics 365 for Customer Engagement アプリ

  • Dynamics 365 for Customer Engagement アプリ バージョン 9.0 またはそれ以降のバージョンのインスタンス。

  • データ エクスポート サービス ソリューションがインストールされている必要があります。

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

  • Dynamics 365 for Customer Engagement アプリのインスタンスでは、システム管理者セキュリティ ロールを所有している必要があります。

Web ブラウザー

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

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

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

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

  • Azure サブスクリプションには次のサービスが含まれます。

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

    • Azure Key Vault。

重要

データ エクスポート サービス、Dynamics 365 for Customer Engagement アプリを使用するには Azure Key Vault サービスが同じテナントの下で、また同じ Azure Active Directory で実行されている必要があります。 詳細: Office 365 との Azure 統合

Azure SQL Database サービスは Dynamics 365 for Customer Engagement アプリ サービスと同じまたは異なるテナントを使用できます。

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

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

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

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

  • 管理者モードを有効化するが有効化されている設定の Dynamics 365 for Customer Engagement アプリ サンドボックス インスタンスでは データ エクスポート サービス は使用できません。 詳細: 管理モード

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

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

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

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

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

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

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

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

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

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

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

  • [データ エクスポート サービス] ソリューションが、[Dynamics 365 for Customer Engagement] インスタンスにインストールされます。

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

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

  • SQL データベース サービスには、Dynamics 365 for Customer Engagement アプリ データを保存するために必要な記憶域があります。

  • あなたは、[Dynamics 365 for Customer Engagement] インスタンスのシステム管理者です。

  1. Dynamics 365 for Customer Engagement アプリでは、設定 > データ エクスポートの順に移動します。

  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] データベースで使用されるスキーマです。

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

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

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

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

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

  5. エンティティの選択ステップで、転送先 [SQL] データベースにエクスポートしたいエンティティを選択し、次へをクリックします。

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

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

    [エクスポート プロファイルの作成] - [関連付けの管理] - [関係の選択]

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

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

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

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

  1. Dynamics 365 for Customer Engagement アプリ (オンライン) では、構成 > データ エクスポートの順に移動します。

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

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

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

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

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

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

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

重要

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

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

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

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

テーブル名 作成済み
<プレフィックス>_GlobalOptionsetMetadata エクスポートプロフィールのアクティブ化の時に。
<プレフィックス>_OptionsetMetadata エクスポートプロフィールのアクティブ化の時に。
<プレフィックス>_StateMetadata エクスポートプロフィールのアクティブ化の時に。
<プレフィックス>_StatusMetadata エクスポートプロフィールのアクティブ化の時に。
<プレフィックス>_TargetMetadata エクスポートプロフィールのアクティブ化の時に。
<プレフィックス>_AttributeMetadata エクスポートプロフィールのアクティブ化の時に。
<プレフィックス>_DeleteLog ログの削除オプションが有効化された場合に、エクスポート プロファイルをアクティブ化します。

同期の問題の解決

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

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

    DataExport_failed_records_exist

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

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

    注意

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

    • プレビュー機能は完全ではない機能ですが、顧客が早くアクセスし、フィードバックを送信できるように、正式リリースの前に利用できるようにしています。 プレビュー機能は、運用環境での使用を想定しておらず、機能が制限される可能性があります。

      • この機能は変更される予定であるため、運用環境では使用しないでください。 開発環境およびテスト環境に限ってご使用ください。

      • マイクロソフトはこのプレビュー機能のサポートを提供しません。 Microsoft Dynamics 365 テクニカル サポートでは、問題や質問への対応ができません。 プレビュー機能は運用環境での使用を想定しておらず、別個の追加使用条件が適用されます。

    1. Dynamics 365 for Customer Engagement インスタンスにサインインし、設定 > データ エクスポートに移動します。

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

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

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

    再同期成功の通知

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

    ゼロは失敗を記録します

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

エラー処理と監視

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

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

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

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

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

  1. Customer Engagement アプリでは、設定 > データ エクスポートの順に移動します。

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

    失敗した通知数

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

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

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

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

    注意

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

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

  6. Azure Storage Explore で、Azure Storage へ接続するをクリックします。

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

    ストレージ URL

  8. [Connection Summary] ページで、接続をクリックします。

  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 フォルダーは Year\Month\Day\Hour という形式で構築されるので、最新のエラーを素早く見つけられます。 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 Pricin

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

  • クエリのパフォーマンスを向上するため、データ エクスポート サービス データベースの max degree of parallelism (MAXDOP) を 1 にセットすることをお勧めします。 詳細: MSDN: サーバー メモリ オプション

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

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

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

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

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

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

  • Dynamics 365 for Customer Engagement アプリの現在の作業負荷。
  • Dynamics 365 for Customer Engagement アプリでのデータ変化率。
  • 各エクスポート プロファイルとそれらの属性に追加されたエンティティの数。
  • SQL Server のパフォーマンス。 たとえば、次のようになります。
    • SQL 接続セットアップ時間。
    • SQL ステートメントの実行時間。

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

  • 発生している同期は差分同期であり、初期同期ではありません。 差分同期の対象は、レコードの作成、更新、および削除のランザクションを含むデータ変更操作のみです。 初期同期が終了すると、差分同期が開始することに注意してください。
  • Dynamics 365 for Customer Engagement アプリにおけるエクスポート プロファイルのすべてのエンティティのデータ変化率は、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 =許可された Dynamics 365 for Customer Engagement アプリ組織のコンマ区切り一覧は、データ エクスポート サービス を有効にする組織 ID (organizationId) で一覧表示されます。 組織の ID を調べるには、Dynamics 365 for Customer Engagement アプリで、設定 > カスタマイズ > 開発者リソースの順に移動します。 組織 ID は、インスタンス参照情報にあります。

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

重要

Azure のサブスクリプションに、複数の Azure Active Directory テナント ID を持つことができます。 データ エクスポートに使用する Dynamics 365 for Customer Engagement アプリのインスタンスに関連付けられる正しい Azure Active Directory テナント ID を選択していることを確認します。

# -------------------------------------------------------------------------------- #
    #  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
Login-AzureRmAccount
Set-AzureRmContext -TenantId $tenantId -SubscriptionId $subscriptionId

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

# Create new key vault if not exists.
$kvAvail = Get-AzureRmKeyVault -VaultName $keyvaultName -ResourceGroupName $resourceGroupName -ErrorAction SilentlyContinue
if(!$kvAvail){
    New-AzureRmKeyVault -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-AzureKeyVaultSecret -VaultName $keyvaultName -Name $secretName -SecretValue $secretValue -Tags $secretTags

# Authorize application to access key vault.
$servicePrincipal = 'b861dbcc-a7ef-4219-a005-0e4de4ea7dcf'
Set-AzureRmKeyVaultAccessPolicy -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;

自分の Dynamics 365 for Customer Engagement インスタンス用に Azure Active Directory テナント ID の検索

  1. Azure ポータルにサインインします。

  2. 左のナビゲーション ウィンドウで、すべてのサービスを選択します。

  3. ID セクションの すべてのサービス リストで、Azure Active Directory を選択します。

  4. 左側のナビゲーション ウィンドウで、プロパティ を選択し、ディレクトリのプロパティディレクトリ ID を選択します。

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

Azure SQL Database では、ファイアウォール サーバーの設定をクリックし、Azure サービスへのアクセスを許可するOFF にし、クライアント IP の追加をクリックし、Azure SQL Database の領域に適した IP アドレスを追加します。 詳細: Azure: Azure Portal を使用する Azure SQL データベース サーバー レベルのファイアウォール ルールの構成

地域 IP アドレス
米国西部 40.112.139.218
米国東部 23.96.92.86
西ヨーロッパ 40.68.252.224
東アジア 52.175.24.148
東南アジア 52.163.231.218
中央インド 52.172.191.195
南インド 52.172.51.15
北ヨーロッパ 52.169.117.212
西日本 138.91.22.196
東日本 13.73.7.177
南ブラジル 191.235.81.249
オーストラリア南東部 40.115.78.163
オーストラリア東部 13.73.202.160
カナダ中部 52.228.26.31
カナダ東部 40.86.251.81
英国南 51.140.71.166
英国西 51.141.44.218

既知の問題

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

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

  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 FROM [dbo].[prefix_account] A
WHERE id IN (SELECT CONVERT(uniqueidentifier, recordid) FROM [dbo].[prefix_DeleteLog] DL WHERE DL.entityname ='account'
AND DL.VersionNumber &gt; A.VersionNumber)

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

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

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

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

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

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

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

プライバシーに関する声明

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

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

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

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

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

Azure Service Fabric

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

Azure Service Bus

これは、Customer Engagement が Azure Service Fabric のコンピューティング ノードで処理される同期通知メッセージを挿入する、メッセージ バスを提供します。 各メッセージに、組織 ID やレコードなど、同期するデータの情報が保存されます。

Azure Blob Storage

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

Azure SQL

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

関連項目

AppSource: Dynamics 365 for Customer Engagement アプリ - データ エクスポート サービス
Microsoft Dynamics 365 for Customer Engagement アプリの新機能 ‒ データ エクスポート サービスですか? データを管理する
データ エクスポート サービス チームのブログ: Dynamics 365 for Customer Engagement の概要 – データ エクスポート サービス