将Microsoft Dynamics 365 (online) 数据复制到 Microsoft Azure SQL 数据库

 

发布日期: 2017年2月

适用于: Dynamics 365 (online),Dynamics CRM Online

备注

此处提供的信息适用于低于 Dynamics 365(在线)版本 9.0 的 Dynamics 365 版本。 有关最新文档,请参阅将数据复制到 Azure SQL 数据库

Microsoft Dynamics 365-数据导出服务 是一项在 Microsoft AppSource 中提供的加载项服务,用于增加将 Microsoft Dynamics 365 (online) 数据添加到客户拥有的 Microsoft Azure 订阅中的 Microsoft Azure SQL 数据库 存储的功能。 支持的目标为 Microsoft Azure 虚拟机上的 Microsoft Azure SQL 数据库 和 SQL Server。数据导出服务 最初智能同步所有 Dynamics 365 数据,然后以连续为基础在 Microsoft Dynamics 365 (online) 中出现变化时同步(增量更改)。 这有助于基于 Dynamics 365 数据和 Azure 数据和分析服务实现多个分析和报告方案,并为客户和合作伙伴开启构建自定义解决方案的新可能。

备注

您可以将 数据导出服务 与以下项目结合使用:

  • Microsoft Dynamics 365 (online)

  • Microsoft Dynamics CRM Online 2016 更新

有关用于管理 数据导出服务 的配置和管理的编程接口的信息,请参阅 MSDN:数据导出服务

本主题内容

数据导出服务 的使用先决条件

所需的服务、凭据和权限

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

导出配置文件

创建导出配置文件

修改现有导出配置文件

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

解决同步问题

错误处理和监视

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

关于数据同步延迟

如何设置 Azure 密钥保管库

已知问题和限制

数据导出服务 的使用先决条件

若要开始使用 数据导出服务,需要满足以下先决条件。

Azure SQL 数据库服务

  • 拥有 Azure SQL 数据库 订阅的客户。 此订阅必须允许同步的数据量。

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

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

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

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

    需要数据库权限。

    权限类型代码

    权限名称

    CRTB

    创建表

    CRTY

    创建类型

    CRVW

    创建视图

    CRPR

    创建流程

    ALUS

    更改任何用户

    VWDS

    查看数据库状态

    需要架构权限。

    权限类型代码

    权限名称

    AL

    更改

    IN

    插入

    DL

    Delete

    SL

    选择

    UP

    更新

    EX

    执行

    RF

    引用

Azure 密钥保管库服务

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

  • 为 ID 为“b861dbcc-a7ef-4219-a005-0e4de4ea7dcf”的应用程序授予 PermissionsToSecrets 权限。 方法是运行下面的 AzurePowerShell 命令,该命令用于访问包含连接字符串密钥的 密钥保管库。详细信息:如何设置 Azure 密钥保管库

  • 密钥保管库应该带有 Microsoft Dynamics 365 组织 (OrgId) 和租户 ID (TenantId) 标记。 方法是运行下面的 AzurePowerShell 命令。详细信息:如何设置 Azure 密钥保管库

Microsoft Dynamics 365 (online)

  • Microsoft Dynamics CRM Online 2016 更新 更高版本实体。

  • 必须安装 数据导出服务 解决方案。 现在可从 Microsoft AppSource 获取。

  • 添加到 导出配置文件 的实体必须通过更改跟踪启用。 若要确保可以同步标准或自定义实体,转到自定义 > 自定义系统,然后单击实体。 在“常规”选项卡上,确保启用了“数据服务”部分下的“更改跟踪”选项。

  • 您必须拥有 Microsoft Dynamics 365 (online) 的实例中的系统管理员安全角色。

Web 浏览器。

在 Web 浏览器中为域 https://discovery.crmreplication.azure.net/ 启用弹出窗口。 导航到“设置”>“数据导出”时,自动登录需要此设置。

所需的服务、凭据和权限

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

  • Microsoft Dynamics 365 (online) 订阅。 只有分配了 Microsoft Dynamics 365 系统管理员安全角色的用户才能设置 导出配置文件 或对其进行更改。

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

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

    • Azure 密钥保管库。

重要

若要使用 数据导出服务,Microsoft Dynamics 365 (online) 和 Azure 密钥保管库 服务必须在同一租户和同一 Microsoft Azure Active Directory 下运行。详细信息:Azure 与 Office 365 的集成

Azure SQL 数据库 服务可以处于与 Microsoft Dynamics 365 (online) 服务相同或不同的租户。

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

  • 只要对 Microsoft Dynamics 365 (online) 实例执行以下任何操作,都必须删除导出配置文件并重新创建。

    • 还原实例。

    • 复制(完整或最低)实例。

    • 重置实例。

    • 将实例移动到其他国家或地区。

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

  • 数据导出服务 不对配置为打开启动管理模式的 Microsoft Dynamics 365 (online) 沙盒实例起工作。详细信息:管理模式

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

    • 在 Microsoft Dynamics 365 (online) 中删除实体。

    • 在 Microsoft Dynamics 365 (online) 中删除字段。

    • 从 导出配置文件 删除实体。

    必须手动删除这些项。如何删除特定实体的数据导出配置文件表和存储过程

    元数据删除通知记录在 unprocessablemessages 文件夹中。错误处理和监视

导出配置文件

为了从 Microsoft Dynamics 365 (online) 导出数据,Microsoft Dynamics 365 (online) 管理员创建一个 导出配置文件。 可以创建并激活多个配置文件,以便将数据同时同步到多个目标数据库。

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

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

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

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

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

类别

功能

支持的数据类型

初始同步

元数据 - 基本数据类型

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。

创建导出配置文件

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

  • 数据导出服务 解决方案安装在 Microsoft Dynamics 365 (online) 实例中。

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

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

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

  • 您是 Microsoft Dynamics 365 (online) 实例中的系统管理员。

  1. 在 Microsoft Dynamics 365 (online) 中,转到“设置”>“数据导出”。

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

  3. 单击“新建”创建新 导出配置文件。

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

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

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

      重要

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

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

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

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

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

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

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

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

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

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

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

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

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

修改现有导出配置文件

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

  1. 在 Microsoft Dynamics 365(在线)中,转到“设置”>“数据导出”。

  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. 登录到您的 Microsoft Dynamics 365 (online) 实例并转到设置 > 数据导出

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

    3. 在导出配置文件工具栏上,单击重新同步失败记录

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

      成功重新同步的通知

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

      表示失败的记录为零

  4. 如果按照之前的步骤,在尝试重新同步后仍然出现记录同步失败,则放弃目标数据库中的表、类型和存储过程,然后删除实体,并将其添加回导出配置文件。

    1. 删除目标 Azure SQL 数据库中的关联数据库对象。 例如,如果一直遇到潜在顾客实体同步问题,请从目标 Azure SQL 数据库中删除潜在顾客表、类型和存储过程。详细信息:如何删除特定实体的数据导出配置文件表和存储过程

    2. 从导出配置文件中删除实体,如潜在顾客实体。详细信息:修改现有导出配置文件

    3. 将实体(如潜在顾客实体)添加回导出配置文件,然后激活该配置文件。

错误处理和监视

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

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

在 导出配置文件 中,可以单击“属性和概述”显示配置文件的属性。 单击“关系”查看关系同步状态。

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

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

  1. 在 Dynamics 365 中,转到“设置”>“数据导出”。

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

    失败通知

  3. 在“操作”工具栏上,单击“失败记录”。

    “失败记录”工具栏按钮

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

    “下载失败记录”对话框

    备注

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

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

  6. 在 Microsoft Azure 存储资源管理器中,单击“连接到 Azure 存储”。

  7. 将 URL 从剪贴板粘贴到“连接到 Azure 存储”框中,然后单击“下一步”。

    存储 url

  8. 在“连接摘要”页面中,单击“连接”。

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

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

失败记录 Azure Blob 存储 URL 指向具有以下文件夹结构的位置:

  • data. 此文件夹包含失败数据通知以及记录数据的相关 JSON。

  • metadata. 此文件夹包含失败元数据通知以及元数据的相关 JSON。

  • failurelog. 此文件夹包含提供有关同步失败以及失败原因的信息的日志。

  • forcerefreshfailurelog。 此文件夹包含上次运行用于重新同步失败记录的数据导出服务失败记录命令的错误。

  • unprocessablemessages。 此文件夹包含由于数据或元数据或相关 JSON 删除而未处理的数据通知。

failurelog 和 forcerefreshfailurelog 文件夹的结构为\\\小时,这样您可以迅速找到最近的失败。 将删除所有超过 30 天的失败记录。

下面是一个示例日志文件,该日志文件指示一个联系人实体记录同步失败。

实体: 联系人, RecordId: 459d1d3e-7cc8-e611-80f7-5065f38bf1c1, NotificationTime: 12/28/2016 12:32:39 AM, ChangeType: 更新, FailureReason: 数据库“tempdb”已达到其大小配额。 分区或删除数据,删除索引,或参阅文档以了解可行解决方法。 已终止语句。

记录同步失败的常见原因

这里是可能出现记录同步失败的一些原因。

  • 目标数据库没有足够的存储空间。 在您尝试重新同步失败记录之前,应相应增加或释放 Azure SQL 数据库存储空间。 当出现此问题时,类似消息记录到失败日志中。

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

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

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

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

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

关于数据同步延迟

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

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

  • Dynamics 365 上的当前工作负载。

  • Dynamics 365 中的数据更改速率。

  • 添加到每个导出配置文件及其属性的实体数量。

  • SQL Server 性能。 例如:

    • SQL 连接设置时间。

    • SQL 语句执行时间。

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

  • 所发生的同步是增量同步而不是初始同步。 增量同步仅适用于数据更改操作,包括记录创建、更新和删除事务。 请注意,增量同步在初始同步完成后即开始。

  • 在 Dynamics 365 中,导出配置文件中所有实体的最大数据更改速率均少于 3000 条记录/小时。 由于记录批量更改导致数据更改速率的任何突然增加超过最大更改速率,都将导致额外延迟。

  • 添加到导出配置文件的每个实体属性均少于 150 个。

  • 数据库连接或 SQL 语句执行在 10 秒之内完成。 如果超过此限制,将造成额外延迟。

  • 同步期间不会出现目标数据库连接或 SQL 执行错误。

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

如何设置 Azure 密钥保管库

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

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

  • $subscriptionId。Azure 订阅 ID。 运行 Login-AzureRmAccount 命令时,显示订阅 ID。

  • $keyvaultName。 为现有或新 密钥保管库 选择名称。 此名称用于引用 密钥保管库。 在此示例中,使用的是 ContosoKeyVault。 您将把此名称用于其他 密钥保管库 cmdlet。

  • $secretName。 指定用于软件保护的 密钥保管库 密钥的名称。 如果保护的密钥不存在,将使用指定的密钥名称创建。 在此示例中,使用的是 ContosoDataExportSecret

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

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

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

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

  • $tenantId。 指定 Microsoft Dynamics 365 实例关联的 Azure Active Directory 租户 ID。 更多信息:找到您的 Dynamics 365 实例的 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.
$secretVaule = ConvertTo-SecureString $connectionString -AsPlainText -Force
$secret = Set-AzureKeyVaultSecret -VaultName $keyvaultName -Name $secretName -SecretValue $secretVaule -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 值。

  • 运行此 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;

找到您的 Dynamics 365 实例的 Azure Active Directory 租户 ID

  1. 登录 Azure 门户

  2. 转到“Azure Active Directory”>“应用注册”>“终结点”。

  3. 租户 ID 在随 Azure 订阅列出的终结点 URL 中显示。

重要

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

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

在 Azure SQL 数据库 中,单击“设置服务器防火墙”,将“允许访问 Azure 服务”设置为“开”,单击“添加客户端 IP”,然后添加您的 Azure SQL 数据库 的区域的相应 IP 地址。详细信息:Microsoft Azure:使用 Azure 门户配置 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. 创建启用了“写入删除日志”的导出配置文件。 重新创建未启用“写入删除日志”的现有导出配置文件。

  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 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)

不支持数据导出的实体

此处列出的实体尽管支持更改跟踪,但不支持使用 数据导出服务 导出数据。

实体

表名称

解决办法

活动

ActivityPointerBase

为导出选择具体活动实体,如“电话联络”、“约会”、“电子邮件”和“任务”。

隐私声明

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

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

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

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

注意:有关其他 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 Storage SDK 中的最新功能进行加密,此 SDK 提供同步和异步加密支持以及与 Azure 密钥保管库 的集成。

Azure SQL

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

另请参阅

AppSource:Microsoft Dynamics 365 - 数据导出服务
Dynamics 365 ‒ 数据导出服务有哪些新增功能?
管理您的数据
MSDN:数据导出服务
工作组博客:Dynamics 365 简介 – 数据导出服务

© 2017 Microsoft。 保留所有权利。 版权