在工作中,存在大量场景例如项目发布上线数据初始化、历史数据清理、问题修复、测试等,需要对数据库中的数据进行更新操作。本文介绍DMS提供的数据变更功能,支持包括但不局限insertupdatedeletetruncate等功能。

操作步骤

  1. 登录DMS控制台
  2. 在顶部导航栏,单击数据方案 > 数据变更 > 普通数据变更
  3. 可参考下表填写数据变更工单申请,并单击提交申请
    参数名 说明
    原因类别(必填) 选择数据变更的原因,方便后续查找。
    业务背景(必填) 详细描述变更原因或目标,减少沟通成本。
    变更相关人(选填) 设置的相关人员都可查看工单,并协同工作,非相关人员则不能查看工单(管理员、DBA除外)。
    执行方式(必填) 默认为审批通过后,提交者执行,可选审批通过后,自动执行最后审批人执行
    数据库(必填) 选择有变更权限的数据库。若您只有目标数据库的只读权限或只有表的变更权限时则无法提交。
    影响行数(必填) 预估本次更新会影响的数据行数,可在SQLConsolecount统计。
    变更SQL(必填) 必须是可直接执行的SQL语句,产品在提交时会自动校验语法正确性,不正确则阻断无法提交。
    回滚SQL(选填) 可直接执行的SQL语句,变更脚本对应的逆向脚本。
  4. 工单提交后,系统会进行内容合法性检查。
  5. 当检查通过后,需要您提交审批,审批通过后,就会生成执行任务。
    说明
    • 在提交审批前,您可以修改工单内容和定时配置,一旦提交审批后,您将不能修改相关信息。
    • 目前,数据变更的默认安全审批规则为:数据库对应的DBA进行审批。更多关于数据变更的审批规则请参见SQL变更安全规则
  6. 单击执行变更,参考下表进行任务设置,单击确定执行
    控制项 控制值 说明
    立即执行 on / off(需要指定具体时间) 有效值:
    • on:提交即刻执行。
    • off:按需指定在业务特定时间执行。
    默认值为on。
    事务控制 on / off 有效值:
    • on:遇到失败则全部回滚(仅限DML,DDL不在范围内)。
    • off:逐条提交,遇到失败则终止但不回滚。
    默认为off。
    备份数据 on / off 有效值:
    • on:针对updatedelete进行将要影响数据的全记录行insert脚本生成附件。
    • off:不生成备份附件。
    默认为on。
    说明 在创建工单时,执行方式若选择审批通过后,自动执行,会自动跳过此步骤。
  7. 执行成功后可通过单击详情按钮,查看执行日志详细,包括执行语句、执行所用时间、调度详情等信息。
  8. 若此次数据变更不符合预期且需要快速恢复,可单击下载备份,下载对应的备份文件。
    说明 快速恢复可在下载后的脚本提取回滚语句,重新提交数据变更工单进行恢复。
    备份文件中主要包含以下几部分内容:
    • 变更的原始SQL语句。
    • 数据变更的查询SQL语句。
    • 数据变更的回滚SQL语句。

修改数据变更的配置项

您可以在配置管理中修改数据变更工单中的原因类别执行方式,自定义管理您的工单流程。

  1. 登录DMS控制台
  2. 在上方菜单栏,单击系统管理 > 配置管理
    修改原因分类配置项
    1. 单击数据变更原因分类参数名右侧的编辑按钮。
      修改配置项按钮
    2. 参数值文本框中,编辑参数值,单击确定修改即可。
      说明 参数值说明:{"key":"参数名称","value":"显示在控制台中的value值"}
      示例:修改原因分类示例结果:修改原因分类结果
    修改执行方式配置项
    1. 单击数据变更的执行方式参数名右侧的编辑按钮。
      修改执行方式配置项
    2. 参数值文本框中,编辑参数值,单击确定修改即可。
      修改执行方式配置项
      说明 参数值说明:
      • COMMITOR:审批通过后,提交者执行。
      • AUTO:审批通过后,自动执行。
      • LAST_AUDITOR:审批通过后,最后一位审批者执行。

      当前仅支持以上三种执行方式,您可以任意组合使用。

使用小窍门

  • 对于需求变更,在提交审批后无论审批通过与否均可撤回工单,避免后续审批通过后误操作执行。
  • 工单的审批流程由管理员、DBA在系统管理-安全管理-安全规则进行指定,建议您日常测试环境的变更也通过工单管理(考虑研发效率的影响可设置无审批),这样在变更时都有备份、行数校验等保障,即使操作不符合预期也可以快速恢复。
  • 对于分库分表的场景,如果已在产品内配置逻辑库逻辑表路由算法则可以一个工单便捷的提交分库分表的操作,而无需逐个物理库表提交。
    • 带路由算法配置且更新条件带路由字段的书写,可快速根据条件自动路由到具体物理库表执行。
    • 若不带路由算法配置或变更条件里不带路由字段、路由字段书写类型与结构定义不符合这三种场景会造成SQL在每一个分库分表上逐一执行,执行时间会较久。