00:00
前面我们已经讲过了,在搜课窗口可以进行数据的一个可视化查询和更新的一个管理,包括表结构的一个设计,那一般的话呢,开发测试环境可以在这里去做一些直接的一个数据的变更,但是在测试环境发到生产环境的时候呢,包括在生产环境的一些直接的一些数据运维操作,是不能够直接在窗口里去执行的,那这个时候我们会需要用到在SQL任务里面去进行一个提交,那在这里的话呢,之前我们啊已经提交过的很多的任务,我们可以做一个类似创建。在这里面的话呢,在任务创建页面,我们主要是会有一个任务名称的一个描述,然后核心的话呢,是咱们要变更的目标的数据源,以及数据库的一个信息,包括这里的话呢,就是会有一个就是任务在后续审批通过了之后,我到底是有提交人来执行,还是由审批人执行,还是自动执行,它是可以选择的,但这个选择的参数的话呢,在后面我们这个规范里面可以去进行一个查看确认。
01:01
这个是跟着数据源的配置来走的,那我们核心的一个内容的话呢,除了数据源对象之外呢,核心的还是说我们的变更的一个脚本,包括说我们回本脚本的一个可选配置,然后在这里面的话呢,我们也会有一个影响行数的一个输入,那这个地方的话呢,是我们的一个预估影响行数,它跟实际的一个影响行数呢,会去做一个对比,如果是一致的话呢,我们就不会有额外的提醒,但是如果有不一致的话呢,我们就会有额外的提醒,那现在的话我们进行一个提交。提交之后的话呢,我们会发现啊,在这里面我们其实会进入到一个规范预审,那这个阶段的话呢,平台里面会按照这个数据源所绑定的一个规范去进行一个审核,审核之后的结果呢,会在这里就是说啊,我们有哪些命中的一些建议改进的规范,哪些命中的一些必须改进的规范,然后在里面还会有像我们的这个数据安全啊,包括说权限的一些规范的一个输出,那在这里面的话呢,就是这个输出里面有几个核心的点,第一个就是我们的这个建议改进和必须改进呢,是会跟着我们后续的审批流程去做的一个联动,那数据安全这边的话呢,其实主要是针对于说我们在变更的时候会产生锁表的风险的时候,我们会有不锁表的结构变更。
02:22
奥online地调以及不锁表的数据变更,奥online第二ma的这么一个能力,那这个的话是通过平台去实现的,就是说啊,像奥兰迪调的话呢,通过临时表的拷贝方式,最后再去做一个rena的一个方式去追齐,那对于奥DML的话呢,它是做的组件为一建的一个分段的扫描,到最后的话,就是说把所有的数据扫描完成了之后,进行一个更新啊,一个分批的一个扫描,分批的一个提交执行更新,那这一块的话呢,具体的这些阈值,我在什么样的情况下会触发啊,会去用到奥那迪,奥ma什么样的情况下会触发去用到奥那低调,这个都是在这个规范里面去进行一个管理。
03:03
那在规范里面的话呢,像这里面的话呢,我们可以去搜索,比如说DDL,那这个时候的话呢,我们就可以看到啊,那D2DL这里我们会有三个不同的一个选项。我们在。预检测的时候发现说这个变更,它如果是锁表的时候,我们是直接执行还是说啊,就是用我们的这个平台自适应的方式,MYSQL能执行就用MYSMYSL不能就用我们平台的兜底,那如果说呃,还有一些就是主备敏感的这种场景不接受备库。提供服务的时候产生任何延迟的,那这种的话,我们可能就会强制用平台的话拉低调这样的方式去规避主备延迟的一个问题的一个出现,那如果说呃,即使是用我们平台的online低调,但还是会有一些场景,它是没有办法直接啊保证说每一个变更都是够能够online的,那这里会有比较几典型的几个场景,第一个的话呢,是表上面有触发器啊,第二个的话呢,是表上面没有组件或者唯一键啊,第三个呢,是说我们更新了表上的,呃,就是唯一键。
04:10
包括说我们在表上面,比如说我们有一个rena的common的一个操作,同时呢,我们要去做index的一个操作,这个的话呢,会遇到官方的一个bug,那这几种场景的话呢,我们在产品层面呢,是直接做了一个规避,就不能够用平台的奥拉低调,当然这个检测的信息会在预检查的结果里面也会提示出来,为什么不能够用平台的换来低调,所以这个时候呢,我们会有个策略,就是可以选择说啊,不能玩赖的时候,我是直接执行还是我是退出执行,等到合适的时间窗口,我们再去做一个可锁表的一个变更执行,那这个的话就可以按时的去选择这样的一个策略,那包括说我们对于临时表的这一块的处理的话,是变更完了直接去清,还是说是。按需的在后面手动去清,那这个的话是可以按需去配置,但是如果选择直接清理的时候,如果这个数据源在平台托管的账号,他没有drop table的一个权限的话,那这张临时表也是没办法交不掉的,所以这个时候的话呢,可能大家就会看到说,诶这个临时表还在数据库里面的这么一个现象,所以这个的话会跟权限也挂钩,那在这里的话,同时我们也会有一些执行参数啊,默认的话呢,是在规范级别可以直接配置任务的时候直接去用,但是这些参数的话呢,也是支持在任务运行过程当中啊,去做的一个实时的一个调整,去满足它的一个数据库在变更期间的一个性能的一个需要。
05:36
这个的话是奥兰DDL的一个规则的一个配置,那对于奥兰DML的话呢,在查询与更新里面的话呢,我们可以同样的去搜索一个DML的一个操作,那这里面的话也会分,就是我们的这个风险的阈值啊,可以是2万还是多少会触发,因为这里的话呢,对于更新的这一块的检测呢,我们除了影响函数也会去看它的扫描函数,因为在数据库里面做变更的时候呢,呃,我们的影响函数有可能很少,但是我们的扫描函数很多,那就意味着这个circle口是不不能够走执行计划里面去有用到索引的,那这种情况有可能也会影响到就是锁的一个上升,所以在这一块的话呢,我们会根据就是这两个值的任意一个达到了这么一个阈值,我们就会去触发奥来第二排的一个能力。
06:25
那这个地方呢,我们可以去选择性的开启说我要用奥兰点表还是不用奥兰减秒,用的时候我的单次分批分多少,然后每一批之间需不需要去进行一个sleep啊,这些都是可以去按时的去控制的,但是在这里面的话呢,我们同时也会有很多的其他的一些表结构的设计的规范,包括数据更新的一些规范,咱们是可以按时去配置的,那就是规范的这一层,同时的话呢,在这里面的话呢,我们如果在任务里面,我们开启了一些,比如说我们的结构更新,语法检查,数据更新的语法检查,假如说我是不放行,然要他这一个操作的话,那这个时候的话呢,我们其实在规范预审的时候,我们就会发现。
07:07
它会出现一个权限的一个错误,然后导致在这里面。我们给他撤回重新去提交的时候,我们就可以看到他应规范重新去预检查,他就会报出来一个权限的一个拦截的一个错误,那这个时候的话呢,它其实就是会不通过啊,会是这样的一个信息,那今天的话呢,我们主要还是演示一下奥莱迪迪尔和奥莱迪曼的一个执行,所以我们还是给它把规范改回来。允许他去做到一个就是结构更新里面。All的一个语法,那这里的话,我们的语法的设计的话呢,是可以在就是一级目录,也可以是二级目录,所以这里的话呢,我们可以按需去配置哪些语法是允许的,比如drop×K的,那可能我是不允许的,或者说我要用特殊的审批流程,那这个我们就可以在这里去进行一个配置,那我们在这里面去规范调整完了之后的话呢,这个规范呢,是系统管理员去调,或者说有模块的,就是编辑权限的用户才去调,一般是系统管理员的角色,那调完之后的话呢,任务里面我们进行一个重新的一个检查,他就会用最新的规范再去进行一个呃检查,检查完的结果的话呢,那这里其实就会到第二个就是说审批流程,那么审批流程这里的话呢。
08:28
我们是支持在企业版里面呢,是可以按需的去定义很多的不同的一些流程因子啊,可以走到不同的一些条件,包括说我们包含哪些数据库,或者包含哪些scheme,哪些表,包括我们的SQL语法的类型,以及我们的一些变更时间段,包括我们的影响函数,那不同的条件呢,我们可以是任意一个满足或者多个条件全部满足的情况下,才命中某一个审批流程,同时呢,多个审批流程之间的话呢,它也是有这样子的一个先后的一个关系啊,在优数字越小呢,它的优先级越高,就同样多个条件都命中的情况下,他会用。
09:08
第一个最小的这一个数字的流程去进行后续的一个流转,那审批流程的这一块的管控的话呢,我们可以有就是允许他提交,或者是不允许提交,那允许提交的时候,我们也可以不启用流程,直接免审通过啊,那也可以是我们去指定某一个审批流程,然后去进行一个配置,那这里面的话呢,也可以用到我们的外部的审批流程,或者是我们自己内部的一些审批流程的一些呃定义,那这个的话就咱们可以按需的去进行一个调整。这块的话,在审批流程模块有介绍到,我们就不过多的去介绍了,那在这里面的话呢,我们就是会有具体提示,他命中的是哪一个审批流程,像这里的话,我们是命中了,就是让他必须改进,虽然是必须改进,但我配置的是个免审,所以他直接就自动审批通过了,我们可以直接给他执行,那执行的时候的话呢,我们会有一些策略,就是允许他执行出错后终止,还是说执行出错后继续执行后续的一些circlel啊,那如果是在那circlel里面全部是DML语法的时候呢,也可以做为一个事物的一个执行,那这个的话,咱们按照不同的一个场景需要去选择。
10:17
然后包括咱们的备份策略,我们在做变更之前呢,会先去进行一个备份,那如果说我们对备份要求比较高,那我们可能就是备份失败了,我就把任务停止掉,我要备份成功才能执行,那也可以选择是我备份失败了后继续执行任务,那这个就咱们按需也可以定时的任务去执行,那我这里是按立即执行的方式去出发,那这个时候的话呢,呃,产品这边的话呢,就可以看到,就是我们会先去做备份,备份完成了我们再会去做一个真正的任务circle的一个执行,所以在这里面的话呢,我们对于DL,其实我们也会去背它的一个前进项,就是我们的整个create table的一个脚本会去背下来,然后对于D半呢,我们会去把。
11:00
Update以及delete的一个circle,改写成为一个select的一个方式,去背整行的一个数据成insert,然后这样子的话,如果有任何的异常,我们其实是可以通过这个备份的一个数据去进行后续的一个恢复,当然这里面的话呢,Create的一个脚本的话,它是不能够直接去用的,这里的话还是需要做一个调整,那未来的话,我们也会去进行一个更直接的一个DDL回购脚本的一个提供,那数据的话,因为这里是没有命中到合适的数据的,没有命中到需要更新的数据,所以这里面的话呢,它其实是没有备份到实际的一个内容。那我们再回到任务里面来看它这里的一个执行,而那低调的话呢,刚刚在执行期间,它其实会有很多的一个状态参数的一个提示,那这里面的话呢,在运行期间的这些参数呢,也是可以进行一个调整的,那所以在这里面的话呢,就是大家如果说啊,它有延迟,然后它迟迟没有办法去进行一个切表,那这个可能就要具体来看他的b logg本身位点是不是在刷新,如果在刷新,那可能就是正常的在追,但是可能由于网络各方面的一个原因,导致了他没办法完全追评,而没办法去进行一个切换,所以这个的话,我们可以结合他的一个参数的一个刷新的一个情况,来去判断任务是不是正常在推进的。
12:19
那对于online第二麦的话呢,也是一样的,我们也是会在呃执行期间根据组件为一键的方式去分段去扫描,那这个的话运行参数呢,也是可以在执行期间按需去进行的一个调整,那这个的话呢,是整个SQL任务的一个内容的一个介绍。
我来说两句