这次来实操一把,试下DMS到底是怎么迁移的,首先我们试下从AWS的RDS迁移到Azure SQL

    AWS的RDS我们选择北京区,RDS采用SQL Server 2014 Enterprise版本,Azure SQL采用Azure 北一区,这个就没什么版本了

    

    首先来看下,我们之前已经把DMS创建好了,接下来只需要在DMS中创建迁移任何即可,当然在这之前,我们需要确保AWS的RDS是可以访问的,并且在RDS中创建一些测试用的数据,因为RDS没有办法访问本地的数据文件,所以之前生成测试数据的脚本也没办法用了,我们只能手动建一些测试数据了


    测试数据建好之后,来到DMS中,可以直接创建一个migration project, migration project会定义迁移的源和目标

    使用DMS迁移AWS RDS到Azure SQL_第1张图片



可以看到选项里就可以选择AWS RDS for SQL Server,对应的目标选择Azure SQL,这里可以选择的事online迁移,也就是持续性的迁移,可以支持增量,有些迁移场景是不支持增量的

使用DMS迁移AWS RDS到Azure SQL_第2张图片


输入源库及目标库的信息

使用DMS迁移AWS RDS到Azure SQL_第3张图片


要注意的是,不管是RDS还是Azure SQL,如果想让DMS可以访问的话,都需要添加对应的防火墙规则,DMS的IP其实当访问受限的时候就会有提示提醒你DMS的IP是什么

使用DMS迁移AWS RDS到Azure SQL_第4张图片



Azure SQL在firewall里添加即可,AWS RDS可以在sg里添加

使用DMS迁移AWS RDS到Azure SQL_第5张图片



可以看到迁移时可以选择源库和对应的目标库

使用DMS迁移AWS RDS到Azure SQL_第6张图片



DMS对于迁移的要求是比较严格的,源库中的表必须在目标库存在,而且字段这些也都要求一样,必须有主键,目标表必须是空的等等,让人感觉会很麻烦,但是其实有简单的办法,之后会有介绍,最重要的一点是必须开启CDC

使用DMS迁移AWS RDS到Azure SQL_第7张图片


CDC首先要在库级别开启,运行以下命令即可

exec msdb.dbo.rds_cdc_enable_db Sample

使用DMS迁移AWS RDS到Azure SQL_第8张图片


之后在表级别开启

USE Sample

EXEC sys.sp_cdc_enable_table 

@source_schema = N'dbo', 

@source_name   = N'test_table', 

@role_name     = NULL, 

@supports_net_changes = 1

使用DMS迁移AWS RDS到Azure SQL_第9张图片



然后这里才能不提示CDC未开启

使用DMS迁移AWS RDS到Azure SQL_第10张图片


确认之前输入的信息

使用DMS迁移AWS RDS到Azure SQL_第11张图片


可以看到已经在准备迁移了

使用DMS迁移AWS RDS到Azure SQL_第12张图片



我们尝试在源库增加数据

使用DMS迁移AWS RDS到Azure SQL_第13张图片



在DMS中就可以看到在同步数据,这是一个持续的过程,只要有新数据就会同步,但是请注意,如果有新表的话,是不会自动同步的,因为DMS迁移时会由用户选择同步哪些表

使用DMS迁移AWS RDS到Azure SQL_第14张图片


    如果确认不再需要同步了,那么可以选择cutover使用DMS迁移AWS RDS到Azure SQL_第15张图片



迁移完成后,还可以看到对应的report

使用DMS迁移AWS RDS到Azure SQL_第16张图片




可以看到使用还是比较简单的,主要在迁移时对于目标库有很多限制条件,包括主键,表必须都存在等,如果是一个新环境没办法直接迁移,对于这个问题其实是有很好地解决方案的,后边就来看一下