配置DRS同步任务
- 填写源库和目标库信息,并完成测试连接,测试连接成功通过后,单击下一步。

表1 源库信息 参数
描述
IP地址或域名
Azure SQL实例overview中服务地址。
端口
默认端口
数据库用户名
客户提供的高权限迁移使用用户。
数据库密码
源数据库的登录密码。
测试连接
保证测试连接成功。
表2 目标库信息 参数
描述
数据库实例名称
默认为创建迁移任务时选择的关系型数据库实例,不可进行修改。
数据库用户名
RDS for SQL Server创建实例时的管理用户 。
数据库密码
目标数据库的登录密码。
测试连接
保证测试连接成功。
- 单击“同意,并继续”进入编辑同步任务界面。
- 在编辑同步任务界面不选择同步表结构,同步对象中选择要进行同步的库的表信息。



- 进入参数预检查界面,这里如果源端的库和表没有启动CDC,一般都会报CDC未开启的错误提示。除CDC之外的不通过项则需要根据提示进行修复或联系oncall处理。

- 使用SSMS连接到Azure SQL开启库CDC和每张表的CDC,按顺序执行如下SQL。
- 开启库级CDC
EXEC sys.sp_cdc_enable_db;
如果当前Azure SQL Database不支持开启CDC,则如下所示开启库级别CDC失败,随后异常,执行后续SQL,升级Azure SQL Database后开启库级CDC。

需要执行如下sql查询源端数据库的服务层级,并将结果记录下来,以便后期恢复数据库服务层级。
- 不支持开启CDC的级别有:Basic、Standard S0、Standard S1 和 Standard S2。
- 不同版本的Azure SQL Database计费不同,用户需根据自身需要选择。
- 查询数据库的原服务层级
SELECT database_name = DB_NAME(), edition, service_objective FROM sys.database_service_objectives;
随后依次执行如下SQL,开启源端数据库服务层级。
(SQL5.b.i、5.b.ii、5.b.iii为非必须,若开启库级CDC失败,可执行SQL5.b.i、5.b.ii、5.b.iii为并刷新数据库后重新开启):
- 批量开启所有表的CDC。执行附件批量开启表CDC的SQL脚本(需要根据Schema修改脚本后对每个schema执行)。
BEGIN TRY DECLARE @source_name VARCHAR(400); DECLARE @sql VARCHAR(1000); DECLARE @dbname VARCHAR(100); DECLARE @schemaname VARCHAR(100), @enable BIT; SET @dbname = 'smsa_migration'; -- 确保数据库名正确 SET @schemaname = 'SalesLT'; -- 修改为实际需要处理的 Schema(例如 SalesLT 或 dbo) SET @enable = 1; -- 1 启用 CDC,0 禁用 CDC DECLARE the_cursor CURSOR FAST_FORWARD FOR SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_CATALOG = @dbname AND TABLE_SCHEMA = @schemaname AND TABLE_NAME != 'systranschemas' AND TABLE_TYPE = 'BASE TABLE'; -- 关键修正:仅选择基表,排除视图 OPEN the_cursor; FETCH NEXT FROM the_cursor INTO @source_name; WHILE @@FETCH_STATUS = 0 BEGIN IF @enable = 1 BEGIN SET @sql = 'USE ' + @dbname + '; ' + 'EXEC sys.sp_cdc_enable_table ' + '@source_schema = N''' + @schemaname + ''', ' + -- Schema 名称 '@source_name = N''' + @source_name + ''', ' + -- 表名称 '@role_name = NULL;'; -- 根据需求设置角色名,NULL 表示不限制访问 END ELSE BEGIN SET @sql = 'USE ' + @dbname + '; ' + 'EXEC sys.sp_cdc_disable_table ' + '@source_schema = N''' + @schemaname + ''', ' + -- Schema 名称 '@source_name = N''' + @source_name + ''', ' + -- 表名称 '@capture_instance = ''all'';'; -- 禁用所有实例 END PRINT @sql; -- 调试输出生成的 SQL EXEC(@sql); FETCH NEXT FROM the_cursor INTO @source_name; END CLOSE the_cursor; DEALLOCATE the_cursor; SELECT 'Successful'; END TRY BEGIN CATCH IF CURSOR_STATUS('global', 'the_cursor') >= 0 BEGIN CLOSE the_cursor; DEALLOCATE the_cursor; END SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_MESSAGE() AS ErrorMessage; END CATCH
- 执行如下SQL语句可查看源端表是否都开启CDC
select name, is_tracked_by_cdc from sys.tables where is_tracked_by_cdc = '1';
- 开启库级CDC
- 单击“重新校验”重新开始同步预检查操作,直至预检查通过率为100%。


- 选择默认选项,单击“启动任务”。
图1 默认启动选项
- 在启动前须知弹窗勾选“我已阅读启动前须知”,单击“启动任务”开启Azure SQL的纯数据实施同步任务并返回任务列表,在任务列表状态列可查看任务状态。
图2 任务状态-启动中

