【问题标题】:Best approach to move data between SQL Servers在 SQL Server 之间移动数据的最佳方法
【发布时间】:2014-10-02 10:42:24
【问题描述】:

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

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

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

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

当被调职的团队从事一个项目时,办公室的人仍然可以从事其余的项目(但不能在国外的项目上工作)。

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

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

我们的问题是:

  • 这是一个好的方法吗?

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

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

【问题讨论】:

  • Linked servers 很好,很好
  • 你可能想看看复制
  • @HLGEM 复制确实很有希望。我必须对此进行更多研究。有什么好的资源可以推荐给我吗?
  • 我不是 dba,所以我从来没有设置过复制,我只知道它的存在以及它的作用。您可能会考虑您想询问的内容并在 dba 网站上询问

标签: sql-server data-transfer


【解决方案1】:

我从未使用过双向事务复制,所以如果这对您有用,问题就解决了。我在数据迁移方面确实有相当多的经验,包括将大型数据集合并到软件驱动的系统中。从那次经验来看,复制对我们的伤害大于对我们的帮助(从迁移/合并的角度来看)。

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

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

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

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

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

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

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

立即开始使用 Microsoft 的一些内置变更检测技术。当您已经在使用该系统时,实施起来会更加困难。变更数据捕获 (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

【讨论】:

  • 感谢您的深入回应。我还在考虑选项。到目前为止,复制看起来与我们正在寻找的完全一样,但是那里的 cmets 使用它非常令人沮丧。正如您评论的那样,存在共享数据,但主要位于不会复制的主表上(用户无法修改它们)。只有一张表包含通过项目共享的实际可编辑数据。我认为复制问题可能来自那里,尽管我认为实际冲突应该非常罕见。
  • 第一个复制测试很有希望,如果我们没有发现任何缺点,我们似乎正在这样做。
猜你喜欢
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-21
  • 2010-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多