嘗試載入 Oracle 用戶端庫時引發 BadImageFormatException。問題記錄

來源:互聯網
上載者:User

標籤:acl   use   net   管理   win   它的   使用   輕量   用戶端   

1公司電腦是win7 64位旗艦版,剛來時配的新電腦,4G+i5這個配置不裝64位那算是浪費了。誰知道一切裝完畢後,開啟項目卻連不上oracle資料了...

首先是pl/sql連不上,我在本地裝了個oracle 11g r2 64位的。裝了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裡在你每建一個訪問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選項,預設用戶端選項也就一百多兆。

嘗試載入 Oracle 用戶端庫時引發 BadImageFormatException。問題記錄

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.