在网络上以最低停机时间迁移大型SQL Server数据库的最佳方法是什么?

问题定义
我们的数据库服务器需要迁移到另一个数据中心。它运行在Microsoft SQL Server 2012 Enterprise (64-bit)上,包含两个约为2TB和1TB的数据库。
希望在此过程中尽量减少停机时间。
工作负载
这些数据库用于一个.NET网站,并且会不断更新。
虽然在周末期间不可用是可以接受的。目前正在使用的数据库将保持唯一的使用状态,直到切换到新的数据库。
理想情况下,只需通过更改DNS条目指向新的数据库服务器来进行切换,同时确保数据库不会被更新。
此操作所花费的时间并不重要,只要从一个服务器切换到另一个服务器(停机时间)保持较低即可。
考虑的方法
备份和恢复 过去已经做过这个,但即使是通过内部网络进行,也会导致较长的停机时间,所以比起通过互联网更有效率。
日志传送 据我了解,这种方法可以通过配置主/从关系来最小化停机时间,并将主数据库的完全副本传输到只读的从数据库。如上所述,不需要访问从数据库,我们只需要一个主数据库的副本而不会出现数据损坏。
从资源利用的角度来看,这种方法似乎相当高效,对主数据库的性能影响也不大。 如果我对这种方法有误解,请随时纠正我。
数据库镜像 我对这种方法不太了解,但它似乎是一个有效的选择。不需要实时同步,而且主数据库的性能非常重要,所以如果选择这种方法,异步传输将是可行的方式。
其他选项? 该服务器直接运行在裸金属硬件上,因此低级别的解决方案不可行。也许有更好的方法来完成这个任务?
限制条件
那些数据库相当庞大,以至于很难维护,但这是另一个问题。
SQL Server的版本将保持一致(Microsoft SQL Server 2012 Enterprise 64-bit)。
它将在两个数据中心之间通过网络传输,最有可能是通过互联网。不幸的是,无法选择从一个站点发送磁盘到另一个站点进行初始同步。对于传输进行某种形式的安全保护将是理想的,但我们将尽力处理这种情况。
这应该相当清楚地概述了我们对这项任务的需求,希望你们中的一些人之前也曾面对过这种情况。
2个回答

直接备份和还原显然不可行。我也不考虑任何类型的复制。
数据库镜像相对简单,但需要两个服务器之间的实时连接,设置伙伴和端点等。可用性组可能是一种选择,但在网络复杂性之上,您还必须使两个服务器成为同一WSFC的成员 - 这意味着它们必须属于同一个域。这不是数据中心移动的典型设置(甚至可以暂时工作)。
我的选择是日志传送。好处是,您可以使用已经进行的备份和日志备份(对吧?),并且两个数据库之间不一定需要实时连接 - 它们不需要知道彼此,您无需为镜像设置端点、伙伴、安全性等。您只需要找到一种方法,将文件从旧服务器传输到可以在新服务器上恢复的位置。您可以提前完整备份,将其传输到新服务器,还原它,然后从那个时间点开始应用(可能是差异和)增量日志备份,直到切换时刻。该过程实际上非常简单,并且如果遇到任何困难,有许多关于日志传送的教程可供参考。
如果Web应用程序与数据库一起迁移,由于DNS可能需要一段时间才能传播,您可能希望在旧应用程序的连接字符串中进行切换,使其指向新数据库服务器的IP地址(一旦可写),因为即使在切换之后,即使您的TTL设置很紧密,客户端仍可能继续访问旧的Web服务器。这完全取决于他们的服务提供商对您的TTL设置给予多少尊重。

我最近使用镜像技术在6个数据库之间迁移了15TB的数据。非常简单,完美地运行,只需要几秒钟的故障转移时间。
编辑:
我有两个新的虚拟化SQL服务器。这些数据库来自于3台已经无法满足需求的服务器,并且对托管在它们上面的较小数据库的性能产生了影响。
整个过程非常简单。
1. 等待周末全量备份完成。 2. 在新服务器上进行无恢复还原。 3. 当这些还原操作完成后,暂停备份。 4. 从原始服务器上再次进行还原,直到最新的日志备份,保持无恢复状态。 5. 在所有六个服务器之间启动镜像。 6. 恢复备份操作。 7. 我选择将它们保持异步模式,直到我们准备好进行故障转移,以减轻网络负载等。镜像在维护(索引/统计信息)和其他高负载活动期间可能会导致延迟,但我没有发现这种情况。在手动故障转移之前,必须将它们切换到同步模式。
在接下来的维护窗口期间,我手动将每个数据库进行故障转移,在进行了一些烟雾测试后,关闭了镜像并最终从原始服务器中删除了旧的数据文件。在这个过程中有一个小问题,就是故障转移后,原来的主数据库会处于恢复状态,所以除非你愿意直接删除它们,否则你需要将它们重新联机,然后进行分离,或者使用你偏好的删除方法。另外,我没有为任何镜像数据库配置见证,因为我不希望自动故障转移。这是一个可控的事件。
如果您需要更多详细信息,请告诉我。我没有提供服务器和网络规格,但如果您需要,我可以提供。
谢谢。

@jitbit - 我删除了你的评论,因为它对帖子没有帮助,也没有纠正错误。如果你认为在这种情况下不应该使用数据库镜像,请提供一个答案,详细说明如何在问题的限制条件下完成迁移。 - Hannah Vernon