本文档介绍如何把用户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:表示事务日志备份。

视频演示

备份本地数据库

说明 在对本地数据库做全量备份之前,请确保已停止写入数据。备份过程中新写入的数据将不会被备份。
  1. 下载备份脚本,用SSMS打开备份脚本。
  2. 修改如下参数。
    配置项 说明
    @backup_databases_list 需要备份的数据库,多个数据库以分号或者逗号分隔。
    @backup_type 备份类型。参数值如下:
    • FULL:全量备份
    • DIFF:差异备份
    • LOG:日志备份
    @backup_folder 备份文件所在的本地目录。如不存在,会自动创建。
    @is_run 是否执行备份。参数值如下:
    • 1:执行备份。
    • 0:只做检查,不执行备份。
  3. 执行备份脚本。

上传备份文件到OSS

本地数据库备份完成后,需要将备份文件上传到您的OSS Bucket中,您可以采用如下方法之一:

  • 使用ossbrowser工具上传

    推荐使用ossbrowser工具上传备份文件到OSS,详情请参见 ossbrowser

  • 使用OSS控制台上传

    如果备份文件小于5GB,可以直接使用OSS控制台上传,详情请参见使用OSS控制台上传

  • 使用OSS API上传

    您可以使用OSS OpenAPI,通过断点续传的方式上传备份文件到OSS Bucket,详情请参见断点续传

创建数据上云任务

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
  2. 在左侧菜单栏中选择备份恢复
  3. 单击页面上方的OSS备份数据恢复上云
  4. 数据导入向导页面,单击两次下一步,进入数据导入步骤。
    说明 如果您是第一次使用OSS备份数据恢复上云功能,需要给RDS官方服务账号授予访问OSS的权限,请单击 授权地址并同意授权,否则会因权限问题导致 OSS Bucket下拉列表为空。
  5. 设置如下参数。
    配置项 说明
    数据库名 目标数据库名称,即数据导入RDS实例之后的数据库名,必须和备份中的数据库名不同。
    说明 数据库名称需要符合SQL Server官方限制。
    OSS Bucket 选择备份文件所在的OSS Bucket。
    OSS子文件夹名 备份文件所在的子文件夹名字。
    OSS文件列表 单击右侧放大镜按钮,可以按照备份文件名前缀模糊查找,会展示文件名、文件大小和更新时间。请选择需要上云的备份文件。
    上云方案
    • 打开数据库(只有一个全量备份文件):全量上云,适合仅有一个完全备份文件上云的场景。本操作选择打开数据库,此时CreateMigrateTask中的BackupMode = FULL并且IsOnlineDB = True
    • 不打开数据库(还有差异备份或日志文件):增量上云,适合有完全备份文件加上日志备份(或者差异备份文件)上云的场景,此时CreateMigrateTask 中的BackupMode = UPDF 并且IsOnlineDB = False
    一致性检查方式
    • 异步执行DBCC:在打开数据库的时候系统不做DBCC CheckDB,会在打开数据库任务结束以后,异步执行DBCC CheckDB操作,以此来节约打开数据库操作的时间开销(数据库比较大,DBCC CheckDB非常耗时),减少您的业务停机时间。如果您对业务停机时间要求非常敏感,且不关心DBCC CheckDB结果,建议使用异步执行DBCC。此时CreateMigrateTask 中的CheckDBMode = AsyncExecuteDBCheck
    • 同步执行DBCC:相对于异步执行DBCC,有的用户非常关心DBCC CheckDB的结果,以此来找出用户线下数据库数据一致性错误。此时,建议您选择同步执行DBCC,影响是会拉长打开数据库的时间。此时CreateMigrateTask 中的CheckDBMode = SyncExecuteDBCheck
  6. 单击确定

请耐心等待上云任务完成,您可以单击刷新查看数据上云任务最新状态。如果上云失败,请根据任务描述提示排查错误,可参见本文的常见错误

查看备份上云记录

您可以在备份恢复页面备份数据上云记录页签内查看备份上云记录,默认会展示最近一周的记录。

常见错误

每一条备份上云恢复记录中,都会有任务描述信息,可以通过这些描述信息提示来发现任务失败或报错的原因,常见的错误信息如下:

  • 同名数据库已经存在
    • 错误信息: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 描述
创建上云任务 创建数据上云任务
创建打开数据库任务 打开数据库
查询上云任务列表 查询数据上云任务列表
查询上云任务文件 查看数据上云任务文件详情