在64位元環境上利用SSIS存取Oracle資料(原Windows Live Spaces 舊文)
Dotblogs的標籤: SSIS
為了要能夠在64位元的機器上面讓SSIS存取Oracle,當然需要安裝64位元的Oracle Provider,但是遇到最大的問題在於SSIS在執行的時候分成兩種元件,分別是DTExec.exe(32位元版)以及DTExec.exe(64位元版),分別存在於Program Files(x86)以及Program Files目錄之下。當SSIS在執行時候或者是在利用匯入匯出精靈(64位元版)時都不會有問題。 但是最大的問題在於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資料了。各位可以利用32位元版以及64位元版的匯入匯出精靈進行測試。
但是要記得的是,使用BIDS時,它是根據32位元的資料提供者,因此在開發以及偵錯時還是利用32位元的Oracle OLEDB來存取資料。但是當SSIS封裝佈署到64位元 SQL Server執行時,他就會改使用64位元的Oracle OLEDB。
Allan Yiin
CTO, AsiaMiner