更新时间:2025-12-12 GMT+08:00
分享

配置DRS同步任务

  1. 填写源库和目标库信息,并完成测试连接,测试连接成功通过后,单击下一步。

    表1 源库信息

    参数

    描述

    IP地址或域名

    Azure SQL实例overview中服务地址。

    端口

    默认端口

    数据库用户名

    客户提供的高权限迁移使用用户。

    数据库密码

    源数据库的登录密码。

    测试连接

    保证测试连接成功。

    表2 目标库信息

    参数

    描述

    数据库实例名称

    默认为创建迁移任务时选择的关系型数据库实例,不可进行修改。

    数据库用户名

    RDS for SQL Server创建实例时的管理用户 。

    数据库密码

    目标数据库的登录密码。

    测试连接

    保证测试连接成功。

  2. 单击“同意,并继续”进入编辑同步任务界面。
  3. 在编辑同步任务界面不选择同步表结构,同步对象中选择要进行同步的库的表信息。

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

  5. 使用SSMS连接到Azure SQL开启库CDC和每张表的CDC,按顺序执行如下SQL。

    1. 开启库级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计费不同,用户需根据自身需要选择。
    2. 查询数据库的原服务层级
      SELECT 
          database_name = DB_NAME(),
          edition,
          service_objective
      FROM sys.database_service_objectives;

      随后依次执行如下SQL,开启源端数据库服务层级。

      (SQL5.b.i5.b.ii5.b.iii为非必须,若开启库级CDC失败,可执行SQL5.b.i5.b.ii5.b.iii为并刷新数据库后重新开启):

      1. 将数据库升级到支持CDC的Azure SQL Database层级Premium层级
        ALTER DATABASE [smsa_mig]
        MODIFY (EDITION = 'Premium', SERVICE_OBJECTIVE = 'P1');
      2. 禁用数据库级别的DDL触发器
        DISABLE TRIGGER ALL ON DATABASE
      3. 关闭库级CDC
        EXECsys.sp_cdc_disable_db;
      4. 开启库级CDC
        EXEC sys.sp_cdc_enable_db;

        源端库开启CDC成功后可再次查看源端数据库服务层级,已提升至Premium

    3. 批量开启所有表的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

    4. 执行如下SQL语句可查看源端表是否都开启CDC
      select name, is_tracked_by_cdc from sys.tables where is_tracked_by_cdc = '1';

  6. 单击“重新校验”重新开始同步预检查操作,直至预检查通过率为100%。

  7. 选择默认选项,单击“启动任务”。

    图1 默认启动选项

  8. 在启动前须知弹窗勾选“我已阅读启动前须知”,单击“启动任务”开启Azure SQL的纯数据实施同步任务并返回任务列表,在任务列表状态列可查看任务状态。

    图2 任务状态-启动中

相关文档