SQL Server备份恢复至AWS RDS失败,如何使用WITH MOVE子句解决?
解决方案
前置说明
- 如果你是尝试恢复SQL Server的系统master数据库:AWS RDS SQL Server 不支持直接恢复/覆盖系统数据库(master、model、msdb、tempdb),你需要手动导出原实例master库中存储的登录名、服务器级配置、权限等信息,再导入到目标RDS实例。
- 如果你是恢复名称为
Master的用户数据库,报错是因为备份中的数据库文件名和目标RDS实例上已存在的文件名冲突,按以下步骤操作即可。
操作步骤
步骤1:查询备份文件内的逻辑文件名
执行以下存储过程获取备份文件中包含的数据、日志文件的逻辑名称:
exec msdb.dbo.rds_restore_filelistonly @s3_arn_to_restore_from='arn:aws:s3:::master/Master_backup_2021_09_01.bak';
执行完成后,记下返回结果中LogicalName列的两个值,分别对应数据文件(后缀通常为.mdf)和日志文件(后缀通常为.ldf)的逻辑名,示例返回的逻辑名一般为Master和Master_log。
步骤2:带WITH MOVE参数执行恢复
在RDS的恢复存储过程中通过@restore_options参数传入WITH MOVE配置,将备份中的文件重命名为不冲突的名称即可,示例命令如下:
exec msdb.dbo.rds_restore_database @restore_db_name='Master', @s3_arn_to_restore_from='arn:aws:s3:::master/Master_backup_2021_09_01.bak', @restore_options = 'WITH MOVE ''Master'' TO ''D:\rdsdbdata\DATA\Master_restore.mdf'', MOVE ''Master_log'' TO ''D:\rdsdbdata\DATA\Master_restore_log.ldf''';
注意:SQL字符串中嵌套单引号需要转义,需替换命令中的
Master、Master_log为你步骤1中查询到的实际逻辑文件名。
可选替代方案
如果你不需要保留目标RDS实例上现有的Master数据库,也可以先删除现有数据库后再执行原始的恢复命令,即可直接解决文件冲突问题,操作前请确认现有数据已备份。
内容的提问来源于stack exchange,提问作者Imperial Fist
相关产品推荐
相关产品推荐

