【茶包射手日記】ODP.NET鬼故事一枚
0 |
今天幫同事追查系統改版後的怪問題一則,挺離奇的,讓我有見鬼的fu。印象中是我第二次遇到,而兩次的受害者都是同一位同事,讓我不禁懷疑IT界應該也要有"靈異體質"這種說法。
不是很確定問題根源,只簡單記錄一下發生情境跟解決方法:
- 修改了Oracle資料表,新增一個欄位。例如: Table T1原本有A, B, C, D欄位,新增欄位E。
- App_Code裡有個元件MyCom,提供DataTable Query(string p)方法,以ODP.NET 9.2.0.7執行SELECT A.*,B.X,B.Y FROM T1 JOIN T2 ON .... WHERE A.A = :p,傳回DataTable。
- 因使用ASP.NET部署專案,MyCom毋需變更,故bin\App_Code.dll未更新。
- WebPage.aspx程式負責呼叫MyCom.Query(...)取得DataTable加以顯示,本次也未修改或更新,但發現新增資料表欄位後傳回結果有異。
- 我寫了一段程式模擬WebPage動作以便偵錯:
DataTable t = MyCom.Query("AAA");
foreach (DataRow r in t.Rows)
foreach (DataColumn c in t.Columns)
Response.Write(String.Format("<li>{0}={1}", c.ColumnName, r[c]));
Response.End();
- 結果很有趣,欄位名稱只出現A, B, C, D, X, Y欄位,E欄位未出現,但事實上E的值卻出現在X欄位,而X的值出現在Y欄位,Y的值不見了。更好玩的是,原本Y欄位長度只有一個字元,而X值有六個字元,被錯置於Y欄位後,就只顯示第一個字元。
- 故意重存web.config讓Web Application重啟,怪異結果依舊。
- 最後在IISRESET後,問題才劃下句點。
我懷疑這是ODP.NET或Oracle Client快取住Table的Schema資訊所造成的資料錯置,不過無力鑽研深究,反正在其他專案中未曾耳聞有此種狀況,加上ODP.NET 9207已垂垂老矣,就算有Bug也不會有解藥,故留下篇筆記,供其他朋友也遇此等靈異經驗時參考。
Comments
Be the first to post a comment