最近因為公司用的 Oracle 資料庫升級,連帶著原本 server 上的 Oracle Client也要跟著升級,不同版本資料庫的不同行為,讓部份原本正常的程式,少部份出現一些詭異的狀況,讓我們抓蟲抓的很辛苦。
這次遇到的問題是在把 Oracle client 升級到 10g 之後,連到公司 11g 的資料庫,只是單純的針對一個 table 做 ‘SELECT’ 的動作,居然就停住回不來了,同一個資料庫的其他 table 並不會有問題,而這樣的狀況在原本的 8i client 並不會出問題。
只是一個簡單的 SQL。
SELECT * from A WHERE A.column1 = ‘XXX’
經過一連串的分析,發現這個有問題的 table 並不是一般的 table,而是直接利用 db link 到另外一個資料庫的 table。後來經過討論跟尋求支援之後,得到一個特別的解法。因為在 11g 的資料庫裡,如果針對單一個並不存在 local 資料庫的 db link table 做動作,就會出現停住的問題,這個時候只要加入任何一個存在本地資料庫的 table 進去 SQL 裡,就不會有問題了。
不過因為我們的 SQL 用不到其他 table,所以就加入 dual 到 SQL 裡。
修改後的 SQL 就像這樣。
SELECT * from dual, A FROM A.column1 = ‘XXX’
結果問題就解決了,為什麼會有這麼神奇的問題跟解法,這可能就要問 Oracle 原廠才能知道了。
沒有留言:
張貼留言