2014年5月10日 星期六

oracle client 安裝 - 在SQLServer建立Linked Server

在SQL2008 R2或SQL2012要建立ORACLE 10gR2 linked server

原本用ODBCX64先建立連線,但一直有以下的錯
[Oracle][ODBC][Ora]ORA-12154: TNS:could not resolve the connect identifier specified

GOOGLE後,大都是說需要再安裝X64的ORACLE CLIENT,覺得好麻煩,再找了一下相關資源後,發現應該只需要在那台SQL SERVER 主機安裝ORACLE ODAC應就可以連結ORACLE了。

參考: Installing 64-bit Oracle ODAC 11.2 to Microsoft SQL Server 2008 R2 x64

記錄一下設定方法.

先去ORACLE網站下載ODAC xcopy版
原本先下載12c Release 但建好連結後,卻有"ORA-03134: Connections to this server version are no longer supported."的錯,所以就下載11.2 Release 6的版本

64-bit ODAC 11.2 Release 6 (11.2.0.4.0) Xcopy for Windows x64


解壓縮後,因為我只需要安裝ORACLE OLEDB(在SQL SERVER 2008R2的Linked Servers Providers下要可看得到OraOLEDB.Oracle) ,所以在DOS下執行以下安裝指令即可,其中安裝目錄是自已訂的
install.bat oledb c:\oracle_odac true

其他安裝指令可參考解壓縮後目錄ODAC112040Xcopy_64bit下的readme.htm有安裝說明。


按照參考文章的說法,還要做以下設定
1.在系統環境變數下設定一個變數 ORACLE_HOME = C:\oracle_odac,並在Path變數下加入以下C:\oracle_odac;C:\oracle_odac\bin; 
2. 打開regedit 在HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\KEY_true 下,加入FetchSize =1000 (我是建QWord 64位元)

再將tnsnames.ora copy到c:\oracle_odac\network\admin\下,tnsnames.ora內容如下

ORAC=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.123)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ORACDB)
    )
  )


接著執行以下tsql建立Linked Server

exec sp_addlinkedserver  
'ORAServer',   --@server 就是linked server名稱
'Oracle',  --@srvproduct 隨便寫通常會寫DB產品
'OraOLEDB.Oracle',   --@provider使用哪種provider
'myOracle' --@datasrc 要連結的Database name

再建立登入oracle的帳密

exec sp_addlinkedsrvlogin 'ORAServer', 'FALSE',NULL, 'user_name', 'user_password'

然後在Linked Servers Providers下的OraOLEDB.Oracle,按右鍵點選Properties,進入後,將Allow inprocess 選項勾選起來 ,若不勾選,則執行時會有以下錯誤

Msg 7302, Level 16, State 1, Line 1
無法建立連結伺服器 "accs" 的 OLE DB 提供者 "OraOLEDB.Oracle" 的執行個體。


最後重啟動SQL SERVER,然後下一段sql 測試一下

select * from openquery(ORAServer,'select * from all_tables')

應該就可順利查詢了。


ps.如果有安裝PL/SQL Developer工具,則需使用32bit的元件才能連線

32-bit ODAC 11.2 Release 6 (11.2.0.4.0) Xcopy for Windows X86 
建立另一個目錄進行安裝即可,例  install.bat oledb c:\oracle_odac32 true
然後在系統環境變數建立另一個ORACLE_HOME32 變數及path。
在regedit下的機碼位置為HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_true。

安裝後,開啟 PL/SQL Developer ,在Tools\Preferences\Connection下設定Oracle Home = ORACLE_HOME32及OCI library=C:\oracle_odac32\oci.dll
然後再重開PL/SQL Developer應可正常連線。
   
 






publish error allowDefinition='MachineToApplication'

一個老舊的aspx web form專案,調了一些功能建置成功,但進行部署時顯示以下錯誤。 在應用程式層級之外使用註冊為 allowDefinition='MachineToApplication' 的區段發生錯誤。錯誤的原因可能是虛擬目錄尚未在 IIS 中設定為...