【茶包射手日記】ODP.NET鬼故事一枚

今天幫同事追查系統改版後的怪問題一則,挺離奇的,讓我有見鬼的fu。印象中是我第二次遇到,而兩次的受害者都是同一位同事,讓我不禁懷疑IT界應該也要有"靈異體質"這種說法。

不是很確定問題根源,只簡單記錄一下發生情境跟解決方法:

  1. 修改了Oracle資料表,新增一個欄位。例如: Table T1原本有A, B, C, D欄位,新增欄位E。
  2. 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。
  3. 因使用ASP.NET部署專案,MyCom毋需變更,故bin\App_Code.dll未更新。
  4. WebPage.aspx程式負責呼叫MyCom.Query(...)取得DataTable加以顯示,本次也未修改或更新,但發現新增資料表欄位後傳回結果有異。
  5. 我寫了一段程式模擬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();
  6. 結果很有趣,欄位名稱只出現A, B, C, D, X, Y欄位,E欄位未出現,但事實上E的值卻出現在X欄位,而X的值出現在Y欄位,Y的值不見了。更好玩的是,原本Y欄位長度只有一個字元,而X值有六個字元,被錯置於Y欄位後,就只顯示第一個字元。
  7. 故意重存web.config讓Web Application重啟,怪異結果依舊。
  8. 最後在IISRESET後,問題才劃下句點。

我懷疑這是ODP.NET或Oracle Client快取住Table的Schema資訊所造成的資料錯置,不過無力鑽研深究,反正在其他專案中未曾耳聞有此種狀況,加上ODP.NET 9207已垂垂老矣,就算有Bug也不會有解藥,故留下篇筆記,供其他朋友也遇此等靈異經驗時參考。

歡迎推文分享:
Published 11 November 2010 10:04 PM 由 Jeffrey
Filed under: ,
Views: 6,064



意見

沒有意見

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<November 2010>
SunMonTueWedThuFriSat
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication