杨建荣的学习笔记

每天坚持一点点,个人微信公众号 jianrong-notes

  • 博客访问: 11935988
  • 博文数量: 1204
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-14 23:24
  • 认证徽章:
个人简介

每日发文,或技术、或总结,偶有日间小事也以为记,谓之学习笔记,成年累月1100多天,中间几乎没有间断,要旨只有一个:学习交流,共同进步 。 学习笔记精华整理,个人新书《Oracle DBA工作笔记》已开售,在京东,当当,亚马逊,淘宝,天猫均有售,欢迎选购。

ITPUB论坛APP

ITPUB论坛APP



APP发帖 享双倍积分

文章分类

全部博文(1204)

文章存档

2017年(135)

2016年(358)

2015年(360)

2014年(278)

2013年(48)

2012年(21)

微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

订阅
热词专题

分类: IT生活

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

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

  

   
 
 

阅读(54) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册