自建sqlserver迁移到aliyun的rds for sqlserver实战
一、背景
有些客户有上云的需求,需要把线下自建的sqlserver迁移至aliyun的rds for sqlserver。大家第一时间想到的是用dts工具,根据工作经验,DTS迁移mysql类的数据库比较成熟,但是迁移sqlserver之类的会有问题。首先面临的一个问题就是源库日志膨胀的问题,也就是说是迁移过程中,源库的日志是不能截断,否则日志序列会被重置,迁移任务失败。那有没有其他的方案呢?下面分享一下通过物理备份还原的方式迁移上云。
二、方案
2.1 版本的选择
SQLSERVER版本的兼容原则,是高版本向下兼容低版本,在aliyun上选择rds for sqlserver版本时,目标版本要等于或大于源版本。目前阿里云上支持的rds for sqlserver版本如下:
2.2 脚本备份源库
DECLARE @name NVARCHAR(256) -- database name
DECLARE @path NVARCHAR(512) -- path for backup files
DECLARE @fileName NVARCHAR(512) -- filename for backup
DECLARE @fileDate NVARCHAR(40) -- used for file name
-- specify database backup directory
SET @path = 'E:\backup\'
-- specify filename format
SELECT @fileDate = CONVERT(NVARCHAR(20),GETDATE(),112)
DECLARE db_cursor CURSOR READ_ONLY FOR
SELECT name
FROM master.sys.databases
WHERE name NOT IN ('master','model','msdb','tempdb') -- exclude these databases
AND state = 0 -- database is online
AND is_in_standby = 0 -- database is not read only for log shipping
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @fileName = @path + @name + '.BAK'
BACKUP DATABASE @name TO DISK = @fileName WITH STATS=10, COMPRESSION
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
2.3 创建OSS存储空间
创建oss存储空间的目的是让rds for sqlserver从oss的bucket读取备份文件,以供恢复使用。
1. 登录OSS管理控制台。
2. 单击Bucket列表,然后单击创建Bucket。
3. 配置如下关键参数,其他参数可以保持默认
4. 说明:创建的存储空间仅用于本次数据上云,且上云后不再使用,因此只需配置关键参数即可,为避免数据泄露及产生相关费用,上云完成后请及时删除。
本地数据库备份完成后,使用ossbrowser工具将备份文件上传到您的OSS Bucket中:
5. 下载ossbrowser,以Windows x64操作系统为例,解压下载的oss-browser-win32-x64.zip压缩包,双击运行oss-browser.exe应用程序。
6. 使用AK登录方式,配置参数AccessKeyId和AccessKeySecret,其他参数保持默认,然后单击登入
7. 单击目标Bucket,进入存储空间
单击,选择需要上传的备份文件,然后单击打开,即可将本地文件上传至OSS中。
2.4 创建数据上云任务
1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
2. 在左侧菜单栏中选择备份恢复。
3. 单击页面上方的OSS备份数据恢复上云。
4. 在数据导入向导页面,单击两次下一步,进入数据导入步骤。
5. 设置如下参数:
6. 单击确定。
请耐心等待上云任务完成,您可以单击刷新查看数据上云任务最新状态。
三、常见问题
空间不足
1. 错误信息:Not Enough Disk Space for restoring, space left (xxx MB) < needed (xxx MB).
2. 错误原因:RDS实例剩余空间不满足备份文件上云所需要的最小空间要求。
3. 解决方法:升级实例空间。
权限不足
1. 错误信息:Your RDS doesn’t have any init account yet, please create one and grant permissions on RDS console to this migrated database (XXX).
2. 错误原因:RDS实例不存在高权限账号,OSS备份数据上云任务不知道需要为哪个用户授权,但是备份文件已经成功还原到目标实例上,所以任务状态是成功的。
3. 解决方法:创建高权限账号
微信赞赏
支付宝赞赏