通过SSMS恢复备份文件到自建数据库(SQL Server)
RDS for SQL Server云上备份包括数据备份、增量备份(日志备份),备份格式为SQL Server标准格式bak文件,自建数据可以直接使用bak文件进行恢复。
前提条件
下载云上备份bak文件到自建数据库的本地路径。
恢复数据备份
恢复增量备份(日志备份)
恢复日志备份前提是要先恢复数据备份,并且数据库处于Restoring状态。日志备份必须连续,即必须按照同一个库的备份顺序进行恢复,缺少其中的任何备份都将导致无法恢复到最后的日志备份数据。
- 参考1~4配置恢复数据备份。
- 单击“Option”,Recovery state选择“RESTORE WITH NORECOVERY”。
图6 选择Recovery state
- 检查数据库恢复出来的状态为“Restoring”。
图7 检查恢复状态
- 右键单击要恢复的数据库,单击恢复“Transaction Log”。
图8 选择数据库
- 选择device以及添加要恢复的备份文件。
图9 添加备份文件
- 如果不是最后一个增量备份文件,还需要继续恢复其他增量备份,需要修改option的Recovery state为“RESTORE WITH NORECOVERY”,否则选择“RESTORE WITH RECOVERY”,单击“OK”进行恢复。
图10 恢复日志备份
- 如果还有其他增量备份需要恢复,请重复执行4-6,直到最后一个日志备份恢复完成。
常见问题
问:下载的bak中找不到目标库,只有rdsadmin库可以恢复吗?
答:解决方法如下:
- 下载的备份文件里面有两个备份,第一个备份为rdsadmin,第二个为目标库test。
- 查看备份文件头信息。
restore headeronly from disk='bak文件本地路径'
图11 查看备份文件信息
- 查看内部文件信息。
restore filelistonly from disk='bak文件本地路径'
默认只读取第一个备份库的信息。
图12 查看内部文件信息
- 如果需要读取第二个或者第三个库,需要加上with file,具体的值为restore headeronly得到的结果中的position的值。
restore filelistonly from disk='bak文件本地路径' with file=2
图13 查看其他库信息
- 恢复数据。
图14 恢复数据
USE [master] RESTORE DATABASE [@dbname] FROM DISK='@path' WITH FILE= @file MOVE '@logicalname1' TO '@filepath1' MOVE '@logicalname2' TO '@filepath2' NOUNLOAD, STATS=5 GO
- @dbname:库名。
- @path:全备文件路径。
- @file:数据库在bak文件中的位置,执行restore headeronly时获得的position的值。
- @logicalname1:备份文件中的LogicalName,和新库的文件路径,LogicalName为执行restore filelistonly时获得的LogicalName的值。
- @filepath1:物理文件存放在本地的路径。
- @logicalname2:同@logicalname1。
- @filepath2:同@filepath1。
根据2获取到的恢复头信息,拼接到上述的SQL中,然后执行上述SQL进行恢复。