市面上最有名的DB Tool應該是要收錢的TOAD,但免費的話有SQuirrel SQL Client,係由Java編寫,使用JDBC連結。而若專用於Oracle的免費工具,是Sql Developer,也是使用JDBC,不用像TOAD要事先裝Oracle Client。這樣的工具雖然方便,但要透過VPN連遠端DB,效能是非常的低落,不得已也只能回到最原始的使用Terminate,下Script產出結果後用FTP傳回。

  預先寫個Oracle的export script,叫exp.sql好了,內容如下:

set echo off
set feedback off
set linesize 9999
set pagesize 0
set sqlprompt ''
set trimspool on
spool log.csv

select log_id||','||
  log_date||','||
  log_memo
from log_tablewhere order by sp_id;

spool off

  如此,在VPN連上遠端的Terminate後,su - oracle切換到oracle帳號,將該script傳到其home目錄下,

下達:sqlpulse [id]/[pwd]@[sid] @exp.sql,就會根據exp.sql的指定寫到log.csv檔了。

  上述是目前進行專案遇到stored procedure的效能瓶頸,所以在procedure加insert到log的指令查看是瓶頸所在,所以匯出log.csv後,該怎麼分析呢?我還是比較擅長使用Perl,微軟轉投資的ActiveState的Komodo IDE是Windows下最好的script IDE,可惜要錢,現在也跟上免費的潮流,出了免費的Komodo Edit,試用了一下,需要像UltraEdit一樣事先config命令,不然沒有像Komodo IDE一樣有個play的按鍵,也難怪叫Edit啦,試用結果還不是很順手,使用EditPlus run Perl較多。

  分析的話,在Perl裡面怎麼寫,我通常把log.csv純文字內容貼在__DATA__之後,再用while (<DATA>) {…}逐筆取出,使用split以逗號分隔進行解析。

while (<DATA>) {

    chomp;

    @comma = split/,/;

    …

}

  甚至組成一行行的insert sql寫進MySQL做查詢,比如我可多出一個欄位計算這筆記錄和上筆記錄時間差,若沒有運算的需要,其實直接在exp.sql組成insert sql就OK了。

  做系統開發到現在,我從不奢求之前寫code或現在合作的對象,程式能力有多好,但就是有人常常寄厚望某個萬能工具能為自己做解析、改善。其實是有這個萬能工具,如IBM的Rational Rose,除了要價不斐,更需要去學它的方法論以及貫徹執行才有它的value;當然也可以用於重構,可是重構層次也是到程式技巧,和部份的Design Pattern重構,遇到架構層次的議題,目前應該還做不到。

  就像蔡學鏞曾列出一條Anti-Pattern,想做產品一勞永逸的賣,但實際卻必須接專案維持財務運作。一樣的道理,就有同事很天真想買一套EA(Enterprise Architecture)就從此靠它了,這遇到新案或可有作為,遇舊案需要後續維護,誰願接手。這也是我老用Perl寫些臨時小工具的緣故,快又即時,也因此不必去想把Perl寫成Super Tool。

arrow
arrow
    全站熱搜

    Jemmy 發表在 痞客邦 留言(0) 人氣()