本文档介绍如何把用户OSS上的全量备份文件迁移到阿里云RDS SQL Server。
前提条件
- RDS实例为如下版本:
- RDS SQL Server集群系列(2017企业版、2019企业版)
- RDS SQL Server高可用系列(2012标准版、2012企业版、2014标准版、2014企业版、2016标准版、2016企业版、2017标准版、2019标准版)
- RDS SQL Server基础系列(2012企业基础版、2012Web版、2016Web版)
说明 SQL Server 2008 R2高可用版上云具体操作,请参见 全量备份数据上云(SQL Server 2008 R2)。 - RDS实例拥有足够的存储空间。如果空间不足,请提前升级实例空间。
- RDS实例中没有同名的目标数据库。
- RDS实例已创建高权限账号,具体操作,请参见创建数据库和账号(SQL Server 2012、2014、2016、2017和2019)
- OSS Bucket与RDS实例需要处于相同地域,关于如何创建OSS Bucket,请参见创建存储空间。
- 执行DBCC CHECKDB,确保没有任何的allocation errors和consistency errors。
说明 正常结果如下:
... CHECKDB found 0 allocation errors and 0 consistency errors in database 'xxx'. DBCC execution completed. If DBCC printed error messages, contact your system administrator.
注意事项
- 本方案迁移的级别为数据库,即每次只能迁移一个数据库上云。如果需要迁移多个或所有数据库,建议采用实例级的迁移上云方案,具体操作,请参见SQL Server实例级别迁移上云。
- 不支持高版本的备份文件往低版本做迁移,例如从SQL Server 2016迁移到SQL Server 2012。
- 不支持差异备份文件或日志备份文件。
- 全量备份文件名不能包含@、|等特殊字符,否则会导致上云失败。
- 授予RDS服务账号访问OSS的权限以后,系统会在访问控制RAM的角色管理中创建名为AliyunRDSImportRole的角色,请勿修改或删除这个角色,否则会导致上云任务无法下载备份文件而失败。如果修改或删除了这个角色,您需要通过数据上云向导重新授权。
- 本方案迁移上云后,无法使用原有的账号,需要在RDS控制台重新创建账号。
- 在OSS备份数据恢复上云任务没有完成之前,请不要删除OSS上的备份文件,否则会导致上云任务失败。
- 备份文件名仅支持bak、diff、trn或log为后缀名。如果没有使用本文中的脚本生成备份文件,请使用如下后缀名:
- bak:表示全量备份文件。
- diff:表示差异备份文件。
- trn或者log:表示事务日志备份。
视频演示
备份本地数据库
说明 在对本地数据库做全量备份之前,请确保已停止写入数据。备份过程中新写入的数据将不会被备份。
上传备份文件到OSS
本地数据库备份完成后,需要将备份文件上传到您的OSS Bucket中,您可以采用如下方法之一:
- 使用ossbrowser工具上传
推荐使用ossbrowser工具上传备份文件到OSS,详情请参见 ossbrowser。
- 使用OSS控制台上传
如果备份文件小于5GB,可以直接使用OSS控制台上传,详情请参见使用OSS控制台上传。
- 使用OSS API上传
您可以使用OSS OpenAPI,通过断点续传的方式上传备份文件到OSS Bucket,详情请参见断点续传。
创建数据上云任务
请耐心等待上云任务完成,您可以单击刷新查看数据上云任务最新状态。如果上云失败,请根据任务描述提示排查错误,可参见本文的常见错误。
查看备份上云记录
您可以在备份恢复页面备份数据上云记录页签内查看备份上云记录,默认会展示最近一周的记录。
常见错误
每一条备份上云恢复记录中,都会有任务描述信息,可以通过这些描述信息提示来发现任务失败或报错的原因,常见的错误信息如下:
- 同名数据库已经存在
- 错误信息:The database (xxx) is already exist on RDS, please backup and drop it, then try again.
- 错误原因:为了保证RDS SQL Server上数据的安全性,RDS SQL Server不支持同名数据库的上云操作。
- 解决方法:如果您确实需要对现有数据库的数据进行覆盖,请自行先备份已经存在的数据,然后删除数据库,最后再重新数据上云任务。
- 使用差异备份文件
- 错误信息:Backup set (xxx.bak) is a Database Differential backup, we only accept a FULL Backup.
- 错误原因:您提供的备份文件是差异备份,不是全量备份文件,一次性全量迁入上云仅支持全量备份文件,不支持差异备份。
- 使用日志备份文件
- 错误信息:Backup set (xxx.trn) is a Transaction Log backup, we only accept a FULL Backup.
- 错误原因:您提供的备份文件是日志备份,不是全量备份文件,一次性全量迁入上云仅支持全量备份文件,不支持日志备份。
- 备份文件校验失败
- 错误信息:Failed to verify xxx.bak, backup file was corrupted or newer edition than RDS.
- 错误原因:备份文件损坏或者备份文件所在的本地环境SQL Server实例版本比RDS SQL Server版本高,导致校验失败。例如将一个SQL Server 2016的备份还原到RDS SQL Server 2012版本,就会报告这个错误。
- 解决方法:如果是备份文件损坏,请在本地环境重新做一个全量备份,重新生成迁移上云任务;如果是版本过高,请使用与本地环境版本一致或者更高的RDS SQL Server。
- DBCC CHECKDB失败
- 错误信息:DBCC checkdb failed.
- 错误原因:DBCC CheckDB检查操作报错,说明数据库在本地环境中已经有错误发生。
- 解决方法:使用如下命令修复本地环境数据库错误后重新上云。
说明 使用该命令修复错误的过程,可能会导致数据丢失。
DBCC CHECKDB (DBName, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS
- 空间不足1
- 错误信息:Not Enough Disk Space for restoring, space left (xxx MB) < needed (xxx MB).
- 错误原因:RDS实例剩余空间不满足备份文件上云所需要的最小空间要求。
- 解决方法:升级实例空间。
- 空间不足2
- 错误信息:Not Enough Disk Space, space left xxx MB < bak file xxx MB.
- 错误原因:RDS实例剩余空间比备份文件本身小,不满足最小空间要求。
- 解决方法:升级实例空间。
- 没有高权限账号
- 错误信息:Your RDS doesn’t have any init account yet, please create one and grant permissions on RDS console to this migrated database (XXX).
- 错误原因:RDS实例不存在高权限账号,OSS备份数据上云任务不知道需要为哪个用户授权,但是备份文件已经成功还原到目标实例上,所以任务状态是成功的。
- 解决方法:创建高权限账号,具体操作,请参见创建数据库和账号(SQL Server 2012、2014、2016、2017和2019)。
一张图读懂常见错误信息

相关API
API | 描述 |
---|---|
创建上云任务 | 创建数据上云任务 |
创建打开数据库任务 | 打开数据库 |
查询上云任务列表 | 查询数据上云任务列表 |
查询上云任务文件 | 查看数据上云任务文件详情 |