从MS Dynamics CRM中提取数据时如何获得快照一致性?

时间:2013-12-22 11:56:14

标签: dynamics-crm-2011

我一直在研究如何从MS Dynamics CRM 2011/3 Online实例中提取数据,以便我可以在目标数据库中复制整个CRM实体。

我查看了组织Web服务的Retrieve和RetrieveAll操作。这些能够从单个CRM实体(实体类型)中提取数据。

还有可以从多个实体使用复杂查询检索数据的FetchXML接口。

当用户或通过Web服务没有进行数据更改时,我可以使用从系统中提取数据以获得一致的数据快照。

如果我能够直接访问SQL Server数据库,我将能够为事务设置隔离级别并提取该事务中的所有数据,并获得一致的数据视图。

我认为FetchXML会给我一个一致的快照,但只会给每次调用查询的数据。

我可以使用FetchXML在一次调用中查询我想要复制的所有实体,然后在我的目标数据库上使用一些ETL代码重新规范化数据。那个查询虽然不太好(复杂且可能性能不高,影响系统性能)。

所以,基本上我的问题是这样的:如果我依次从每个实体中提取,并且数据库在我提取时正在改变,我非常希望在我的目标数据库中获得不一致的数据集。

如何获取要访问的数据的一致快照?

1 个答案:

答案 0 :(得分:1)

您可以通过支持门户联系支持并请求数据库备份。然后,您可以通过Deployment Manager将该数据库还原到On-Premise安装。

修改

在下面的评论之后,我建议使用“推送”模式而不是“拉”模型。您需要在您对CRM Online感兴趣的所有实体上创建用于创建/更新/删除的插件。这些插件会将这些更新推送到您的数据库(可能通过您自己的Web服务)。由于这些插件发生在事务中,如果您的Web服务抛出错误,您可以取消CRM中的源操作,从而保证事务的一致性。

一旦你启动并运行这些插件,你就可以进行一次性导出,你的插件将从那里保持最新。