如何在64位win7下通过ODAC来访问Oracle服务器
????? 最近公司跟我換了新電腦:2代i3+8G內存,由于32位的win7最多只能用3.25G內存,而用ramdisk4g劃出4.75G來作硬盤又覺太浪費,遂想用64位的系統.
????? 從網上下載了冷風的64位win7后先裝系統再裝驅動再裝常軟件,除部份驅動需重新安裝外,一路安好.但是在安裝ODAC組件時,出了如下問題:
????? 1.常用的plsql與sqldbx只有32位版本,只能使用32位的ODAC,
? ? ? 2.在64位系統上,如果使用32位的ODAC,asp.net程序時會報異常:嘗試加載Oracle客戶端庫時引發BadImageFomatException。如果在安裝32位Oracle客戶端組件的情況下以64位模式運行,將出現此問題。
? ? ? 3.32位的ODAC安裝時無法向注冊表寫入必要信息,分布式服務Oracle Services for MTS無法安裝.
? ? ? 后來在網上瘋狂搜索,發現出了這個問題的人還不少,其實,Oracle的客戶端版本與服務端版本沒有必然限制,32/64位的客戶端訪問32/64位的服務器沒有任何問題,32位的客戶/服務端裝在32位的操作系統上,32/64位的客戶/服務端裝在64位的操作系統上也沒有任何問題,主要是這些客戶端與其它程序的兼容性問題.看來64位的系統想普及,還需時日啊.
????? 當然,解決的方法也是有的,主要思路就是不管32/64位的ODAC都一并裝上去,然后plsql與sqldbx通過32位的ODAC來訪問數據庫,asp.net程序通過64位的ODAC來訪問數據庫/使用分布式事務.
????? 首先,安裝64位的ODAC(install.bat oramts).由于操作系統也是64位的,這樣就只需按照常規方式,在環境變量(Path)里加上其目錄與其bin目錄的路徑,然后去注冊表里修改語言設置(NLS_LANG),再加上監聽文件路徑(TNS_ADMIN),asp.net程序就可以通過64位的ODAC來訪問數據庫/使用分布式事務了.
? ? ? 然后,安裝32位的ODAC(install.bat basic).由于操作系統是64位的,無法操作注冊表,這樣安裝后無法在注冊表里寫入必要數據,使用時也無法從中讀取必要設置.這樣相關的設置就只能通過環境變量來讀取.還是在環境變量(Path)里加上其目錄與其bin目錄的路徑,然后在環境變量里加上語言設置(NLS_LANG)與監聽文件路徑(TNS_ADMIN),然后在plsql與sqldbx的程序設置里,將oci文件路徑強制指定為32位的ODAC路徑,這樣程序就可以正常使用了.
? ? ? 這里有幾點需要說明:
? ? ? 1.如上所述,在Path里既有32位ODAC的路徑又有64位ODAC的路徑,這樣相關程序會不會讀取錯誤呢?結論是不會,32位的plsql與sqldbx會跳過64位的oci去調用32位的oci,而64位的asp.net程序則會跳過32位的oci去調用64位的oci.這樣大家互不沖突
? ? ? 2.32位的程序與64位的程序可以共同指向同一個監聽目錄,使用同一個監聽文件.
? ? ? 3.環境變量的更改與生效之間有時間差,可以不到1秒,也可能幾分鐘,所以最可靠的方式是重啟.
?
? ? ? 補:現在我發現了一種更簡單的方式:對于64位系統上的64位的IIS,如果是IIS6,則通過命令行注冊,將iis的64位模式改為32位模式,如果是IIS7,則通過應用程序池的高級設置,將"啟用32位應用程序"設置為True,即可只用單獨安裝32位的ODAC.不過對于需要使用Oracle分布式事務的,則還是需要安裝64位的ODAC,因為32位的ODAC中的分布式事務無法在64位系統中安裝.
?
????? 參考的文章:
轉載于:https://www.cnblogs.com/ljzforever/archive/2011/10/20/2219400.html
總結
以上是生活随笔為你收集整理的如何在64位win7下通过ODAC来访问Oracle服务器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 语音复核
- 下一篇: PHP文件包含漏洞原理分析和利用方法