无锁结构变更

DMS为解决结构变更时的锁表问题而推出的无锁结构变更功能,能较好地规避因数据库变更导致锁表以至于阻塞业务的现象、以及数据库原生Online DDL带来的主备延迟现象。

前提条件

  • 实例的管控模式为稳定变更或安全协同。更多信息,请参见管控模式

  • 目标实例已开启DMS无锁表结构变更策略。具体操作,请参见开启无锁结构变更

    说明

    本示例中,您需要提前对模拟开发环境的RDS MySQL实例开启DMS无锁表结构变更策略。

操作步骤

本示例通过无锁结构变更功能将big_table表的long_text_a字段类型从varchar(1024)改为text

  1. 普通用户提交工单。

    1. 以普通用户账号,登录数据管理DMS 5.0

    2. 在顶部菜单栏中,选择数据库开发 > 数据变更 > 无锁变更

      说明

      若您使用的是极简模式的控制台,请单击控制台左上角的2023-01-28_15-57-17.png图标,选择全部功能 > 数据库开发 > 数据变更 > 无锁变更

    3. 配置如下信息,并单击提交申请

      参数名

      说明

      数据库(必填)

      选择安全协同模式的poc_dev数据库。

      原因类别(必填)

      选择变更的原因,方便后续查找。

      业务背景(必填)

      详细描述变更原因或目标,减少沟通成本。

      执行方式(必填)

      选择最后一个审批人执行

      影响行数(必填)

      预估本次更新会影响的数据行数,可在SQL Consolecount统计。

      变更SQL(必填)

      输入如下ALTER语句。

      ALTER TABLE `big_table`
        MODIFY COLUMN `long_text_a` text NULL AFTER `name`;
      说明

      long_text_a字段的类型从varchar(1024)改为text

      回滚SQL(选填)

      可直接执行的SQL语句,变更SQL的对应逆向SQL。

      变更相关人(选填)

      设置的相关人员都可查看工单,并协同工作,非相关人员则不能查看工单(管理员、DBA除外)。

    4. 工单详情页中,确认工单详情信息。

      说明

      您可以在工单详情页中,查看工单的详情信息,同时系统也会对将要执行的SQL进行执行前的预检查,包括SQL语法解析、安全规则中的SQL类型校验、工单提交人的权限检查、预计检查扫描行数等。

    5. 确认信息无误且预检查通过后,单击提交审批,并在弹窗中单击确认

      重要

      在提交审批前,您可以修改工单内容,一旦提交审批后,将不能修改相关信息。

  2. 管理员审批工单。

    1. 以管理员账号,登录数据管理DMS 5.0

    2. 在DMS控制台首页我的工单区域,单击待处理工单

    3. 我的工单页面,单击目标工单号

    4. 工单详情页,确认工单变更信息,单击同意

    5. 在审批意见文本框中输入具体意见,并单击确定

  3. 普通用户执行工单。

    1. 以普通用户账号,登录数据管理DMS 5.0

    2. 在工单详情页面的执行区域,单击执行变更,在弹窗中配置如下信息,并单击确定执行

      配置项

      说明

      是否立即执行

      选择是否立即执行,支持:

      • 立即执行:提交即刻执行。

      • 定时执行:按需指定在业务特定时间执行。

      默认为立即执行

      是否事务控制

      选择是否打开事务控制开关:

      • 打开:遇到失败则全部回滚(仅支持DML语句,不支持DDL语句)。

      • 关闭:逐条提交,遇到失败则终止但不回滚。

      默认为关闭。

      是否备份数据

      选择是否打开备份数据开关:

      • 打开:针对本次变更中被UPDATE和DELETE语句影响的数据,系统将生成对应的INSERT脚本,以对原数据进行备份。

      • 关闭:不对上述数据生成备份脚本。

      默认为开启。

      说明

      单击确定执行后,系统将自动开始执行。

查看任务进展并验证

  1. 以管理员账号,单击基本信息区域变更数据库的名称。在提示框中,单击查询

    页面将自动跳转至SQL Console页面。

  2. 在SQL Console窗口中,输入查询的SQL语句后,单击执行

    例如输入查询当前数据库下表的SQL语句。

    SHOW TABLES;
    说明

    系统在进行无锁结构变更时,生成了两张临时表。

  3. 在顶部菜单栏中,选择运维管理 > 任务管理

    说明

    若您使用的是极简模式的控制台,请单击控制台左上角的2023-01-28_15-57-17.png图标,选择全部功能 > 运维管理 > 任务管理

  4. 单击目标任务号,进入任务执行详情页。

  5. 单击目标任务操作列下的进度按钮。

  6. 在无锁结构变更页,查看当前的整体拷贝进度。

  7. 变更完成后,对表结构进行验证。

    big_table的表结构已变更,临时表已被删除。