天天看點

腳本改進的一點體會(r12筆記第60天)

一直以來我們想要推進内部的自動化系統,但是總是會遇到各種各樣具體的問題,有時候我們準備好了,但是總是會有一些因素的幹擾,再加上工作時間的安排,有些事情就一拖再拖。《人民的名義》裡說得好,打鐵還需自身硬,不管是誰說的,這個話是有道理的。是以不能指望平台或者系統把我們的工作全都能夠做好,我們也需要完善不少的東西。

腳本改進的一點體會(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測試複雜多了,感興趣也可以看一看。

腳本改進的一點體會(r12筆記第60天)