在Win8企業版64位環境下,串連Oracle11g 服務端,搞了整整兩天,特將過程分享出來,供有需要的同學參考。
本機環境:
1、服務端:Oracle 11g R2 64位,安裝路徑E:/Org12
官方下載:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html
2、用戶端:
(1)Instant Client ,輕量級,安裝路徑E:/Oracle11/client
http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html
(2)32-bit Oracle Data Access Components (ODAC) with Oracle Developer Tools for Visual Studio,安裝路徑E:/Org12/Product/11.2.0/client_1
http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html?ssSourceSiteId=otncn
用用戶端三種工具去連Oracle服務端,結果:
第一種:Oracle內建的SQL Deveploer工具,基本沒問題!也不需要什麼用戶端配置。
http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html
第二種,用PL/SQL 9.0去連,需要copy服務端的XX\app\oracle\product\11.2.0\server\network\ADMIN\tnsnames.ORA檔案到用戶端(1)的network\ADMIN下,並刪除不需要的部分,保留內容大致如下:
ORCL = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ) (CONNECT_DATA = (SID =ORCL) ) )
並用如下方式啟動PL/SQL
set Path=E:/Oracle11/clientrem 服務端路徑: E:\Org12\product\11.2.0\dbhome_1\BINset ORACLE_HOME=E:/Oracle11/clientset TNS_ADMIN=E:/Oracle11/clientset NLS_LANG=AMERICAN_AMERICA.AL32UTF8start E:/Oracle11/PL_SQL/plsqldev.exe
此時OK。
第三種,用第三方工具,OracleSQLHandle,內建JRE,很小,也很好用,網上搜一下。
我們公司開發的一個工具組件去連服務端,問題來了,先是報下面這個錯
懷疑是環境變數問題,多次嘗試後,加入用戶端路徑到Path中,報下面錯:
懷疑是字元集,用BAT修改為與Oracle服務端一致的編碼,錯誤改為:
這個問題網上尋找很久,嘗試的解決方案很多,但最終我的方案是:
1、刪除Oracle服務端;方法可以在網上搜,要刪乾淨;
2、刪除ODAC及所有組件;
3、保留Instant Client及其安裝目錄,主要是network\ADMIN\tnsnames.ORA
4、重新安裝Oracle服務端;
此時接所有用戶端串連完全正常!
小結:
1、剛開始懷疑是64位Oracle驅動路徑(x86)引起的bug,最後得出的結論是同一台機器,最好不要裝兩個Oracle用戶端 ,服務端+用戶端也不推薦,會引起一些潛在的問題,原因不明。
2、64位的Oracle服務端+32位的Oracle用戶端,會有一些潛在的問題,最好32位對32位。
3、安裝Oracle 11g R2 EX時,會在環境變數Path前面加上“e:\Org12\app\oracle\product\11.2.0\server\bin;;”,注意是兩個分號,須刪除一個;這個不知道是安裝程式的BUG?
參考的一些資源:
http://blogs.msdn.com/b/apgcdsd/archive/2011/05/25/linked-server-ssis-oracle.aspx
http://social.msdn.microsoft.com/Forums/en/sqldataaccess/thread/96048ef5-ef9e-4b1c-b8a3-5d7b91d55adb
補充:後來嘗試,還有一種解決方案:直接官方下載並安裝Oracle 32位用戶端即可。