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

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

我举个简单的例子,一直以来我们以为业务需要总是会有一些导数据的需求,用到的就是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测试复杂多了,感兴趣也可以看一看。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2017-05-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序人生

[技术与产品] Bower & Brunch

今天写作时间太短,稍微探讨一下bower和brunch这两个web前端assets management的利器。 Bower 管理dependency一直是程序...

3729
来自专栏Guangdong Qi

iOS APP版本构建版本无效

2373
来自专栏大史住在大前端

基于React-Native0.55.4的语音识别项目全栈方案

PC端基于Web API的语音识别方案可参考《【Recorder.js+百度语音识别】全栈方案技术细节》一文。

2313
来自专栏用户2442861的专栏

taohui.org.cn建站历程

一直以来都在Qzone、CSDN等上面写博客,偶尔有些想法就在Paas平台上搭建服务,新浪和曾经的google上都用过其appengine。可是在别人的平台上...

3091
来自专栏python开发教学

Oracle与Sql server的区别 一直搞不明白Oracle数据库和sql server的区别,今天我特意查资料把他们的区别整理出来

Oracle数据库:Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。

1373
来自专栏黑白安全

链接地址中的target=”_blank”属性,为钓鱼攻击打开了大门

现在,许多主流的互联网服务提供商都会在网页的链接地址中加入target=”_blank”属性,而这绝对是一种非常不安全的行为。不仅如此,target=”_bl...

822
来自专栏知晓程序

微信小程序快速开发,两周内从创意到上线

2843
来自专栏腾讯云技术沙龙

刘敏洁:API网关和SCF深度结合应用

这次我们主要介绍面向于API网关和SCF深度结合应用,API网关与SCF结合可以形成比较完整的Serverless方案。

4283
来自专栏人人都是极客

手把手教你如何向 Linux 内核提交代码

说到开源大家都会想到黑客和极客,开源的概念最早也是在极客们推出和推崇的。开源的提倡旨在开放源代码使之更方便自由的使用和再创作。随着这一思想的发展,衍生出诸多的开...

2222
来自专栏面朝大海春暖花开

对java前后端分离的理解

在工作期间,无非就是ui设计页面,前端开发html,之后将做好的页面交给我,我负责后台逻辑一件html的页面渲染。

2.2K5

扫码关注云+社区

领取腾讯云代金券