
# 配置DRS同步任务
1. 填写源库和目标库信息，并完成测试连接，测试连接成功通过后，单击下一步。 
   ![](https://support.huaweicloud.com/bestpractice-drs/zh-cn_image_0000002512038639.png)
   表1源库信息 
   | **参数**  | **描述**                    |
   |:---|:---|
   | IP地址或域名 | Azure SQL实例overview中服务地址。 |
   | 端口      | 默认端口                      |
   | 数据库用户名  | 客户提供的高权限迁移使用用户。           |
   | 数据库密码   | 源数据库的登录密码。                |
   | 测试连接    | 保证测试连接成功。                 |
      
   表2目标库信息 
   | **参数**  | **描述**                         |
   |:---|:---|
   | 数据库实例名称 | 默认为创建迁移任务时选择的关系型数据库实例，不可进行修改。  |
   | 数据库用户名  | RDS for SQL Server创建实例时的管理用户 。 |
   | 数据库密码   | 目标数据库的登录密码。                    |
   | 测试连接    | 保证测试连接成功。                      |
      
   
   
2. 单击"同意，并继续"进入编辑同步任务界面。
3. 在编辑同步任务界面不选择同步表结构，同步对象中选择要进行同步的库的表信息。 
   ![](https://support.huaweicloud.com/bestpractice-drs/zh-cn_image_0000002511958667.png)
   ![](https://support.huaweicloud.com/bestpractice-drs/zh-cn_image_0000002479878770.png)
   ![](https://support.huaweicloud.com/bestpractice-drs/zh-cn_image_0000002512038641.png)
   
   
4. 进入参数预检查界面，这里如果源端的库和表没有启动CDC，一般都会报CDC未开启的错误提示。除CDC之外的不通过项则需要根据提示进行修复或联系oncall处理。 
   ![](https://support.huaweicloud.com/bestpractice-drs/zh-cn_image_0000002480038748.png)
   
   
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。
      ![](https://support.huaweicloud.com/bestpractice-drs/zh-cn_image_0000002481978596.png)
      需要执行如下sql查询源端数据库的服务层级，并将结果记录下来，以便后期恢复数据库服务层级。
      ![](https://support.huaweicloud.com/bestpractice-drs/public_sys-resources/note_3.0-zh-cn.png)
      - 不支持开启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;
      ```
      ![](https://support.huaweicloud.com/bestpractice-drs/zh-cn_image_0000002481818632.png)
      随后依次执行如下SQL，开启源端数据库服务层级。
      （SQL[5.b.i]、[5.b.ii]、[5.b.iii]为非必须，若开启库级CDC失败，可执行SQL[5.b.i]、[5.b.ii]、[5.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;
         ```
         ![](https://support.huaweicloud.com/bestpractice-drs/zh-cn_image_0000002513978477.png)
         源端库开启CDC成功后可再次查看源端数据库服务层级，已提升至Premium
         ![](https://support.huaweicloud.com/bestpractice-drs/zh-cn_image_0000002514138453.png)
         
       
   
   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
      ```
      ![](https://support.huaweicloud.com/bestpractice-drs/zh-cn_image_0000002481818640.png)
      
   
   4. 执行如下SQL语句可查看源端表是否都开启CDC
      ```
      select name, is_tracked_by_cdc from sys.tables where is_tracked_by_cdc = '1';
      ```
      
   
   
   
   
6. 单击"重新校验"重新开始同步预检查操作，直至预检查通过率为100%。 
   ![](https://support.huaweicloud.com/bestpractice-drs/zh-cn_image_0000002511958675.png)
   ![](https://support.huaweicloud.com/bestpractice-drs/zh-cn_image_0000002479878776.png)
   
   
7. 选择默认选项，单击"启动任务"。 
   图1默认启动选项   
   ![](https://support.huaweicloud.com/bestpractice-drs/zh-cn_image_0000002489259598.png)
   
   
8. 在启动前须知弹窗勾选"我已阅读启动前须知"，单击"启动任务"开启Azure SQL的纯数据实施同步任务并返回任务列表，在任务列表状态列可查看任务状态。 
   图2任务状态-启动中   
   ![](https://support.huaweicloud.com/bestpractice-drs/zh-cn_image_0000002511958677.png)
   
   
 
