![在系统和 SQL Server 版本之间移动 SQL Server 数据库的最快方法?](https://linux22.com/image/519200/%E5%9C%A8%E7%B3%BB%E7%BB%9F%E5%92%8C%20SQL%20Server%20%E7%89%88%E6%9C%AC%E4%B9%8B%E9%97%B4%E7%A7%BB%E5%8A%A8%20SQL%20Server%20%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E6%9C%80%E5%BF%AB%E6%96%B9%E6%B3%95%EF%BC%9F.png)
我们正在将重要的 SQL Server 数据库 [65Gib] 移动到新服务器。
此外,我们正在从 SQL Server 2005 迁移到 SQL Server 2008 R2,理想情况下需要花一些时间执行 ALTER 操作以将各种表移动到不同的文件组中。
传统的刀法如下:
- 旧服务器宕机
- 复制数据库文件(刚刚意识到我必须找到其他方法复制来自 masterdb 的用户登录)
- 通过 GigE 将它们复制到新的 DB
- 将数据库导入新服务器并允许任何升级处理。
- 完成 ALTER
- 启用新服务器
我希望尽可能多地预加载传输;有没有一种好的 [简单] 方法来复制数据库的实时版本并继续更新目标服务器,直到所有准备工作完成?我想到我可以使用复制,但我不知道是否可以将复制从服务器提升为主服务器...
或者我尝试同时切换服务器和软件版本是否犯了一个错误?
答案1
65 GB 确实微不足道,但如果通过速度较慢的 LAN 进行复制,或者如果您无法承受几分钟的停机时间,那么可能就无法超过了。
切换的最快方法(并保持简单)是在现有数据库和您的新的D b。
您应该能够在切换之前复制登录名和代理作业,并保持它们处于禁用状态,直到您将实时流量移过去为止。
同时切换服务器和 SQL Server 版本并不是一个错误,这取决于您的要求。请记住,在 SQL Server 2008 R2 上使数据库联机是一个单向过程,它将在数据库第一次进行恢复时升级数据文件并且无法恢复!
您的另一个不那么简单的选择是执行以下操作:
- 在新服务器上,安装与现有服务器相同版本的 SQL Server
- 在现有服务器和新服务器之间设置数据库镜像
- 在复制登录名/代理作业/其他依赖项时做相同的准备
- 将镜像故障转移到新服务器,使其成为主服务器(假设您的应用程序支持这样做)
- 将现有服务器更新到 2008 r2,然后故障恢复镜像 将新服务器升级到 2008 r2,然后再次故障转移 删除镜像,关闭旧服务器
上述方法可能有很多变体。这个故事的寓意是,您必须考虑切换成本与停机成本。这是一种权衡。
答案2
您可以将数据库从旧服务器分离,复制物理文件并将其附加到新服务器;它会很乐意附加到不同的 SQL Server 版本,如果您已经转移了登录信息(使用建议的方法之一),一切都会立即起作用。
在传输之前进行完整的数据库备份和日志备份(并可选择缩小数据库)将有助于减少要复制的文件的大小。
答案3
本文包含一些使登录传输变得非常容易的存储过程。
http://support.microsoft.com/kb/918992
它还维护登录的原始 sid,因此您的数据库用户不需要 sp_change_users_login 将新登录的 sid 与用户数据库中存储的 sid 进行匹配。
答案4
数据库镜像将适用于不同版本的 SQL。我通过使用数据库镜像并提前迁移登录名,完全按照您的尝试操作。问题是您必须使用 t-sql 设置数据库镜像,gui 不会接受它,而且您无法返回,因此在您想要切换、故障转移镜像之前对您的数据库进行完整备份,执行 sp_change_users_logins 'Update_One' 'user' 'user' 以将您的新登录名与数据库中现有的用户同步,您就大功告成了。任何规模的数据库迁移都在 10 秒内完成。如果您已编写好脚本,则时间会更短。