开发者社区> 问答> 正文

用户指南-数据迁移- SQL Server实例级别数据库上云


本文档介绍如何将用户线下实例,或者ECS上自建SQL Server上所有用户数据库的全量备份文件一键迁移到阿里云RDS for SQL Server。

应用场景


RDS for SQL Server已经发布了基于OSS上云的方法包括: 全量备份数据上云SQL Server 2008 R2版全量备份数据上云SQL Server 2012及以上版本以及 增量备份数据上云SQL Server 2012及以上版本。以上SQL Server迁移上云的方法都是基于数据库级别的方式实现上云,即每次迁移上云用户线下的一个数据库。
假如用户线下SQL Server实例有几十上百个数据库需要迁移上云,显然以上三种上云方法不适用于这种场景。为了解决用户大批量数据库迁移上云问题,RDS for SQL Server推出了实例级别大批量数据库一键迁移上云的功能。您只需将线下实例所有数据库完整备份文件上传到OSS Bucket的一个文件夹中,执行实例级别迁移上云脚本python脚本即可。

前提条件


  • 仅支持实例级别完整备份文件上云
    本功能仅支持实例级别所有数据库完整备份文件全量迁移上云,不支持增量上云

  • 要求RDS for SQL Server为以下版本:
    RDS for SQL Server 2008R2企业版的高可用系列(即双机版)

  • RDS for SQL Server 2012/2016 Web版、企业版的基础系列(即单机版)

  • RDS for SQL Server 2012/2016标准版、企业版的高可用系列(即双机版)

OSS Bucket与RDS for SQL Server所在地域相同
请确保OSS Bucket和RDS for SQL Server所在地域相同,以提高RDS for SQL Server下载备份文件的效率,否则可能会出现RDS for SQL Server无法下载备份文件而导致任务失败。
阿里云主账号和子账号都可以实现实例级别迁移上云,但阿里云子账号默认不具有访问OSS和RDS的权限,如果您需要使用子账号实现迁移上云,请为子账号授权,方法如下:

  1. 在阿里云产品与服务中单击访问控制,打开访问控制RAM控制台。

  2. 在左侧列表选用户管理查看用户列表,找到您需要授权的子账号,单击授权打开编辑个人授权策略窗口。

  3. 为账户授权AliyunOSSFullAccess、AliyunOSSReadOnlyAccess、AliyunRDSFullAccess和AliyunRDSReadOnlyAccess四个权限,单击确定,完成授权,如下图所示。
    [/url]

    OSS Bucket错误


    错误信息[list=1]
  4. {'status': 404, 'request-id': 'xxxxxxxxx', 'details': {'HostId': 'xxxxxxxxx', 'Message': 'The specified bucket does not exist.', 'Code': 'NoSuchBucket', 'RequestId': 'xxxxxxxx', 'BucketName': 'aaaatp-test-on-ecs'}}

错误原因
用户传入的OSS Bucket不存在,导致OPEN API无法找到对应的OSS Bucket。
解决方法
请传入正确的OSS Bucket名字。

OSS Bucket中文件夹不存在或者没有备份文件


错误信息
There is no backup file on OSS Bucket [xxxxxx] under [xxxxxxxxx] folder, check please.
错误原因
OSS Bucket中对应的文件夹不存在,或者文件夹中没有满足条件的SQL Server备份文件。
解决方法
请检查OSS Bucket中文件夹是否存在,检查文件夹中是否存在满足条件的备份文件。

备份文件命名不合法


错误信息
  1. Warning!!!!!, [autotest_2005_ent_broken_full_dbcc_failed.bak] is not backup file, filtered.

错误原因
由于我们需要从备份文件名中提取上云数据库的名字,所以对备份文件命名规则有要求,详情参见[url=https://help.aliyun.com/document_detail/72458.html?spm=a2c4g.11186623.6.763.16757a6aYGCbmr#%E6%95%B0%E6%8D%AE%E5%BA%93%E5%A4%87%E4%BB%BD%E6%96%87%E4%BB%B6%E5%90%8D%E7%BA%A6%E6%9D%9F]数据库备份文件名约束

解决方法
参照数据备份文件名约束中对数据完整备份文件名要求命名。

OPEN API返回错误


错误信息
  1. OPENAPI Response Error !!!!! : HTTP Status: <Http Status Code> Error:<Error> <Description>. RequestID: 32BB6886-775E-4BB7-A054-635664EE6AE4

错误原因
调用OPEN API返回的错误,这种类型的错误需要仔细阅读HTTP Status后面的提示信息。
解决方法
这种类型的错误种类比较多,参加下表:
HTTP Status CodeErrorDescription解释
403InvalidDBNameThe specified database name is not allowed.非法的数据库名字,不允许取系统数据库名。
403IncorrectDBInstanceStateCurrent DB instance state does not support this operation.数据库实例状态不正确,比如,数据库实例在创建中。
400IncorrectDBInstanceTypeCurrent DB instance type does not support this operation.RDS实例类型不支持,该功能仅支持RDS for SQL Server。
400IncorrectDBInstanceLockModeCurrent DB instance lock mode does not support this operation.数据库锁定状态不正确。
400InvalidDBName.NotFoundSpecified one or more DB name does not exist or DB status does not support.数据库不存在
  • RDS for SQL Server 2008R2需要先创建数据库
  • RDS for SQL Server 2012及以上版本,要求数据库不存在
400IncorrectDBTypeCurrent DB type does not support this operation.数据库类型不支持该操作。
400IncorrectDBStateCurrent DB state does not support this operation.数据库状态不正确,比如,数据库在创建中或者正在上云任务中。
400UploadLimitExceededUploadTimesQuotaExceeded: Exceeding the daily upload times of this DB.上云次数超过限制,每个实例每个库每天不超过20次上云操作。
400ConcurrentTaskExceededConcurrent task exceeding the allowed amount.上云次数超过限制,每个实例每天上云总次数不超过500次。
400IncorrectFileExtensionThe file extension does not support.备份文件后缀名错误。
400InvalidOssUrlSpecified oss url is not valid.用户提供的OSS下载链接地址不可用。
400BakFileSizeExceededExceeding the allowed bak file size.数据备份文件最大不超过3TB。
400FileSizeExceededExceeding the allowed file size of DB instance.备份文件还原回来超过用户规格实例大小。


子账号权限不足


错误信息
如果您使用阿里云子账号来实现实例级别的迁移上云,子账号权限不足,可能会遇到类似以下错误:
  1. HTTP Status: 403 Error:Forbidden.RAM The user is not authorized to operate the specified resource, or this operation does not support RAM. RequestID: xxxxx
  2. {'status': 403, 'request-id': 'xxxx', 'details': {'HostId': 'atp-test-on-ecs.oss-cn-beijing.aliyuncs.com', 'Message': 'The bucket you visit is not belong to you.', 'Code': 'AccessDenied', 'RequestId': 'xxxx'}}

错误原因
使用阿里云子账号,需要具有OSS和RDS的权限,如果没有为子账号授予相应的权限,就会报告类似以上的错误。
解决方法
参见 阿里云子账号授权方法解决。

展开
收起
梨好橙 2018-09-08 00:20:51 2394 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载
云时代的数据库技术趋势 立即下载
超大型金融机构国产数据库全面迁移成功实践 立即下载