首页 > 数据库 >自建sqlserver迁移到aliyun的rds for sqlserver实战

自建sqlserver迁移到aliyun的rds for sqlserver实战

时间:2023-07-16 11:44:07浏览次数:34  
标签:rds 单击 数据库 sqlserver 上云 备份文件 aliyun DBCC

一、背景

有些客户有上云的需求,需要把线下自建的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. 说明:创建的存储空间仅用于本次数据上云,且上云后不再使用,因此只需配置关键参数即可,为避免数据泄露及产生相关费用,上云完成后请及时删除。

 

参数

说明

取值示例

Bucket 名称

存储空间名称,全局唯一,设置后无法修改。命名规则:只能包括小写字母、数字和短划线(-)。必须以小写字母或者数字开头和结尾。长度必须在3~63字符之间。

migratetest

地域

Bucket所属的地域,如果您通过ECS内网上传数据至Bucket中,且通过内网将数据恢复至RDS中,则需要三者地域保持一致。

华东1(杭州)

     

本地数据库备份完成后,使用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. 设置如下参数:

 

配置项

说明

数据库名

目标数据库名称,即数据导入RDS SQL Server实例之后的数据库名,必须和备份中的数据库名不同。说明 数据库名称需要符合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. 单击确定。

请耐心等待上云任务完成,您可以单击刷新查看数据上云任务最新状态。

三、常见问题

空间不足

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. 解决方法:创建高权限账号

标签:rds,单击,数据库,sqlserver,上云,备份文件,aliyun,DBCC
From: https://www.cnblogs.com/lkj371/p/17557630.html

相关文章

  • SqlServer 分页 写法
    一、SELECT*FROM   (SELECTROW_NUMBER()OVER(ORDERBYid)ASRowId,*FROMArticle wherecidin(3,4,5,6,7,8,9,10,11,12))ASrWHERE RowId BETWEEN1and12 二、select*from(   select ROW_NUMBER()OVER(ORDERBYid)asrowid,* from  ......
  • SQLServer 查询语句指定排序规则(查询时区分大小写)
    SQLServer查询语句指定排序规则(查询时区分大小写)介绍可以使用COLLATE子句将字符表达式应用于某个排序规则。为字符文本和变量分配当前数据库的默认排序规则。为列引用分配列的定义排序规则。COLLATE定义数据库或表列的排序规则,或应用于字符串表达式时的排序规则强制转换......
  • SQLServer批量修改和插入
    SQLServer批量修改或插入场景今天在工作中遇到这么一个场景,我需要根据条件对表A做批量更新或插入。因为条件比较复杂,所以我使用了临时表B,先把需要更新或插入的数据查询出来放入临时表。然后更新表A的某字段,更新条件是A.id=B.id,更新效果是若记录存在表A中,则更新表A的字段,若不......
  • SQLServer中创建用户角色及授权
    在SQLServer中创建用户角色及授权假设,我们准备建立一个dba数据库帐户,用来管理数据库mydb。1.首先在SQLServer服务器级别,创建登陆帐户(createlogin)--创建登陆帐户(createlogin)createlogindbawithpassword='abcd1234@',default_database=mydb登陆帐户名为:“dba”,......
  • SQLSERVER 维护计划无法删除
    数据对网站运营或者企业运营是至关重要的,所以,我们在使用数据库的时候,为了保证数据的安全可靠性,都会做数据库备份,很显然,这个备份,我们不可能每天都去手动备份,SQLServer数据库就可以提供数据库定时备份的任务,你可以设置按照天、周、月、年等不同设置不同的备份周期,这里我就不在介......
  • 在Ubuntu下的docker下安装sqlserver并指定排序规则和语言
    最近在公司弄了个小程序,随便架了个sqlserver,再看微软官网的时候发现可以在docker下安装sqlserver,随便实践记录下先上微软的连接地址Docker:为Linux上的SQLServer安装容器-SQLServer|MicrosoftLearn这个是sqlserver2017的,其他版本也是类似的,其实都是微软docker了一个lin......
  • 在WinServer 2022 Core 上安装SCVMM2022和SqlServer2022
    在WindowsServer2022Core上安装SystemCenterVirtualMachineManager(VMM)2022管理服务器和SqlServer2022CU5系统环境如下:OS:windowsserver2022CoreDataCenterDB:SqlServer2022withCU5ADK: Windows11版本22H2的ADK: https://learn.microsoft.com/zh-cn/wi......
  • SqlServer取当前日期0点到23点59分59秒
    --2023-07-1100:00:00.0002023-07-1123:59:59.000SELECTCONVERT(DATETIME,CONVERT(VARCHAR(10),GETDATE(),120)),DATEADD(SECOND,-1,CONVERT(DATETIME,CONVERT(VARCHAR(10),GETDATE()+1,120)))--2023-07-1100:00:002023-07-1123:59:59selectconvert(varchar(......
  • 4000 essential English words 经验分享
    4000essentialenglishwords这套教材的重要性不言而喻,目前已经是第二版了,这个版本的内容对高频词进行了一部分调整,更贴近日常使用。很多人不知道这套书怎么上手,下面具体分享我的经验。常见的词根词缀、谐音、故事法、拼读法等都在这套教材里用到,并且是体系化的每个单词拆开了,......
  • sqlserver数据库清除备份集记录
    1、 通过维护计划清除备份集记录, SqlServer数据库备份到服务器,及删除           https://www.qyyshop.com/info/467759.html 通过维护计划删除没有的或者历史的记录.  ......