在SQL Server之间移动数据的最佳方法

时间:2014-10-02 10:42:25

标签: sql-server data-transfer

好的,让我解释一下我们在这里面临的环境:

我们有一个使用SQL Server数据库的ASP.NET MVC 4应用程序。

此应用程序隔离了“项目”中的数据,因此当任何用户连接到它时,只能处理其中一个项目的数据。

有时......一群用户必须前往偏远地区几天才能检索单个项目的数据,而且他们往往无法连接互联网(即使是移动或卫星解决方案通常也是如此)遥不可及。)

虽然流离失所的团队在一个项目上工作,但办公室的人仍然可以在其他项目上工作(但不在国外的项目上)。

所以...我们正在考虑使用笔记本电脑充当“移动服务器”的可能性,用户可以在旅行前从特定项目下载数据。在国外,他们可以对抗这个“移动服务器”,更新他们项目的任何数据,当他们回来时,他们可以将更新的数据上传到主服务器。

我们的想法是在服务器(主服务器和移动服务器)上创建存储过程,执行不同的查询以更新项目之间的项目数据,并将项目标识符作为参数传递。可能使用Linked servers允许主要和移动设备在更新操作期间看到自己。

我们的问题是:

  • 这是一个很好的方法吗?

  • 我们还没有看到其他更好的方法吗?

  • 在这种或其他方法中我们应该注意哪些风险?

1 个答案:

答案 0 :(得分:1)

我从未使用过双向事务复制,所以如果这对您有用,问题就解决了。我确实有很多数据迁移经验,包括将大数据集合并到软件驱动系统中。从这种经验来看,复制对我们的伤害超过了它对我们的帮助(从迁移/合并视图)。

我认为最大的挑战是解决冲突。我知道你说所有数据都在项目特定的数据库中,但根本没有共享数据?多个远程用户更新相同数据怎么样?在这种情况下,您需要的不仅仅是复制。

不是一直维护两个数据库(一个用于移动数据库,一个用作常规内部数据库),为什么不在系统中向主系统调用作业,指示项目需要为&#做好准备? 34;离线模式" (作业可以是存储过程或SSIS包或直接T-SQL)。无论使用何种技术,此作业都会将所有请求的项目数据复制到远程服务器/笔记本电脑上的新数据库,并在主数据库中以只读方式将其标记为只读,以防止办公室中的用户更新该数据。

一旦远程服务器上的数据处于脱机模式,用户就可以根据需要从该远程服务器更新和使用数据。然后,当用户获得互联网连接或他们回到办公室时,他们可以启动另一个将数据同步到主服务器的作业,删除离线模式,以及删除/存档远程数据库。几乎像一个临时项目数据库。

说真的,这听起来像个有趣的项目。

要看的技术: SSIS(Sql Server Integration Services) - 根据我的经验,这在移动数据方面非常快,并且允许您添加逻辑来处理冲突解决,错误逻辑等。它是免费的(使用某些Sql Server版本)社区是巨大的,所以支持它应该很容易。 SSIS不像那里的一些专业解决方案那样动态。

像Pervasive的Data Integrator这样的数据迁移套件 - 我很喜欢这个,但它很昂贵。您可以在此产品中找到可以双向处理数据的整个解决方案,就像SSIS一样,它允许复杂的编程逻辑。

T-SQL - 使用链接服务器,您可以直接编写查询(如果需要,可以使用存储过程)。这里的问题是链接服务器上的安全性。由于这个问题,我们不会使用它们。 Linked Servers: Good or Bad?

立即开始使用微软内置的一些变更检测技术。当您使用该系统时,实施起来比较困难。更改数据捕获(CDC)将为您提供已更新记录的完整历史记录,而更改跟踪将为您提供轻量级更改摘要。使用任何一种技术都可以使数据同步更容易。

更改跟踪:http://msdn.microsoft.com/en-us/library/bb933874.aspx 更改数据捕获:http://msdn.microsoft.com/en-us/library/cc645937.aspx SSIS:http://msdn.microsoft.com/en-us/library/ms169917.aspx SQL Server代理作业:http://msdn.microsoft.com/en-us/library/ms189237.aspx