前提条件
- 数据库类型为MySQL、PostgreSQL、DRDS、Oracle。
功能介绍
SQL变更工单是DMS工单系统中的一种类型,用于提交SQL变更语句,确保SQL语句经过工单的预检查、审批流程后才能执行,确保SQL变更操作的规范、安全和可控。
注意基础版和企业版都支持SQL变更工单,区别在于只有企业版支持预检查和审批功能,基础版工单一经提交,会直接到执行阶段,执行时可选择手动执行或者自动执行。
操作步骤
创建SQL变更工单
- 登录DMS控制台。
- 在左侧导航栏,选择开发空间 > SQL变更 ,进入SQL变更管理页面。
- 单击SQL变更按钮,弹出SQL变更工单填写界面,工单需要输入的内容说明见下表1。
- 填写完SQL变更工单后,单击提交按钮,即完成工单的提交,进入SQL变更工单后续阶段。
表1 SQL变更工单输入内容说明
| 输入内容 | 说明 |
|---|---|
| 目标数据库(必填) | 选择有变更权限的数据库/模式,支持MySQL、PostgreSQL、DRDS、Oracle数据源,其中MySQL、DRDS、Oracle可选择到库级别,PostgreSQL可选择到模式级别。 |
| 变更SQL(必填) | 输入需要变更的SQL语句,或者上传SQL文件,上传后文件内容的语句会自动解析至文本输入框中。 |
| 开启事务 | 事务当前只支持MySQL和PostgreSQL类型。只有纯DML方可开启事务。 |
| 错误处理 | 默认为执行出错后终止,SQL执行报错后会中断后续SQL执行;勾选后为执行出错后继续,会默认跳过执行报错的SQL,继续执行后续SQL。 |
| 备份回滚 | 可手动开启备份回滚功能,对工单执行的DML语句进行备份回滚,支持MySQL、PostgreSQL、DRDS、Oracle数据源,其中MySQL支持binlog级别的精确备份回滚。 |
| 无锁结构变更 | 仅支持MySQL数据源,开启后所有表变更语句都会采用DMS无锁方式执行。 |
| 执行方式(必填) | 为企业版配置,可选自动执行、手动执行和定时执行,选择自动执行,工单审批通过后立即执行;选择手动执行,工单审批通过后手动执行;选择定时执行,可指定执行时间,工单审批通过后到配置的定时时间自动执行。 |
| 最晚执行时间 | 选择SQL最晚执行时间,超过该时间后,即使工单已被审批通过也讲无法执行。 |
| 关联人 | 选择需要看到此工单的用户名,可多选,关联人可在工单列表页面查看此工单。 |
| 工单说明 | 描述工单备注内容。 |
说明其中备份回滚功能仅支持DML语句,回滚涉及的变更数据上限为50万条,回滚脚本保存24小时,备份回滚分为普通备份和精确备份。
普通备份回滚:仅支持更新和删除语句的回滚,工单执行完成后会同步生成备份回滚文件。
精确备份回滚:支持更新、插入和删除语句的回滚,精确备份需数据库已开启Binlog,并且 需要Binlog 相关参数设置为:binlog_format = ROW、binlog_row_image = FULL,工单执行完成后会异步生成备份回滚文件。
其中无锁结构变更功能仅支持MySQL数据源,开启后以下参数可以修改:
自动清理临时表:勾选后每条无锁结构变更语句执行成功/失败后,都将自动删除临时表。
切表锁等待超时(s):在切表阶段,DMS需要同时给原表和临时表加锁禁写(加锁等待期间,也会阻塞表上的DML),然后实现两表的互换,该参数可以控制给表加锁的等待超时时间。时间越长,加锁成功率越高,但对业务DML影响时间越大。当表上有大事务、大查询导致频繁加锁失败时,可以酌情增加超时时间。
切表重试次数:在切换表阶段,当无法获取表的MDL锁或其它原因导致切表失败时,该参数可以控制累计重试次数。重试次数越多,切换表成功率越高,但同时短时间内频繁尝试切换表对业务的影响也会越大。
全量拷贝批次大小:在全量拷贝阶段,将原表分为N个小块逐个拷贝到临时表,该参数可以更改手动指定单次拷贝的大小。单次拷贝越大,全量拷贝的时间越短,但同时对业务的影响越大。勾选自适应,DMS根据数据库的性能,自动调整每次拷贝行数大小,兼顾速率和稳定性。
增量拷贝批次大小:在增量同步阶段,DMS 会持续回放原表执行期间产生的增量变更,将其同步到临时表。该参数用于控制单次处理增量变更的批次大小。批次越大,越有利于更快追平增量数据、降低同步延迟,但也会增加增量回放时的瞬时压力;当业务写入较频繁或实例负载较高时,建议谨慎调大。
注意
变更SQL上传文件仅支持SQL格式,最大不能超过1M。
变更SQL仅支持DDL、DML语句,单次SQL变更执行语句最多2000条。
开启无锁结构变更时,每条表变更语句都将新建临时表用于拷贝数据,请务必确保磁盘剩余空间为所有目标表之和的两倍以上,磁盘空间不足将导致实例被锁定。当开启"自动清理临时表"时,语句执行结束后会直接删除临时表,以释放磁盘空间。
SQL变更工单预检查
- 登录DMS控制台。
- 在左侧导航栏,选择开发空间 > SQL变更 ,进入SQL变更管理页面。
- 单击SQL变更按钮,弹出SQL变更工单填写界面。
- 填写目标数据库和变更SQL。
- 点击预检查按钮,进行工单各项检查。
说明
预检查项按顺依次进行,当某一项检查失败后,后续检查不会再继续,失败时可查看失败原因。
当连接检查、SQL语法和类型检查、权限检查通过后,认定预检查通过,可进入工单后续流程。
风险等级检查结果依据风险管控中配置的管控规则得出。
不同的风险等级对应不同的审批流程,具体参考SQL风险配置。
当前预检查项包括:
连接检查:检查目标数据库的连接是否正常。
SQL语法和类型:检查变更SQL语法是否正常,以及SQL类型是否属于DDL或者DML。
权限检查:检查当前数据库用户是否有执行变更SQL的权限。
影响行数:检查变更SQL可能会影响到的数据行数。
锁冲突:检查变更SQL是否可能会导致锁冲突。
风险等级:检查此次变更操作对应的风险等级。
SQL规范:检查此次变更是否符合实例关联的SQL规范。
备份回滚检查:检查变更SQL的SQL类型是否支持,变更回滚行数是否超过50万行上限,是否涉及无主键表(不支持无主键表回滚),其中还会对普通备份DML语句检查是否涉及关联多表操作和是否涉及INSERT语句,精细备份需要对Binlog配置进行检查。
无锁结构变更检查:分为实例级别检查和表级别检查,实际级别主要是检查binlog日志格式需要满足要求,表级别检查包括目标表不能有触发器、不能存在外键、不能被其他表外键引用、存在主键或存在“可用唯一键”(“可用唯一键”要求唯一索引涉及的列都不可为 NULL)、目标库内不能存在无锁结构变更残留对象。
查看SQL变更工单列表
- 用户登录DMS系统。
- 在左侧菜单栏依次选择 开发空间 > SQL变更。
- 系统显示SQL变更工单列表。
查看SQL变更工单详情
- 用户登录DMS系统。
- 在左侧菜单栏依次选择 开发空间 > SQL变更。
- 点击要查看的工单操作列详情按钮,系统显示SQL工单详情页面。
复制创建工单
- 用户登录DMS系统。
- 在左侧菜单栏依次选择 安全协作 > 工单列表。
- 点击要查看的工单操作列详情按钮,系统显示SQL变更工单详情页面。
- 点击顶部复制创建按钮,进入到工单编辑界面。
- 填写和修改工单信息,点击提交完成SQL变更工单的复制创建。
撤回SQL变更工单
- 用户登录DMS系统。
- 在左侧菜单栏依次选择 开发空间 > SQL变更。
- 点击要查看的工单操作列详情按钮,系统显示SQL变更工单详情页面。
- 点击底部撤回按钮,系统显示SQL变更工单撤回弹窗。
- 点击确定按钮,完成SQL变更工单的撤回。
注意当工单任务状态为提交成功、预检查中、审批中时,才能进行撤回操作。
重试SQL变更工单
- 用户登录DMS系统。
- 在左侧菜单栏依次选择 开发空间 > SQL变更。
- 点击要查看的工单操作列详情按钮,系统显示SQL变更工单详情页面。
- 点击底部重试工单按钮,系统显示SQL变更工单重试弹窗。
- 点击确定按钮,完成SQL变更工单的重试。
注意当工单处于工单异常状态时,才能进行此操作。
执行SQL变更工单
- 用户登录DMS系统。
- 在左侧菜单栏依次选择 开发空间 > SQL变更。
- 点击要查看的工单操作列详情按钮,系统显示SQL变更工单详情页面。
- 点击底部执行按钮,系统显示SQL变更工单执行弹窗。
- 点击确定按钮,完成SQL变更工单的执行。
重试执行工单
- 用户登录DMS系统。
- 在左侧菜单栏依次选择 开发空间 > SQL变更。
- 点击要查看的工单操作列详情按钮,系统显示SQL变更工单详情页面。
- 点击底部重试执行按钮,系统显示SQL变更工单重试执行弹窗。
- 点击确定按钮,完成SQL变更工单的重试执行。
注意当工单任务状态为执行失败时,才能进行此操作。