電腦是win8 64位,安裝oracle 11g r2 64位的,誰知道一切裝完畢后,打開項目卻連不上oracle數據了...
首先是pl/sql連不上,裝了oracle服務器,應該是不用再裝客戶端,pl/sql應該就能連上的,應為oracle服務器版本自帶了客戶端的那些管理工具和功能。但是pl/sql一直報個錯啊!大概意思是說找不到32位的oci.dll文件之類的錯誤,網上一搜,說pl/sql裝在64位系統上,要連64位的數據庫,還得裝個32位的客戶端。而我又不想再去裝個客戶端了,感覺太大了,再說裝了oracle數據庫,應該是不用再裝客戶端了的。無奈只好下了個IntantClient(輕量級客戶端包)。下面說說這個IntantClient(輕量級客戶端包)與傳統的Oracle Client 的區別:
instanct client 分為幾個包,其中basic基本只有oci庫文件
其它常見的包還有sqlplus,jdbc等,都運行於basic包之上。
而
Oracle Client不光包括instant client,還包括很多工具。
從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配置運行了,因為vs運行的是32位最好裝個32位客戶端應該就沒問題了。