前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >脚本改进的一点体会(r12笔记第60天)

脚本改进的一点体会(r12笔记第60天)

作者头像
jeanron100
发布2018-03-21 16:06:06
6140
发布2018-03-21 16:06:06
举报

一直以来我们想要推进内部的自动化系统,但是总是会遇到各种各样具体的问题,有时候我们准备好了,但是总是会有一些因素的干扰,再加上工作时间的安排,有些事情就一拖再拖。《人民的名义》里说得好,打铁还需自身硬,不管是谁说的,这个话是有道理的。所以不能指望平台或者系统把我们的工作全都能够做好,我们也需要完善不少的东西。

我举个简单的例子,一直以来我们以为业务需要总是会有一些导数据的需求,用到的就是SQL*Loader,记得刚开始接触这个线上系统的时候,是一个小机环境,也听之前的同事分享过一些经验,不能在导入过程中退出,一定要提前准备这个,注意那个,一旦出错,那就是核心业务的重大故障,所以每每到了这个时候,我都额外小心,原本能够脚本做的事情都立马缩了回来,采用手工的方式来做,比如有2个脚本,我基本会手动完成下面的工作。

1.检查文件的格式,如果是windows环境过来的,就使用dos2unix转换一遍

2.检查文件的字符集,绝大多数情况下开发提交过来的是utf8的格式,而数据库的字符集是GBK,(有些数据库是UTF8的)所以每次我都需要iconv转换一遍,认真确认一遍,而在我用的Solaris终端上,显示中文还有限制,所以我就只好切换到一台Linux环境上,把它作为客户端来检查中文的显示,偶尔有几次,脚本里碰到了BOM字符,碰到的次数很少,但是总有那么几次。

3.我们所在的环境是属主用户和连接用户分开的,所以开发同学提交脚本的时候,压根不知道属主用户,所以他们干脆就把属主用户的地方空出来了,这样一来,每次我都需要手工补充,使用vi的方式来修改。有同学说用sed啊,但是心里老是纠结,因为这个文件里面是最终的数据,就怕稍不留意sed的不好就把数据弄乱了。

4.然后是使用sqlldr命令来导入数据,这个过程其实数据量不会太大,顶多几十万,但是这样类型的文件有时候2个,有时候3个,有时候1个,所以也是为了“稳定”而选择手工敲sqlldr命令。

这样一来,一个操作有如此多的地方,所以每每推进自动化平台的操作时,总是困难重重,总是有特别的地方,总是有一些额外需要注意的地方,但是细想这个工作量,其实难度不大。

注意的那些地方每次都要检查一遍,每次都要修改一遍脚本,每次都要认真的核对脚本的执行情况。突然发现忍耐性太好其实也是一个缺点,这也是我在DTCC上想分享的一个想法。

直到一次变更,让我觉得实在不能这么做下去了。因为开发同学一下子提供了10多个导数据的文件,这样的操作一个一个来做,不光容易出错,而且自己一个一个盯起来还很费力,我决定认真的做一些基本的改动,也反反复复明确了哪些可能出现的问题。脚本写好了,自己对比了一番,为了稳妥,还是一个一个执行脚本,分阶段验证,比原来提高了一个层次。

这样一来我的脚本就大体成了下面的样式,会生成几个阶段性脚本。

1. 修改文件的格式,统一格式化 dos2unix * 2. 修改提交的sql脚本字符集 for tfile in `ls -l *.sql |awk '{print $9}'` ;do echo "iconv -f utf8 -t gbk " $tfile" -o "$tfile".new" ;done |tee tochar.sh 3.修改数据文件,补充属主用户 for tfile in `ls -l *.ctl |awk '{print $9}'` ;do echo "sed -i 's/swd_drawcard/test.swd_drawcard/'" $tfile;done |tee prepare.sh

4.批量生成导入脚本 for tfile in `ls -l *.ctl |awk '{print $9}'` ;do echo "sqlldr xxx/xxx control="$tfile;done |tee run.sh

然后第二天,又收到一个批量导数据的任务,而且还算是加急,于是乎,我的脚本立马优先级提高了,我又做了些改动,基本做到一键式,生成多个阶段脚本,这样一来,我只需要手工执行3个shell脚本,无须任何参数,这个过程下来,一两分钟即可搞定。于是乎,这个任务就这样被逼迫出来,改进好了。

而如果后期要继续推进平台化,推进自动化,我觉得还是有很大的空间。当然需要更多的检查,稳定是第一位的。

所谓实践出真知,有的时候要推进一件事情很容易,看起来容易做起来难,其实还是缺少一定的动力。而如果给你的不是动力,是压力,也是一种变相的动力,最终能够促进事情的改进,减少一些重复冗余的工作,也是工作幸福感的一点体现吧。

而多说一句,我就提两个github工具吧。如果自己的一部分工作内容可以分享出来,比如一些脚本等等,你通过很正式的方式发布出来就会额外做更多的工作,而不是一封邮件,一个链接那么简单。

前段时间自己把批量测试MGR的脚本发布出来了,这个过程会让你感觉需要认真的多,感兴趣可以看看。

https://github.com/jeanron100/mysql_mgr_test

另外一个上海的兄弟kinghow写了一个小工具。

https://github.com/kinghows/MySQL_Watcher

这功能比我的MGR测试复杂多了,感兴趣也可以看一看。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-05-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档