# 通过SSMS恢复备份文件到自建SQL Server数据库
RDS for SQL Server云上备份包括数据备份、增量备份（日志备份），备份格式为SQL Server标准格式bak文件，自建数据可以直接使用bak文件进行恢复。
#### 前提条件
下载云上备份bak文件到自建数据库的本地路径。
#### 恢复数据备份
1. 使用微软官方工具SQL Server Management Studio (SSMS)登录自建数据库。
   
   图1登录自建数据库   
   ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002215074062.png "点击放大")
   
   
2. 右键单击"Databases"目录，选择"Restore Database"。 
   图2选择数据库   
   ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002214914250.png)
   
   
3. 选择"Device"，添加bak备份文件，单击"OK"。 
   图3添加备份文件   
   ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002214914266.png "点击放大")
   
   
4. 选择要恢复的数据库，Source中的Database可以下拉选择要恢复的源库，Destination的Database可以修改要恢复的目标库名。
   
   图4选择源库和目标库   
   ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002215074090.png "点击放大")
   
   
5. 单击"OK"，恢复成功。 
   图5恢复成功   
   ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002249954109.png "点击放大")
   
   
 
#### 恢复增量备份（日志备份）
![](https://support.huaweicloud.com/usermanual-rds-mssql/public_sys-resources/note_3.0-zh-cn.png)
恢复日志备份前提是要先恢复数据备份，并且数据库处于Restoring状态。日志备份必须连续，即必须按照同一个库的备份顺序进行恢复，缺少其中的任何备份都将导致无法恢复到最后的日志备份数据。
1. 参考[1]\~[4]配置恢复数据备份。
2. 单击"Option"，Recovery state选择"RESTORE WITH NORECOVERY"。 
   图6选择Recovery state   
   ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002214914262.png "点击放大")
   
   
3. 检查数据库恢复出来的状态为"Restoring"。 
   图7检查恢复状态   
   ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002215074082.png)
   
   
4. 右键单击要恢复的数据库，单击恢复"Transaction Log"。
   
   图8选择数据库   
   ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002249954093.png "点击放大")
   
   
5. 选择device以及添加要恢复的备份文件。 
   图9添加备份文件   
   ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002214914246.png "点击放大")
   
   
6. 如果不是最后一个增量备份文件，还需要继续恢复其他增量备份，需要修改option的Recovery state为"RESTORE WITH NORECOVERY"，否则选择"RESTORE WITH RECOVERY"，单击"OK"进行恢复。
   
   图10恢复日志备份   
   ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002250113989.png "点击放大")
   
   
7. 如果还有其他增量备份需要恢复，请重复执行[4]-[6]，直到最后一个日志备份恢复完成。
 
#### 常见问题
问：下载的bak中找不到目标库，只有rdsadmin库可以恢复吗？
答：解决方法如下：
1. 下载的备份文件里面有两个备份，第一个备份为rdsadmin，第二个为目标库test。
2. 查看备份文件头信息。
   ```
   restore headeronly from disk='bak文件本地路径'
   ```
   图11查看备份文件信息   
   ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002249954121.png "点击放大") 
3. 查看内部文件信息。
   ```
   restore filelistonly from disk='bak文件本地路径'
   ```
   默认只读取第一个备份库的信息。
   图12查看内部文件信息   
   ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002250113993.png "点击放大") 
4. 如果需要读取第二个或者第三个库，需要加上**with file** ，具体的值为**restore headeronly** 得到的结果中的**position** 的值。
   ```
   restore filelistonly from disk='bak文件本地路径' with file=2
   ```
   图13查看其他库信息   
   ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002215074078.png "点击放大") 
5. 恢复数据。
   图14恢复数据   
   ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002249954105.png "点击放大")
   ```
   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进行恢复。
   
 
