kcode Asked: 2010-03-25 04:59:51 +0800 CST2010-03-25 04:59:51 +0800 CST 2010-03-25 04:59:51 +0800 CST 以零停机时间移动 SQL-Server 数据库 772 是否可以将 sql server 2005 db 移动到运行 sql server 2008 的不同服务器而无需停机?该系统是 24/7,必须移动到具有不同存储的不同服务器。 我们尝试复制数据库,但这并不能在过程结束时使整个数据库保持同步。 sql-server sql-server-2005 sql-server-2008 high-availability 12 个回答 Voted Nick Kavadias 2010-03-25T15:58:33+08:002010-03-25T15:58:33+08:00 零停机时间 但通过仔细规划,您可以避免停机时间接近于零。 选项1: 设置日志传送 btwn 现有的 2005 和新的 2008 服务器。 仔细计划切换 ip 和/或主机名。 确保在最终切换之前进行最终的尾日志备份。 选项 2(更多的工作,更少的停机时间): 如果您的 2008 盒子是新的,那么首先将 2005 安装到与您的 prod 盒子相同的 sp。 设置数据库镜像,第一阶段异步以避免性能开销。 设置您的客户端以将故障转移伙伴包含在连接字符串中 更改为同步数据库镜像和故障转移到新框 按照“滚动升级步骤”进行 2005-2008 年数据库镜像设置的就地升级 当然,要做到这一点,您需要进行测试并确保您在真正做到这一点时没有错过任何事情:) TomTom 2010-03-25T05:02:36+08:002010-03-25T05:02:36+08:00 不,对不起。我没有看到没有任何停机时间来移动数据库的方法。在复活节假期期间,您甚至无法在一个小时内放入数据库中的哪些内容? Guy 2010-03-25T06:00:45+08:002010-03-25T06:00:45+08:00 一种非常复杂的方式来做到这一点......(几乎) 将服务器 P2V 到 vmware 集群上。没有停机时间。 创建第二个服务器并创建一个主动/被动集群。 将被动节点升级到 2008 并进行故障转移。 利润? 显然,这里的一切都需要测试,还有很多详细的步骤被遗漏了。 或 - 让管理层同意停机,并提前向您的客户宣传。那就练习和测试升级到死吧! 向管理层解释试图做到“便宜”的技术困难。当你第一次构建一个完整的 27x7 架构时,这是你构建到一个系统中的东西。 即使是最大的系统也计划停机。这是您需要担心的更多意外停机时间。 jawrat 2010-03-25T10:04:26+08:002010-03-25T10:04:26+08:00 事务复制是你的朋友…… 如果您使用新服务器作为从服务器设置复制,您应该能够启动并运行新数据库,然后当您准备好时,切换(这里的停机时间最少,我们正在谈论的分钟,而不是几个小时)。 ..您可能需要重新索引一个或三个表,但一旦完成,它就完成了。 Chris W 2010-03-25T05:13:03+08:002010-03-25T05:13:03+08:00 恐怕你不会单独使用 SQL Server 来实现这一点。我过去使用过一个名为 Double Take 的产品,它允许您将数据库克隆到另一台服务器,然后在方便时进行故障转移。 当服务在新机器上启动时,故障转移过程仍会导致一些停机时间。 Malnizzle 2010-03-25T05:15:35+08:002010-03-25T05:15:35+08:00 如果现在只是单个实例/非集群设置,您将无法在不丢失数据的情况下实现 0% 停机时间。如果数据库主要是重读,最好丢失几个写操作,然后关闭数据库,那么您可能有一些选择。 您可以对数据库进行 COPY_ONLY 完整备份,然后在完成后将 bak 文件移至新的服务器存储。将数据库还原到新的 SQL 实例,并在适用的地方重新编写连接字符串(希望它只是某个地方的一个 inc 文件),然后重新启动您的站点。您将在站点上遇到故障,并且活动会话将重新启动。 然而。您将丢失备份和恢复之间的所有写入。 tvanzele 2010-03-25T06:25:09+08:002010-03-25T06:25:09+08:00 您可以尝试使用数据库镜像解决方案以最少的停机时间(故障转移几秒钟)来实现这一点。您可以查看这篇 MSDN 文章了解更多信息:http: //msdn.microsoft.com/en-us/library/bb677181.aspx 汤姆 Jason Cumberland 2010-03-25T09:37:04+08:002010-03-25T09:37:04+08:00 如果您使用 .NET 解决方案作为使用 2.0 框架的应用程序服务器,那么 tvanzele 的建议应该可以正常工作。以下步骤: 确保您的主数据库处于完全恢复模式并且您正在进行日志备份 安装 SQLEXPRESS 或标准版 SQL 实例作为见证服务器 备份和恢复完整备份和日志备份到新实例(不是见证) 设置数据库镜像到新的 SQL 实例并使用 SQLEXPRESS/Standard 实例作为见证 更改应用程序中的连接字符串以识别故障转移服务器,请参阅 connectionstrings.com 以获取参考 通过重新启动旧实例将数据库故障转移到镜像 将应用程序的连接字符串更改为仅使用故障转移实例 中断镜像 SuperCoolMoss 2010-05-09T06:08:02+08:002010-05-09T06:08:02+08:00 您可以考虑在两个环境之间为数据库设置同步镜像。同步后,数据库可以进行故障转移(或恢复),只需中断任何正在进行的事务。 http://sqlserverpedia.com/blog/sql-server-2008/cutover-30-gb-databases-in-60-seconds-with-sql-server-20052008/ MadBoy 2010-05-09T06:13:43+08:002010-05-09T06:13:43+08:00 我建议你使用Redgate软件来做。SQL Compare将帮助您在其他服务器的新创建的数据库中重新创建完全相同的结构。然后你使用SQL Compare Data它为你创建“复制”脚本并执行它(或保存以备后用)。奇迹般有效。我用它在产品/开发数据库之间复制东西。 这很好,因为你可以做Sql Data Compare一次。然后当它移动一些数据(并且新数据到达旧数据库)时,您可以再次重新运行它,这样它只会在几秒钟内同步差异。 使用 SQL Data Compare Pro,您可以将 SQL Server 实时数据库与备份进行比较和同步,比较两个备份或在源代码控制下使用 SQL 脚本文件夹。使用命令行界面,您可以自动执行任务并安排比较,以便轻松编译审计跟踪。 Redgate SQL Toolbelt永远是你的朋友(我与 Redgate 没有任何关系):p 作为旁注。由于数据非常大,我建议使用 SQL 数据比较来分块使用(每个副本有几个表)。然后稍后在最终同步时同步复制期间发生的任何差异(即使花费了 3 个小时,它也只需要同步数百行左右)。
零停机时间 但通过仔细规划,您可以避免停机时间接近于零。
选项1:
选项 2(更多的工作,更少的停机时间):
当然,要做到这一点,您需要进行测试并确保您在真正做到这一点时没有错过任何事情:)
不,对不起。我没有看到没有任何停机时间来移动数据库的方法。在复活节假期期间,您甚至无法在一个小时内放入数据库中的哪些内容?
一种非常复杂的方式来做到这一点......(几乎)
显然,这里的一切都需要测试,还有很多详细的步骤被遗漏了。
或 - 让管理层同意停机,并提前向您的客户宣传。那就练习和测试升级到死吧!
向管理层解释试图做到“便宜”的技术困难。当你第一次构建一个完整的 27x7 架构时,这是你构建到一个系统中的东西。
即使是最大的系统也计划停机。这是您需要担心的更多意外停机时间。
事务复制是你的朋友……
如果您使用新服务器作为从服务器设置复制,您应该能够启动并运行新数据库,然后当您准备好时,切换(这里的停机时间最少,我们正在谈论的分钟,而不是几个小时)。 ..您可能需要重新索引一个或三个表,但一旦完成,它就完成了。
恐怕你不会单独使用 SQL Server 来实现这一点。我过去使用过一个名为 Double Take 的产品,它允许您将数据库克隆到另一台服务器,然后在方便时进行故障转移。
当服务在新机器上启动时,故障转移过程仍会导致一些停机时间。
如果现在只是单个实例/非集群设置,您将无法在不丢失数据的情况下实现 0% 停机时间。如果数据库主要是重读,最好丢失几个写操作,然后关闭数据库,那么您可能有一些选择。
您可以对数据库进行 COPY_ONLY 完整备份,然后在完成后将 bak 文件移至新的服务器存储。将数据库还原到新的 SQL 实例,并在适用的地方重新编写连接字符串(希望它只是某个地方的一个 inc 文件),然后重新启动您的站点。您将在站点上遇到故障,并且活动会话将重新启动。
然而。您将丢失备份和恢复之间的所有写入。
您可以尝试使用数据库镜像解决方案以最少的停机时间(故障转移几秒钟)来实现这一点。您可以查看这篇 MSDN 文章了解更多信息:http: //msdn.microsoft.com/en-us/library/bb677181.aspx
汤姆
如果您使用 .NET 解决方案作为使用 2.0 框架的应用程序服务器,那么 tvanzele 的建议应该可以正常工作。以下步骤:
您可以考虑在两个环境之间为数据库设置同步镜像。同步后,数据库可以进行故障转移(或恢复),只需中断任何正在进行的事务。
http://sqlserverpedia.com/blog/sql-server-2008/cutover-30-gb-databases-in-60-seconds-with-sql-server-20052008/
我建议你使用Redgate软件来做。
SQL Compare
将帮助您在其他服务器的新创建的数据库中重新创建完全相同的结构。然后你使用SQL Compare Data
它为你创建“复制”脚本并执行它(或保存以备后用)。奇迹般有效。我用它在产品/开发数据库之间复制东西。这很好,因为你可以做
Sql Data Compare
一次。然后当它移动一些数据(并且新数据到达旧数据库)时,您可以再次重新运行它,这样它只会在几秒钟内同步差异。Redgate SQL Toolbelt永远是你的朋友(我与 Redgate 没有任何关系):p
作为旁注。由于数据非常大,我建议使用 SQL 数据比较来分块使用(每个副本有几个表)。然后稍后在最终同步时同步复制期间发生的任何差异(即使花费了 3 个小时,它也只需要同步数百行左右)。