我每晚都会将 SQL 备份从服务器 A 复制到服务器 B。
我们希望将 SQL 服务器从服务器 A 移动到服务器 B,并且不需要太多的停机时间,但是文件非常大。
我认为执行差异备份和恢复可以解决数据库的问题。
- 将完整备份从服务器 A 复制到服务器 B (10+gb)
- 在服务器 B 上打开 SQL Server Managment Studio
- 在数据库上单击鼠标右键
- 还原数据库
- 输入新的数据库名称
- 选择“从设备”并浏览到备份文件
- 点击“确定”。这将恢复原始的“完整”备份。
- 使用开发应用程序测试新数据库 - 一切正常:)
- 在原始数据库上单击鼠标右键,选择“DB”>“任务”>“备份...”
- 备份类型 = 差异,备份到磁盘,添加新文件并删除旧文件(它需要是一个小文件才能传输,以实现最少的中断量)
- 将差异备份复制到新数据库
- 鼠标右键单击数据库 > 任务 > 恢复 > 数据库
这就是我被困住的地方。如果我将新的差异文件和原始备份都添加到恢复过程中,我会收到错误
The media loaded on "M:\path\to\backup\full.bak" is formatted to support 1 media families, but 2 media families are expected according to the backup device specification.
RESTORE HEADERONLY is terminating abnormally.
但如果我尝试仅使用差异文件进行恢复,我会得到
System.Data.SqlClient.SqlError: The log or differential backup cannot be restored because no files are ready to rollforward. (Microsoft.SqlServer.Smo)
知道怎么做吗?有没有更好的方法在有限的停机时间内恢复备份?
答案1
您必须使用 NORECOVERY 选项恢复完整备份,才能恢复后续差异备份。只有最后一次恢复才会使用 RECOVERY 选项。如果您需要每晚恢复前一个差异备份,差异恢复也必须使用 NORECOVERY 选项。在这种情况下,数据库 B 将始终处于非运行状态。
答案2
执行差异时,转到选项页面并选中“备份到新媒体集并删除所有现有备份集”单选按钮。
您正在某个地方对备份进行条带化。使用上述选项将在 DIFF 备份上使用 INIT 和 FORMAT 关键字。