從10G開始,Oracle提供了一個較為輕量級的客戶包,叫做Instant Client. 將它安裝好后,就不用再安裝龐大的Oracle Client了.
這樣一來,只要客戶端下載Instant Client,直接解壓,設置Path就ok了。
具體設置如下:
1、下載32位Oracle InstantClient
2、將Oracle InstantClient解壓到某目錄
3、打開PL/SQL,在perference里面設置OCI Library和Oracle_home,例子如下:
OCI Library=D:\instantclient_11_2\oci.dll (剛剛InstantClient的解壓目錄的OCI.DLL文件)
Oracle_home=D:\instantclient_11_2 (剛剛InstantClient的解壓目錄)
4、設置環境變量(修改NLS_LANG和TNS_ADMIN環境變量)
對於NLS_LANG環境變量, 最好設置成和數據庫端一致, 首先從數據庫端查詢字符集信息:
SQL> select userenv('language') nls_lang from dual;
NLS_LANG
----------------------------------------------------
AMERICAN_AMERICA.ZHS16GBK
右擊"我的電腦" - "屬性" - "高級" - "環境變量" - "系統環境變量":
1>.點擊"新建", 變量名設置為"TNS_ADMIN", 變量值設置為"D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN", 點擊"確定"; (64位ORACLE的TNSNAME.ORA文件的目錄)
2>.點擊"新建", 變量名設置為"NLS_LANG", 變量值設置為"AMERICAN_AMERICA.ZHS16GBK", 點擊"確定"; (數據庫字段集)
最后點擊"確定"退出.
至此,重新登陸PLSQL就可以用了
好。pl/sql 是可以登錄了,但是咱asp.net程序還是連不上啊!到connection.open()的時候,就報:“嘗試加載 Oracle 客戶端庫時引發 BadImageFormatException。如果在安裝 32 位 Oracle 客戶端組件的情況下以 64 位模式運行,將出現此問題。“。這個大概是說我asp.net 程序不應該是用32的客戶端去訪問64位的數據庫,我是這樣理解的。但是我裝了64的oracle 不就相當宇裝了64位的客戶端嗎?裝的那個輕量級的32位客戶端只是方便pl/sql來訪問oralce數據庫的。這個問題網上給出了很多回答。大多是,改項目的屬性里的生成選項里的目標平台:改為x86.意識是把項目當成32位運行。每個項目都照着改了,還是不管用。網上還有說,把網站項目屬性里的web項里的服務器改成iis不使用vs自帶的web deleloper ment 服務,應為它的進程為webDe.webServer.exe 是一個32位的進程,反正說了很多。這個方法還是可以。你改完后,項目確實可以運行,並訪問oracle64位數據庫了。但是我個人總覺得這種方法很麻煩。而且這樣你的本地iis里在你每建一個訪問oracle數據的項目時,iis里就會多一個項目,而且這樣也不穩定時常會報一些奇怪的錯誤。最后本來打算裝回32位系統的,后邊在網上逛逛,自己靜下心來想想...
最后我發現是不是那個輕量級的包不行啊!最后還是把那個32位的oracle client安裝包執行安裝了下,安裝時選的管理員。而且以前遇到過asp.net連不上oracle,是oracle安裝文件夾的權限問題,所以我又對oracle所在的文件夾加netservices用戶完全控制的權限。再重啟, OK!搞定,程序居然能夠連上了。。。。其實我自己也不知道是哪里的問題,到底是那個輕量級的包不行呢!還是那個權限問題...總之這樣就好了。就此記錄一下
2013-07-07 Note:今天還是同樣的問題,經過再次的實驗,證明是那個 輕量級的客戶端包不行,一定要是那個安裝版的,安裝版的安裝后的目錄里面比那個輕量包解壓后的目錄里面要多出很多文件,由此可見,那個輕量包里面的oci.dll文件解決 pl/sql 連64位oracle的問題可以,但是咱C#程序要連64位oracle,還是得裝那個安裝版的客戶端,可以不用裝Administrator選項,默認客戶端選項也就一百多兆。
客戶端下載點這里。