普通数据变更

DMS普通数据变更功能支持直接执行或定时执行SQL语句来修改数据库中的数据,例如INSERT、UPDATE、DELETE、TRUNCATE、CREATE TABLE等SQL。DMS可以在预检查阶段对SQL的正确性进行校验、在审批阶段检查待执行的SQL是否会影响数据库性能及是否允许提交工单者执行此SQL,有效控制SQL变更的风险。本文介绍如何提交普通数据变更工单。

前提条件

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

注意事项

  • 无论工单审批通过与否均可关闭工单,避免审批通过后误执行工单任务。

  • 建议您在测试环境执行数据变更也通过工单进行管理。通过工单进行变更会有数据备份、行数校验等保障,如果操作不符合预期可以快速恢复。

    说明

    如果担心审批工单影响研发效率,可以设置无审批。具体操作,请参见SQL变更

  • 如果已配置逻辑库逻辑表路由算法,您可以通过一个工单便捷的提交分库分表的变更操作,无需逐个物理库表提交。

    • 带路由算法配置且更新条件带路由字段的书写,可快速根据条件自动路由到具体物理库表执行。

    • 若不带路由算法配置或变更条件里不带路由字段、路由字段书写类型与结构定义不符合这三种场景会造成SQL在每一个分库分表上逐一执行,执行时间会较久。

操作步骤

  1. 登录数据管理DMS 5.0
  2. 在顶部菜单栏中,选择数据库开发 > 数据变更 > 普通数据变更

    说明

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

  3. 数据变更工单申请页面,配置工单参数。部分参数说明如下:

    配置项

    是否必填

    说明

    数据库

    搜索并选择有变更权限的数据库。

    原因类别

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

    说明

    管理员可以在运维管理 > 配置管理中,配置原因类别列表。具体操作,请参见配置管理

    业务背景

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

    执行方式

    选择工单的执行方式:

    • 审批通过后,提交者执行。

    • 审批通过后,自动执行。

    • 最后一个审批人执行。

    说明

    管理员可以在运维管理 > 配置管理中,修改执行方式列表。具体操作,请参见配置管理

    影响行数

    预估本次变更会影响的数据行数。

    变更SQL

    您可选择文本附件

    SQL文本

    变更SQL选择了文本,才会出现该配置项。在SQL文本框中,输入可直接执行的SQL语句。

    说明
    • 多条SQL之间,请用英文分号(;)隔开。

    • 提交工单时会自动校验SQL语法正确性,不正确则无法提交。

    附件

    变更SQL选择了附件,才会出现该配置项。上传变更SQL附件。

    说明

    附件仅支持.txt、.zip和.sql的文件类型,最大不能超过15 MB。

    回滚SQL

    您可选择文本附件

    SQL文本

    回滚SQL选择了文本,才会出现该配置项。输入回滚SQL,回滚SQL为变更SQL对应的逆向脚本。

    附件

    回滚SQL选择了附件,才会出现该配置项。单击上传文件,上传回滚SQL附件。

    说明

    附件仅支持.txt、.zip和.sql的文件类型,最大不能超过15 MB。

    变更相关人

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

    工单附件

    上传工单附件,补充当前工单信息。

  4. 单击提交申请

    提交工单后,系统会自动进行预检查,如果预检查没有通过,根据提示修改SQL,然后重试。

  5. 预检查通过后,单击提交审批,在提示对话框中单击确认

    说明

    数据变更默认审批模板的审批人为DBA。更改默认审批模板,请参见修改默认审批模板

  6. 审批通过后,单击执行变更,在任务设置对话框中设置任务执行参数,并单击确定执行

    说明
    • 创建工单时,如果执行方式选择审批通过后,自动执行,系统会自动跳过此步骤。

    • 已暂停的任务重启后,将从暂停位置继续执行脚本。

    配置项

    说明

    执行策略

    选择执行策略:

    • 立即执行:单击确定执行后,立即执行工单任务。

    • 定时执行:指定任务开始执行的时间。例如,在2024年05月22日0时执行任务。

    开启整体事务

    选择是否开启整体事务,默认关闭。

    • 开启:执行失败则全部回滚(仅限DML,DDL不在范围内)。

    • 关闭:逐条提交SQL任务,执行失败则终止任务,但不回滚。

    开启备份

    选择是否开启备份,默认开启。开启后,后续您才可以使用备份文件快速恢复数据。

    说明
    • 仅执行UPDATE和DELETE语句时,支持备份数据。

    • MongoDB和Redis不支持备份数据。

    • 开启:执行UPDATEDELETE语句前,系统自动生成对应的备份脚本附件。

      • 如果数据库类型为MySQL和MariaDB,生成REPLACE INTO备份语句。

        说明

        MySQL包括:RDS MySQLPolarDB MySQL版PolarDB分布式版、其他来源MySQL。

      • 如果数据库类型为除MySQL、MariaDB外的其他引擎,生成INSERT备份语句。

    • 关闭:不生成备份附件。

    说明

    SQL任务的执行会受到安全规则SQL执行控制模块的监控,例如SQL执行前数据库锁超时机制、数据库负载检查、SQL执行后Sleep策略等。如需修改默认的检测点设置,请参考配置SQL执行控制

    • 工单执行成功后,在操作列单击详情,可查看工单执行状态、执行次数、影响行数、执行脚本、日志等信息。

    • 工单执行成功后,您可以进入目标数据库的SQL窗口,查看数据变更是否符合预期。

  7. 可选:快速创建回滚工单并恢复原数据。

    若数据变更不符合预期,可通过创建回滚工单或手动提交普通数据变更工单,以快速恢复原数据。如下为您演示如何创建回滚工单:

    1. 在工单执行区域,单击目标任务右侧的生成回滚工单

    2. 选择回滚来源,单击确认。目前支持如下三种回滚来源:

      • 回滚文本:在配置工单信息时,预填写的回滚文本。

      • 回滚附件:在配置工单信息时,预上传的回滚附件。

      • 备份文件:工单执行过程中产生的备份附件。

        说明

        使用备份文件恢复原数据的前提是:在执行变更前开启备份。

    3. (可选):按需修改回滚文本、附件或备份文件。

      • 回滚文本:可以直接在SQL文本框中修改。

      • 回滚附件或备份文件:首先将附件下载到本地,再进行修改,最后重新上传至回滚工单。

    4. 确认回滚信息无误后,单击提交申请。后续工单流程与普通数据变更工单流程相同。

  8. 下载备份文件。

    当您需要保存备份文件或者需要修改后上传备份文件至DMS时,请下载备份文件。

    1. 操作列,单击下载备份。备份文件主要包含以下几部分内容:

      • 变更的原始SQL语句。

      • 数据变更的查询SQL语句。

      • 数据变更备份SQL。

      例如:

      /*
      [Database]:   rds@rm-bp144d5ky4l4rli0417****.mysql.rds.aliyuncs.com:3306【rds mysql】
      */
      
      /*
      [SQL]:
      
      
      UPDATE t_order
      SET product_id = 88
      WHERE id = 10054
      [BACKUP SQL]:    SELECT *
      FROM t_order
      WHERE id = 10054
      */
      REPLACE INTO `t_order`(`id`,`product_id`,`gmt_create`,`gmt_modified`,`customer_id`,`price`,`status`,`province`) VALUES
      (10054,81,'2021-12-14 09:44:44','2021-12-14 09:44:44',71,63.45,'Success','杭州');
                                          
    2. 在备份文件中提取备份语句,确认备份语句无误后,重新提交普通数据变更工单并根据实际情况进行数据恢复。

      说明

      如果是UPDATE语句的误操作,且备份语句为INSERT,需要自行确认恢复的方式。

  9. 验证变更是否符合预期。

    1. 工单详情页基本信息区域,将鼠标悬浮在数据库名称上,单击查询

      image

    2. 跳转至SQL Console查询表数据是否符合预期。