使用数据导出服务将数据复制到 Azure SQL 数据库

备注

从 2021 年 11 月起,数据导出服务已被弃用。 数据导出服务将继续工作并将得到全面支持,直到它在 2022 年 11 月达到支持结束和生命周期结束日期为止。 详细信息:https://aka.ms/DESDeprecationBlog

数据导出服务是 Microsoft AppSource 上提供的一项附加服务,用于增加将 Microsoft Dataverse 数据库复制到客户拥有的 Azure 订阅中的 Azure SQL 数据库存储的功能。 支持的目标为 Azure 虚拟机上的 Azure SQL 数据库和 SQL Server。 数据导出服务最初智能地同步整个数据,然后随着系统中发生更改(增量更改)持续同步。 这有助于基于数据和 Azure 数据和分析服务实现多个分析和报告方案,并为客户和合作伙伴开启构建自定义解决方案的新可能。

备注

强烈建议您使用 Azure Synapse Link for Dataverse 将 Dataverse 数据导出到 Azure Synapse Analytics 和/或 Azure Data Lake Gen2。 详细信息:利用 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 数据库订阅的客户。 此订阅必须允许同步的数据量。

  • 防火墙设置。 建议您关闭允许访问 Azure 服务,并指定本主题中列举的相应客户端 IP 地址。 详细信息:数据导出服务所用 Azure SQL 数据库静态 IP 地址

    也可以开启允许访问 Azure 服务,以便允许访问所有 Azure 服务。

    对于 Azure VM 上的 SQL Server,应启用“通过 Internet 连接到 SQL Server”选项。 详细信息:Azure:连接到 Azure 上的 SQL Server 虚拟机

    此外,还可以配置防火墙规则,以允许在数据导出服务和 SQL Server 之间进行通信。

  • 数据库用户必须根据下面的表具有数据库和架构级别的权限。 数据库用户在数据库导出连接字符串中使用。

    需要数据库权限。

    权限类型代码 权限名称
    CRTB 创建表
    CRTY 创建类型
    CRVW 创建视图
    CRPR 创建流程
    ALUS 更改任何用户
    VWDS 查看数据库状态

    需要架构权限。

    权限类型代码 权限名称
    AL 更改
    IN 插入
    DL Delete
    SL 选择
    UP 更新
    EX 执行
    RF 引用

Azure 密钥保管库服务

  • 客户拥有的“密钥保管库”订阅,用于安全地维护数据库连接字符串。

  • 为 ID 为“b861dbcc-a7ef-4219-a005-0e4de4ea7dcf”的应用程序授予 PermissionsToSecrets 权限。方法是运行下面的 AzurePowerShell 命令,此权限用于访问包含连接字符串密钥的 Key Vault。 详细信息:如何设置 Azure 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/ 的弹出窗口。 导航到“设置”>“数据导出”时,自动登录需要此设置。

所需的服务、凭据和权限

若要使用数据导出服务功能,必须具有下列服务、凭据和权限。

  • 订阅。 只有为其分派系统管理员安全角色的用户才能设置或更改导出配置文件。

  • 包含以下服务的 Azure 订阅。

    • Azure 虚拟机上的 Azure SQL 数据库或 Azure SQL Server。

    • Azure Key Vault。

重要提示

若要使用数据导出服务,customer engagement 应用和 Azure Key Vault 服务必须在同一租户下运行且位于同一 Microsoft Entra ID 内。 详细信息:Azure 与 Microsoft 365 的集

Azure SQL 数据库服务可以处于与服务相同或不同的租户。

使用数据导出服务前应了解的事项

  • 只要对环境执行以下任何操作,都必须删除导出配置文件并重新创建。

    • 还原环境。
    • 复制(完整或最低)环境。
    • 重置环境。
    • 将环境移动到其他国家或地区。

    为此,删除“导出配置文件”视图中的“导出配置文件”,然后删除表和存储过程,然后创建一个新配置文件。 详细信息:如何删除所有数据导出配置文件表和存储过程

  • 数据导出服务不对配置为打开启动管理模式的沙盒或生产环境起工作。 详细信息:管理模式

  • 执行以下操作时,数据导出服务不删除目标 Azure SQL 数据库中的关联表、列或存储过程对象。

导出配置文件

为了从客户互动应用导出数据,管理员创建一个导出配置文件。 可以创建并激活多个配置文件,以便将数据同时同步到多个目标数据库。

导出配置文件是数据导出服务的核心概念。 导出配置文件收集设置和配置信息以将数据与目标数据库同步。 作为导出配置文件的一部分,管理员提供要导出到目标数据库的实体的列表。 导出配置文件一经激活,即开始自动同步数据。 首先导出与所选每个实体对应的全部数据。 之后,仅使用推送机制几乎实时持续同步客户互动应用中的实体记录或元数据的数据发生的更改。 因此,您不需要设置计划来从客户互动应用检索数据。

只能将已启用了更改跟踪的实体添加到导出配置文件。 请注意,用于捕获数据的大多数标准实体已启用了更改跟踪。 必须先为自定义实体显式启用更改跟踪,才能将其添加到导出配置文件。 详细信息:启用更改跟踪以控制数据同步

数据导出服务同时执行元数据和数据同步。 每个实体转换为一个表,而每个字段则转换为目标数据库表中的一列。 表和列名称使用元数据的架构名称。

导出配置文件一经激活,即收集数据同步的统计信息,这些统计信息可以帮助改善所导出数据的操作可视性和诊断。

通过导出配置文件实现的数据同步

类别 功能 支持的数据类型
初始同步 元数据 - 基本数据类型 Whole Number、Floating Point Number、Decimal Number、Single Line of Text、Multi Line of Text、Date and Time 数据类型。
初始同步 元数据 - 高级数据类型 Currency、PartyList、Option Set、Status、Status Reason、Lookup(包括 Customer 和 Regarding 类型查找)。 只有导出版本 8.1 及更高版本才能使用 PartyList。
初始同步 数据 - 基本数据类型 所有基本数据类型。
初始同步 数据 - 高级数据类型 所有高级数据类型。
增量同步 修改架构 - 基本类型 添加或修改字段更改,所有基本数据类型。
增量同步 修改架构 - 高级类型 添加或修改字段更改,所有高级数据类型。
增量同步 修改数据 - 基本类型 所有基本数据类型。
增量同步 修改数据 - 高级类型 所有高级数据类型,如 PartyList。

创建导出配置文件

创建导出配置文件之前,确保满足以下要求。

  • 您的环境已安装数据导出服务解决方案。

  • 维护在 Key Vault 中的 SQL 数据库连接字符串并复制 Key Vault URL 可在导出文件中提供。 详细信息:Azure:Azure 密钥保管库入门

  • 已为要添加到导出配置文件的实体启用了更改跟踪。 详细信息:启用更改跟踪以控制数据同步

  • 您的 SQL 数据库服务存储空间充足,可以存储数据。

  • 您是环境中的系统管理员。

  1. 转到设置>数据导出

  2. 查看声明,然后选择继续,如果不希望导出数据,则单击取消

  3. 若要新建导出配置文件,请选择新建

  4. 属性步骤中,输入以下信息,然后选择下一步继续操作但不连接到密钥保管库。 选择验证将使用您提供的密钥保管库 URL 连接到密钥保管库。

    • 名称。 配置文件的唯一名称。 该字段是必需字段。

    • 密钥保管库连接 URL。 指向使用用于连接到目标数据库的凭据存储的连接字符串的密钥保管库 URL。 该字段是必需字段。 详细信息:如何设置 Azure Key Vault

      重要提示

      密钥保管库连接 URL 区分大小写。 严格按照本主题中运行 Windows PowerShell 命令后显示的内容输入 Key Vault 连接 URL。

    • 架构。 备用数据库架构的名称。 只有字母数字字符才有效。 此字段为可选字段。 默认情况下,dbo 是用于目标 SQL 数据库的架构。

    • 前缀。 要用于目标数据库中创建的表名的前缀。 这可以帮助您轻松识别为目标数据库中的导出配置文件创建的表。 指定时,确保前缀少于 15 个字符。 此字段为可选字段,并且仅允许字母数字字符。

    • 重试计数。 在目标表中插入或更新失败时重试记录的次数。 该字段是必需字段。 可接受值为 0-20,默认值为 12。

    • 重试间隔时间。 失败时重试前的等待秒数。 该字段是必需字段。 可接受值为 0-3600,默认值为 5。

    • 读取删除日志。 用于记录删除的记录的可选设置。

    “创建导出配置文件”对话框中的“属性”选项卡。

  5. 选择实体步骤中,选择要导出到目标 SQL 数据库的实体,然后选择下一步

    “创建导出配置文件”对话框中的“选择实体”选项卡。

  6. 选择关系步骤中,可以使用在上一步中选择的实体同步存在的 M:N(多对多)关系。 选择下一步

    创建导出配置文件 - 管理关系 - 选择关系。

  7. 摘要步骤中,选择创建并激活创建配置文件记录并连接到密钥保管库,这将启动同步流程。 否则,选择创建以保存导出配置文件并在以后激活。

    “创建导出配置文件”对话框中的“摘要”选项卡。

修改现有导出配置文件

可以在要复制的现有导出配置文件中添加或删除实体和关系。

  1. 转到设置>数据导出

  2. 在“所有数据导出配置文件”视图中,选择要更改的导出配置文件。

    选择导出配置文件。

  3. 在“操作”工具栏上,选择管理实体,为数据导出添加或删除实体。 若要添加或删除实体关系,请选择管理关系

    管理实体或实体关系。

  4. 选择要添加或删除的实体或实体关系。

    选择要添加或删除的实体或实体关系。

  5. 选择更新提交对导出配置文件的更改。

重要提示

当您从导出配置文件删除实体或实体关系时,它不会在目标数据库中放弃对应的表。 必须先在目标数据库中放弃对应的表,您才能够重新添加已经删除的实体。 若要放弃实体表,请参阅如何删除特定实体的数据导出配置文件表和存储过程

目标 Azure SQL 数据库的表详细信息

数据导出服务为数据和元数据创建表。 为同步的每个实体和 M:N 关系创建一个表。

激活导出配置文件后,这些表将在目标数据库中创建。 这些是系统表,并且将不添加 SinkCreatedTime 和 SinkModifiedTime 字段。

表名 创建日期
<Prefix>_GlobalOptionsetMetadata 在激活导出配置文件后。
<Prefix>_OptionsetMetadata 在激活导出配置文件后。
<Prefix>_StateMetadata 在激活导出配置文件后。
<Prefix>_StatusMetadata 在激活导出配置文件后。
<Prefix>_TargetMetadata 在激活导出配置文件后。
<Prefix>_AttributeMetadata 在激活导出配置文件后。
<Prefix>_DeleteLog 启用删除日志选项时激活导出配置文件之后。

解决同步问题

即使在数次重试后,记录同步仍可能由于数据库存储约束或由于长时间运行的查询导致的表锁定而失败。 若要解决这些失败,可以强制仅重新同步失败记录或重新同步所有记录。

  1. 查看您的导出配置文件查找出现记录同步失败的所有记录。 通过在同步区域查看数据配置文件或通过打开导出配置文件来执行此操作,如这个出现联系人实体记录同步失败的配置文件。

    DataExport_failed_records_exist。

  2. 检查同步失败的根源并解决。 详细信息:错误处理和监视

  3. 解决该问题后,请重新同步失败的记录。

    备注

    失败记录同步是公共预览功能。

    • 预览功能不适合生产使用且功能可能受限。 这些功能在正式发布之前推出,以便客户可以提前使用并提供反馈。
      • 我们期望更改此功能,因此请勿在生产中使用。 仅在测试和开发环境中使用。
      • Microsoft 不支持此预览功能。 Microsoft Dynamics 365 技术支持将不能帮助您解决问题。 预览版功能不适合生产使用且受单独的补充使用条款的约束。
    1. 登录到您的环境并转到设置>数据导出

    2. 打开包括记录同步失败的导出配置文件。

    3. 在“导出配置文件”工具栏上,请选择重新同步失败记录

    4. 在确认对话中,在成功重新同步失败记录后选择确定

    成功重新同步的通知。

    1. 通过打开数据导出配置文件并查看属性和概述选项卡上的失败通知计数器来确认不包含失败记录通知的导出配置文件,此计数器应为 0。 选择“导出配置文件”工具栏上的刷新,确保失败通知值是最新的。

    表示失败的记录为零。

  4. 如果在尝试执行之前的步骤重新同步后,记录同步仍然失败,请联系 Microsoft 客户支持服务

错误处理和监视

若要查看导出配置文件的同步状态,请转到设置>数据导出,然后打开导出配置文件。 将在实体选项卡上显示同步状态,包括不能同步的记录的失败记录列。 对于任何失败记录,可以通过选择命令栏中的失败记录下载所有这些记录(包括状态原因)的列表。

“导出配置文件”命令栏 -“失败记录”按钮。

在导出配置文件中,可以选择属性和概览显示配置文件的属性。 选择关系查看关系同步状态。

如何查看有关同步失败的记录的详细信息

查看失败记录日志可以帮助您确定同步失败的原因。 若要查看目标 Azure 目标数据库中的失败记录,请使用 Azure 存储资源管理器,这是一个免费的独立应用,用于轻松处理 Azure 存储数据。 详细信息:Azure 存储资源管理器

  1. 转到设置>数据导出

  2. 在“所有数据导出配置文件”视图中,选择有失败通知的导出配置文件。

    失败通知。

  3. 在“操作”工具栏上,选择失败记录

    “失败记录”工具栏按钮。

  4. 在“下载失败记录”对话框中,选择复制 Blob URL,然后选择确定

    “下载失败记录”对话框。

    备注

    blob URL 的有效期最多 24 小时。 如果 URL 的期间超过了 24 小时,请重复前面介绍的步骤生成新 blob URL。

  5. 启动 Azure 存储资源管理器。

  6. 在 Azure 存储资源管理器中,选择连接到 Azure 存储

  7. 将 URL 从剪贴板粘贴到连接到 Azure 存储框中,然后选择下一步

  8. 在“连接摘要”页面中,选择连接

  9. Azure 存储资源管理器将连接到目标数据库。 如果导出配置文件有失败记录,Azure 存储资源管理器将显示“失败记录同步”文件夹。

如何查看有关同步失败的记录的详细信息(预览)

您可以直接从“数据导出服务”用户界面下载失败的记录。 此功能当前处于预览版阶段,非常适合您进行测试并提供反馈。

下载失败记录的步骤:

  1. 识别包含失败记录的配置文件。

    数据导出配置文件。

  2. 选择配置文件,然后从顶部菜单栏中选择下载失败记录(预览)

    下载失败记录(预览)。

  3. 下载失败记录对话框中,您将看到最后 20 个(最多)blob 文件的排序列表。 选择要下载的文件,然后选择确定

    下载失败记录。

  4. 下载后,在您选择的文本编辑器(例如,记事本)中打开文件并查看失败详细信息。

    示例错误日志。

“失败记录同步”文件夹结构和日志文件

失败记录 Azure Blob 存储 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 数据库存储。 当出现此问题时,类似消息记录到失败日志中。

    数据库 'databasename' 已达到其大小配额。 分区或删除数据,删除索引,或参阅文档以了解可行解决方法。

  • 与 Azure SQL 数据库的同步超时。 一次处理大量数据时,在数据导出配置文件初始同步期间可能发生此情况。 当出现此问题,请重新同步失败记录。 解决同步问题

使用 SQL Azure 数据库进行数据导出的最佳实践

  • 若要避免由于资源限制出现同步错误,建议您在使用数据导出服务时有 Azure SQL 数据库 Premium P1 或更好的计划。 详细信息:Azure SQL 数据库资源限制SQL 数据库定价

  • 设置 Azure SQL 数据库来为在执行长时间运行的读取查询的目标数据库中同时运行的工作负载使用已提交读快照隔离 (RCSI)。 这样可减少超时错误的出现,这些错误可能由于读\写冲突在数据导出服务中出现。

  • 为了帮助提高查询效果,建议将数据导出服务数据库的最大并行度 (MAXDOP) 设置为 1。 详细信息:MSDN:服务器内存选项

  • 请经常评估碎片数量,并在必要时,在数据导出服务数据库中重建索引。 详细信息:重新组织和重建索引

  • 定期更新数据导出服务数据库中表和索引视图上的数据统计信息。 详细信息:更新统计信息

  • 监视数据导出服务数据库的利用率。 详细信息:性能监视

关于数据同步延迟

数据导出服务被构建为通过侦听客户互动应用中发生的变化使用推送机制将数据更改同步到目标数据库。 服务会努力在几分钟内推送数据,但有些因素可能影响端到端的同步延迟。

影响同步持续时间的因素包括以下几方面:

  • 客户互动应用的当前工作负荷。
  • 客户互动应用中的数据更改率。
  • 添加到每个导出配置文件及其属性的实体数量。
  • SQL Server 的性能。 例如:
    • SQL 连接设置时间。
    • SQL 语句执行时间。

根据我们对服务的监视,观察到当服务在以下条件下运行时,大多数正在进行的增量同步会在 15 分钟内完成:

  • 所发生的同步是增量同步而不是初始同步。 增量同步仅适用于数据更改操作,包括记录创建、更新和删除事务。 请注意,增量同步在初始同步完成后即开始。
  • 在客户互动应用中,导出配置文件中所有实体的最大数据更改速率均少于 3000 条记录/小时。 由于记录批量更改导致数据更改速率的任何突然增加超过最大更改速率,都将导致额外延迟。
  • 添加到导出配置文件的每个实体属性均少于 150 个。
  • 数据库连接或 SQL 语句执行在 10 秒之内完成。 如果超过此限制,将造成额外延迟。
  • 同步期间不会出现目标数据库连接或 SQL 执行错误。

在满足上面条件时,15 分钟是典型的同步延迟。 Microsoft 不为数据导出服务提供服务级别协议 (SLA),且不对同步延迟时间作出保证或承诺。

如何设置 Azure 密钥保管库

作为 Azure 帐户管理员运行此处介绍的 Windows PowerShell 脚本,以便为数据导出服务功能授予权限,使其可访问您的 Azure Key Vault。 此脚本显示创建用于访问连接字符串的导出配置文件所需密钥保管库 URL。

在运行脚本之前,请替换以下变量的占位符。

  • $subscriptionId。 要使用的密钥保管库资源组。 如果资源池尚未存在,将使用您指定的名称新建一个。 在此示例中,使用的是 ContosoResourceGroup1

  • $location。 指定资源组所在位置或应该在的位置,如 West US

  • $connectionString。 Azure SQL 数据库的连接字符串。 可使用 ADO.NET 连接字符串,因为您的 Azure 仪表板中显示该字符串。

  • $organizationIdList = 要允许为数据导出服务启用的组织按组织 ID (organizationId) 排列且以逗号分隔的列表。 要查找组织的 ID,请转到设置>自定义>开发人员资源。 组织 ID 位于环境引用信息下。

  • $tenantId。 指定 Key Vault 订阅的 Azure Active Directory 租户 ID。

重要提示

一个 Azure 订阅可以有多个 Azure Active Directory 租户 ID。 确保选择与将用于数据导出的环境关联的正确 Azure Active Directory 租户 ID。

备注

确保 $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 值。 运行此 SDL 语句之后,需要重新启动“导出配置文件”。

-----------------------------------------------------------------
-- 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 卸载数据导出服务

  1. 导航到高级设置。
  2. 选择设置 > 自定义,然后选择解决方案
  3. 选择 Microsoft Dynamics 365发布的 DataExportService,然后选择删除

找到租户的 Microsoft Entra 租户 ID

  1. 登录到 Azure 门户
  2. Azure 服务下,选择租户属性
  3. 选择租户 ID 字段中的值。

数据导出服务所用 Azure SQL 数据库静态 IP 地址

在 Azure SQL 数据库中,选择设置服务器防火墙,将允许访问 Azure 服务设置为,选择添加客户端 IP,然后添加您的环境的区域的相应 IP 地址。 详细信息:Azure:使用 Azure 门户配置 Azure SQL 数据库服务器级防火墙规则

区域 新 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. 创建启用了“写入删除日志”的导出配置文件。 重新创建未启用“写入删除日志”的现有导出配置文件。

  2. 为在 DeleteLog 表中搜索记录的 Azure SQL 目标数据库创建并执行 SQL 查询。 如果找到一个或多个记录,表示存在删除的记录。

  3. 如果 DeleteLog 表中存在一个或多个记录,则请创建并运行一个 SQL 查询,用于检测符合以下条件的环境:在 DeleteLog 表中找到的记录的记录 ID 与 EntityName 表中记录的记录 ID 匹配,并且 deleteLog 中的 versionNumber 比 EntityName 表中记录的 versionNumber 高。 当记录 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 的大小(尺寸)行”,那么您遇到了超过允许的最大行大小限制的问题。 数据导出服务不支持大于允许的最大行大小 8k 的行大小。 若要缓解此问题,您需要确保遵循行大小限制。

源中字符串的长度长于 ColumnName 的目标架构

如果您的错误日志显示“源中的字符串长度长于 [ColumnName, MaxDataLength] 的目标架构”,那么您遇到了源数据的字符串长度长于目标数据的问题。 如果源数据的字符串长度长于目标数据,写入目标将失败。若要缓解此问题,您需要减小数据大小或在 DB 中手动增加列的长度(大于 MaxLength)。

不支持附件

不支持导出诸如注释表上的文档正文之类的附件。

隐私声明

通过使用“数据导出服务”,当您在 Dynamics 365 内激活数据导出配置文件时,添加到此配置文件的实体的数据将发送至 Azure。 初始同步包含与添加到此导出配置文件的实体关联的所有数据,但之后同步仅包含新更改,这些更新将持续发送至“数据导出服务”。 发送至“数据导出服务”的数据将暂时存储在 Azure 服务总线和 Azure 存储中,在 Azure Service Fabric 中进行处理,最后同步(插入、更新或删除)至在您的 Azure 订阅中指定的目标数据库。 同步数据之后,数据将从 Azure 服务总线和 Azure 存储中删除。 如果数据同步期间出现故障,与实体类型、记录 ID 和同步时间戳对应的最小数据将存储在 Azure 存储中,以允许下载尚未更新的记录的列表。

管理员可以随时停用此数据导出配置文件以停止数据同步。 此外,管理员还可以删除此导出配置文件以删除任何失败的记录日志,并且可以卸载“数据导出服务”解决方案以停止使用“数据导出服务”。

数据同步将以安全方式不断发生在 Dynamics 365 与“数据导出服务”之间。 当数据在 Dynamics 365 和“数据导出服务”之间不断交换时进行加密。

以下章节中详细介绍了“数据导出服务”涉及的 Azure 组件和服务。

Microsoft Azure 信任中心

Azure Service Fabric

这会提供 API 和计算 Azure VM 以处理从 Dynamics 365 接收的记录同步通知,然后进行处理以在目标数据库中插入、更新或删除记录数据。 在由 Azure Service Fabric 运行时托管的虚拟机上部署的微服务可处理与数据同步相关的所有计算服务。

Azure 服务总线

这会提供 Dynamics 365 将同步通知消息插入其中的消息总线,这些消息由 Azure Service Fabric 中的计算节点进行处理。 每条消息都存储要同步其数据的组织 ID 和记录等信息。 Azure 服务总线中的数据是静态加密的,而且只能由数据导出服务访问。

Azure Blob 存储

如果记录同步通知的数据太大而无法存储在消息中,或者在处理同步通知时遇到瞬间失败,则数据将暂时存储在 Azure Blob 存储中。 这些 blob 利用 Azure 存储 SDK 中的最新功能进行加密,此 SDK 提供对称加密和非对称加密支持以及与 Azure Key Vault 的集成。

Azure SQL

Azure SQL 数据库存储数据导出配置文件配置和数据同步指标。

另请参见

实体关系概述
数据导出服务
工作组博客:数据导出服务简介