【茶包射手專欄】PB6.5連線Oracle 9.2i

PowerBuilder 6.5是化石級的軟體了,會從這篇TIPS受益的人全球可能不超過10個,不過前後處理過發生過兩次問題,花了我數小時,還是寫篇心得紀念一下。

同事最近升級了電腦,因為工作需要安裝了PB 6.5,但PB 6.5一直無法連上Oracle 9.2i的資料庫,PB跟Oracle Client重覆安裝反安裝十來次也無解,於是找我幫忙。

PB6.5真是個老軟體,內建的Native Oracle介面是7.3,額外可以多裝8.0.5,上網找到的一些說明,似乎當時最新的OS是Win95,媽呀,超過十年囉! 可是很怪,除了這台新電腦外,還有多台PC也都是用PB6.5連Oracle 9.2i,行之多年。可見,它還是具備連線Oracle 9的能力,只是不知為什麼在這台機器上不行,一直會彈出Error while trying to retrieve text for error ORA-*****。(東改西改的過程中,ORA錯誤碼變過好幾次,總之,用這些訊息Google後,唯一較能確認的就是這個錯誤跟PB沒法順利找到Oracle Driver有關。)

由sqlnet.log中看到如下的訊息:

Fatal OSN connect error 12203, connecting to:
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=BEQ)(PROGRAM=oracle80)(ARGV0=oracle80ORCL)(ARGS='(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))')))(CONNECT_DATA=(SID=ORCL)(CID=(PROGRAM=pb60.exe)(HOST=MyClientBox)(USER=TroubleShooter))))

  VERSION INFORMATION:
    TNS for 32-bit Windows: Version 2.3.4.0.0 - Production
  Time: 07-OCT-08 17:32:45
  Tracing not turned on.
  Tns error struct:
    nr err code: 12203
    TNS-12203: Message 12203 not found; No message file for product=NETWORK, facility=TNS
    ns main err code: 12538
    TNS-12538: Message 12538 not found; No message file for product=NETWORK, facility=TNS
    ns secondary err code: 12560
    nt main err code: 508
    TNS-00508: Message 508 not found; No message file for product=NETWORK, facility=TNS
    nt secondary err code: 0
    nt OS err code: 0

對PB6.5連線ORACLE的原理毫無所悉,當然也無法推斷哪個環節出了問題。在這種困境中,可以向誰尋求救贖了? 沒錯,還是Process Monitor!

開啟Process Monitor後,設定Process Name = pb60.exe作為Filter,再開啟PB6.5連線Oracle故意引發錯誤,再由File/Registry存取Log分析,另外還比對了一台正常機器連線成功的Log當做對照組。經過一番分析推敲,我猜測PB6.5找到Oracle Client版本的過程如下:

  1. 先找到pbo7306.dll
  2. 接著嘗試在所有PATH環境變數的路徑中找尋ociw32.dll, 都找不到再開始找ora805.dll, 再找不到找ora804.dll, ora803.dll, ora73.dll。也就是說它會從較高版本開始找,萬一找不到才用較低版本。

在成功的對照組中,oracle\ora92\bin\ociw32.dll會被發現,因此PB6定調採用Oracle9i Client。而有問題的機器,則不知誰在windows\system32下放了一個ociw32.dll,而system32目錄會在PATH各路徑之前被搜索,在system32下發現ociw32.dll就無法協助PB6釐清Oracle要用哪一版。

我將system32下的ociw32.dll給移除,PB6即可連上Oracle9i。

最後我的心得是,要讓PB6透過Oracle 9i Client連接資料庫,請把握以下原則: 清除program files\sybase\*, windows\system32 下的ociw32.dll,安排PATH環境變數內的路徑順序,oracle\ora92\bin排在第一個會最好。

歡迎推文分享:
Published 17 October 2008 06:58 AM 由 Jeffrey
Filed under: ,
Views: 14,629



意見

# SUYIA said on 26 March, 2009 12:50 AM

PB 10.5 連兩個 ORACLE SERVER , 一個在PB 的DATABASE tooL 中 可以RETRIEVE STORE PROCEDURE  , 另一個則是RETRIEVE 任一個都會出現

錯誤訊息:

ORA-06550:第1行,第20個欄位:

PLS-00302:必須宣告元件'P_HEALTH'

ORA_06550:第1行,第16個欄位:

PL/SQL:Statement ignored

請問有解嗎?

你的看法呢?

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

5 + 3 =

搜尋

Go

<October 2008>
SunMonTueWedThuFriSat
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

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

文章典藏
其他功能

這個部落格


Syndication