数据管理DMS的普通数据变更功能支持INSERT、UPDATE、DELETE、TRUNCATE等SQL语句,可以对数据库中的数据进行变更操作,用于数据初始化、历史数据清理、问题修复、功能测试等场景。本文介绍在DMS中进行普通数据变更的方法。

前提条件

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

注意事项

  • 无论工单审批通过与否均可撤回工单,避免审批通过后误执行工单任务。
  • 建议您在测试环境执行数据变更也通过工单进行管理。通过工单进行变更会有数据备份、行数校验等保障,如果操作不符合预期可以快速恢复。
    说明 如果担心审批工单影响研发效率,可以设置无审批。具体操作,请参见SQL变更
  • 如果已配置逻辑库逻辑表路由算法,您可以通过一个工单便捷的提交分库分表的变更操作,无需逐个物理库表提交。
    • 带路由算法配置且更新条件带路由字段的书写,可快速根据条件自动路由到具体物理库表执行。
    • 若不带路由算法配置或变更条件里不带路由字段、路由字段书写类型与结构定义不符合这三种场景会造成SQL在每一个分库分表上逐一执行,执行时间会较久。

操作步骤

  1. 登录数据管理DMS 5.0
  2. 在顶部菜单栏中,选择数据库开发 > 数据变更 > 普通数据变更
  3. 数据变更工单申请页面,配置工单参数。
    说明 以下配置以RDS MySQL数据库举例,其他数据库配置与其类似。
    参数名 说明
    数据库 搜索并选择有变更权限的数据库。
    (可选)关联迭代 单击选择/切换迭代,在目标迭代名称的操作列,单击关联,关联迭代。
    原因类别 选择数据变更的原因,方便后续查找。
    说明 管理员可以在运维管理 > 配置管理中,修改原因类别列表。具体操作,请参见配置管理
    业务背景 详细描述变更原因或目标,减少沟通成本。
    执行方式 选择工单的执行方式:
    • 审批通过后,提交者执行。
    • 审批通过后,自动执行。
    • 最后一个审批人执行。
    说明 管理员可以在运维管理 > 配置管理中,修改执行方式列表。具体操作,请参见配置管理
    影响行数 预估本次变更会影响的数据行数。
    变更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. 审批通过后,单击执行变更,在任务设置对话框中设置任务执行参数,并单击确定执行
    说明 创建工单时,如果执行方式选择审批通过后,自动执行,系统会自动跳过此步骤。
    配置项 说明
    执行策略 选择执行策略:
    • 立即执行:单击确定执行后,立即执行工单任务。
    • 定时执行:指定任务开始执行时间,单击确定执行后,在指定时间执行工单任务。
    开启整体事务 选择是否开启整体事务,默认关闭。
    • 开启:执行失败则全部回滚(仅限DML,DDL不在范围内)。
    • 关闭:逐条提交SQL任务,执行失败则终止任务,但不回滚。
    开启备份 选择是否开启备份,默认开启。
    说明
    • 仅执行UPDATE和DELETE语句时,支持备份数据。
    • MongoDB和Redis不支持备份数据。
    • 开启:执行UPDATEDELETE语句前,系统自动生成对应的备份脚本附件。
      • 如果数据库类型为MySQL和MariaDB,生成REPLACE INTO备份语句。
        说明 MySQL包括:RDS MySQL版、PolarDB MySQL引擎、MyBase MySQL版、PolarDB-X、其他来源MySQL。
      • 如果数据库类型为除MySQL、MariaDB外的其他引擎,生成INSERT备份语句。
    • 关闭:不生成备份附件。
    说明 SQL任务的执行会受到安全规则SQL执行控制模块的监控,例如SQL执行前数据库锁超时机制、数据库负载检查、SQL执行后Sleep策略等。如需修改默认的检测点设置,请参考配置SQL执行控制
    • 工单执行成功后,在操作列单击详情,可查看工单执行状态、执行次数、影响行数、执行脚本、日志等信息。
    • 工单执行成功后,您可以进入目标数据库的SQL窗口,查看数据变更是否符合预期。
  7. 可选:数据变更不符合预期,可快速恢复源数据。
    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. 在备份文件中提取备份语句,确认备份语句无误后,重新提交普通数据变更工单并根据实际情况进行数据恢复。
    说明 如果是UDPATE语句的误操作,且备份语句为INSERT,需要自行确认恢复的方式。