64位环境上SSIS连接oracle
SSIS 為了要能夠在64位元的機器上面讓SSIS存取Oracle,當然需要安裝64位元的Oracle Provider.但是最大的問題在於SSIS在設計階段時利用的BI Development Studio只有32位元版,因此在開發時若是要測試資料連線,會找不到對應的32位元Data Provider.
因此若是要解決方式就必須同時安裝32位元以及64位元的Oracle Client。
以下說明,在64位元 Windows環境下安裝Oracle Client & OLEDB元件的步驟(我的作業系統是Windows Server 2008 R2):
- 需要先準備32位元以及64位元兩種版本的Oracle Client,建議使用11.1.0.7.0版,因為如果是使用10.2.0.1 版本需要再安裝兩個 Oracle patch (# 4547817 & # 5383042) ,如果沒有上 patch 會遇到 ORA-12154: TNS: 無法解析指定的連線 ID 的問題。
- 如果系統上有舊的Oracle clients,請複製備份tnsnames.ora以及sqlnet.ora檔案。(位於 %ORACLE_HOME%/network/ADMIN/目錄下)
- 解安裝以及刪除舊的Oracle client以及安裝目錄(需要重新開機,才能夠刪除目錄)。
- 在64位元 SQL Server的機器上面執行Oracle 11g Client 的setup.exe,必須先安裝32位元版本。
- 在選取安裝類型時選擇「自訂」。
在此我將32位元的路徑資料夾改為client_32, 將64位元的路徑資料夾改為client_64.
- 安裝完後重新將TNSNAMES.ORA置換至新的%ORACLE_HOME%/network/admin資料夾
- 重複以上步驟再安裝一次64位元Client
- 安裝時會出現「OracleMTSRecoveryService 已存在」的錯誤訊息,請請點選「忽略」。
- 修改以下的registry設定,然後重開機 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSDTC\MTxOCI
- 將值改為 OracleOciLib = oci.dll
OracleSqlLib = orasql11.dll (舊的值是: SQLLib80.dll)
OracleXaLib = oraclient11.dll (舊的值是: xa80.dll)
此時就可以正常地在64位元環境中的BIDS存取Oracle資料了。
- 在選取安裝類型時選擇「自訂」。
但是要記得的是,使用BIDS時,它是根據32位元的資料提供者,因此在開發以及偵錯時還是利用32位元的Oracle OLEDB來存取資料。但是當SSIS封裝佈署到64位元 SQL Server執行時,他就會改使用64位元的Oracle OLEDB。