2006年9月23日 星期六

除錯心法2







心法4:有時除錯不是只有靠技術,要靠正確的觀念跟概念.
心法5:比對法,找出異動點.
心法6:先畫出部署的架構圖(概念或是實際的)
解說:
那一個最近幾個月發生的除錯案例來解說好了,在部門內部會議中,有其他同仁反映了一個問題他們已經弄了一個多月還沒有搞定的問題.
他們使用ETL工具在對AS400與AIX進行轉檔,同時也會對MS SQL進行轉檔.
那個ETL工具是在執行在AIX上面,使用的是AIX上面的ODBC設定去對DB2或是Wiindows 上的MS SQL 做存取.
他們發現對MS SQL 一直無法正確存取並且寫入資料

其中的一位處理的同仁D在白板上說明了他的觀點 , 他認為是 MS SQL Server上面的ODBC 版本不對 ,
他認為要更新 MS SQL Server上的 MDAC 套件...

我當場聽了就有點昏去 , 那位同仁D據稱是DB高手 , 可能是我的表情太不好看了 , 老闆當場就將這個問題指派給我處理

隔天早上 , 我去找了相關同仁詢問必要的資訊 , (心法2:聆聽報案者的解說)
其中一個負責的同仁J告訴我 , "他們的作業原來是可以的" , [表示不是他們的程式或是設定錯誤]
我又去問了另外一位同仁B , 他說他們存取的MS SQL Server資料庫的機器並不是放在機房中, 而是擺在 IT 同仁的腳下,最近大家剛剛換了位子.[解說:我們一般的個人腳下的機器都是使用DHCP而不是固定IP]<-心法5,找出異動點.這裡發現有一個異動點
我又回過頭去請同仁J幫我在AIX上面叫出ETL使用的ODBC設定檔.
這麼一檢查,發現他們所使用的連到那台MS SQL 的設定是使用IP 而不是使用 Hostname 設定.
於是我請同仁J修改設定將原先的IP改成那台MS SQL 機器上的新的IP.並且將這個ODBC設定儲存.
然後再請網路管理的同仁K開放防火牆,讓AIX可以連到那個MS SQL機器(當然是設定成新的IP)

就做了這麼幾件事, 接著請同仁J再去測試 , 馬上就成功了.
一個困擾他們至少一個多月的問題,在半個早上就被我解決了.

這中間,所有的作業都是其他同仁進行的,我只有出一張嘴而已.
ETL 我不熟 , AIX 上的ODBC 設定檔的叫出 ,我也不會,防火牆的設定修改,我也不會.
那我憑什麼可以把問題解決?我靠正確的觀念與概念.

首先
同事D提到的MDAC 那個是DB Client 端的存取元件 , 但是在這個問題中 , 我們的DB Client (ETL)是在AIX 上面, 不是在 Windows 上 , 更何況是要把 MDAC 裝到 DB Server端去, 所以這個根本就是個錯誤的解法.
(心法6畫出架構圖,我在一開始的會議中就把圖畫出來,並且分出誰是DB Client 誰是DB Server的腳色,我才能快速的去確認問題的真正的癥結點在哪一部分,不然按照同事D的建議解法,可能到今天還在找問題出在哪裡!!!)

以上案例是我碰到的並解決的真實案例.我無意拿這個案例去攻擊或者是貶低任何人.只是拿來作為除錯心法的解說案例之一.
所以你不會看到內文中提到我們公司的名稱或是部門名稱或是同仁的姓名.

如果有其他同仁看到了,你會知道我是誰.但是我只是拿出來做解說,並且作為自己的除錯心法中的一個案例.

心法7:除錯有時需要一點運氣.
是的,有很多問題我相信別人也能解,但是我常常都能在別人解了很久解不出來的狀況下,把問題給找出來並且處理掉.
有時要靠一點運氣.但是人不會一直都有好運氣,所以我還是要靠正確的觀念與知識去除錯.

除錯心法-1

身為 IT 的技術人員 , 有時要處理的問題不是只有不懂電腦的End User,有時連IT 內部的人員或者是程式設計師也都會碰到各式奇奇怪怪的問題.

我勉強算是個中上等級的技術人員,所以常常會有其他人處理過但是仍然無解的問題,丟到我這裡,希望我能夠將這些問題解決.

就經驗來說,我大概有90%都能夠把問題解決.
所以來說說的我除錯心法吧! 都是有點零散的片段,必要時我會挑出一些案例來解說.可能會發成多個片段


心法1:重現犯案現場
解說:如果有人告訴我,他的程式或是系統出現了什麼錯誤.我會希望他能夠讓錯誤重現.也就是說在什麼樣的步驟下或是程序下,照著做一遍就會出現相同的錯誤.
如果不能重現,那麼錯誤幾乎就很難抓到.

心法2:聆聽報案者的解說
解說:有時候來報案求助的人可能是個電腦白痴,但是也有可能是個與某個問題奮戰了很久的程式設計師.有時候她們已經快要找到問題的關鍵了,只是沒有意識到.

心法3:不要完全聽從報案者的解說
解說:此點好像與心法2互斥.但是它很重要.
說了來報案者有可能是電腦白痴也有可能是個糊塗蛋,可能完全一問三不知,或者是胡說八道一通.如果你照著他們的說法去除錯,可能永遠也查不到問題.