文档首页/ 云数据库 RDS/ 用户指南/ RDS for SQL Server用户指南/ 数据恢复/ 通过SSMS恢复备份文件到自建数据库(SQL Server)
更新时间:2024-07-22 GMT+08:00

通过SSMS恢复备份文件到自建数据库(SQL Server)

RDS for SQL Server云上备份包括数据备份、增量备份(日志备份),备份格式为SQL Server标准格式bak文件,自建数据可以直接使用bak文件进行恢复。

前提条件

下载云上备份bak文件到自建数据库的本地路径。

恢复数据备份

  1. 使用微软官方工具SQL Server Management Studio (SSMS)登录自建数据库。

    图1 登录自建数据库

  2. 右键单击“Databases”目录,选择“Restore Database”。

    图2 选择数据库

  3. 选择“Device”,添加bak备份文件,单击“OK”。

    图3 添加备份文件

  4. 选择要恢复的数据库,Source中的Database可以下拉选择要恢复的源库,Destination的Database可以修改要恢复的目标库名。

    图4 选择源库和目标库

  5. 单击“OK”,恢复成功。

    图5 恢复成功

恢复增量备份(日志备份)

恢复日志备份前提是要先恢复数据备份,并且数据库处于Restoring状态。日志备份必须连续,即必须按照同一个库的备份顺序进行恢复,缺少其中的任何备份都将导致无法恢复到最后的日志备份数据。

  1. 参考1~4配置恢复数据备份。
  2. 单击“Option”,Recovery state选择“RESTORE WITH NORECOVERY”。

    图6 选择Recovery state

  3. 检查数据库恢复出来的状态为“Restoring”。

    图7 检查恢复状态

  4. 右键单击要恢复的数据库,单击恢复“Transaction Log”。

    图8 选择数据库

  5. 选择device以及添加要恢复的备份文件。

    图9 添加备份文件

  6. 如果不是最后一个增量备份文件,还需要继续恢复其他增量备份,需要修改option的Recovery state为“RESTORE WITH NORECOVERY”,否则选择“RESTORE WITH RECOVERY”,单击“OK”进行恢复。

    图10 恢复日志备份

  7. 如果还有其他增量备份需要恢复,请重复执行4-6,直到最后一个日志备份恢复完成。

常见问题

问:下载的bak中找不到目标库,只有rdsadmin库可以恢复吗?

答:解决方法如下:

  1. 下载的备份文件里面有两个备份,第一个备份为rdsadmin,第二个为目标库test。
  2. 查看备份文件头信息。
    restore headeronly from disk='bak文件本地路径'
    图11 查看备份文件信息
  3. 查看内部文件信息。
    restore filelistonly from disk='bak文件本地路径'

    默认只读取第一个备份库的信息。

    图12 查看内部文件信息
  4. 如果需要读取第二个或者第三个库,需要加上with file,具体的值为restore headeronly得到的结果中的position的值。
    restore filelistonly from disk='bak文件本地路径' with file=2
    图13 查看其他库信息
  5. 恢复数据。
    图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。
    • @logicalname2:同@filepath1。

    根据2获取到的恢复头信息,拼接到上述的SQL中,然后执行上述SQL进行恢复。