在64位元環境上利用SSIS存取Oracle資料(原Windows Live Spaces 舊文)

  • 18706
  • 0
  • 2010-11-25

在64位元環境上利用SSIS存取Oracle資料(原Windows Live Spaces 舊文)

Dotblogs的標籤:
為了要能夠在64位元的機器上面讓SSIS存取Oracle,當然需要安裝64位元的Oracle Provider,但是遇到最大的問題在於SSIS在執行的時候分成兩種元件,分別是DTExec.exe(32位元版)以及DTExec.exe(64位元版),分別存在於Program Files(x86)以及Program Files目錄之下。當SSIS在執行時候或者是在利用匯入匯出精靈(64位元版)時都不會有問題。

clip_image002

但是最大的問題在於SSIS在設計階段時利用的BI Development Studio只有32位元版,因此在開發時若是要測試資料連線,會找不到對應的32位元Data Provider,而發生初始化提供者的問題(所以大家這時會質疑我明明已經裝了,為什麼他說找不到)。

clip_image004

因此若是要解決方式就必須同時安裝32位元以及64位元的Oracle Client。

以下說明,在64位元 Windows環境下安裝Oracle Client & OLEDB元件的步驟(我的作業系統是Windows Server 2008 R2):

  1. 需要先準備32位元以及64位元兩種版本的Oracle Client,建議使用11.1.0.7.0版,因為如果是使用10.2.0.1 版本需要再安裝兩個 Oracle patch (# 4547817 & # 5383042) ,如果沒有上 patch 會遇到 ORA-12154: TNS: 無法解析指定的連線 ID 的問題。
  2. 如果系統上有舊的Oracle clients,請複製備份tnsnames.ora以及sqlnet.ora檔案。(位於 %ORACLE_HOME%/network/ADMIN/目錄下)
  3. 解安裝以及刪除舊的Oracle client以及安裝目錄(需要重新開機,才能夠刪除目錄)。
  4. 在64位元 SQL Server的機器上面執行Oracle 11g Client 的setup.exe,必須先安裝32位元版本
  5. 在選取安裝類型時選擇「自訂」

clip_image006

  1. 需修改路徑

clip_image008

在此我將32位元的路徑資料夾改為client_32,
將64位元的路徑資料夾改為client_64.

  1. 需勾選 “Oracle Windows Interfaces 11.x.x” 元件以及視需求再勾選"Oracle NET 11.1"、"SQL*PLUS 11.1"。
    clip_image010
  1. 安裝完後重新將TNSNAMES.ORA置換至新的%ORACLE_HOME%/network/admin資料夾
  2. 重複以上步驟再安裝一次64位元Client

clip_image012

  1. 安裝時會出現「OracleMTSRecoveryService 已存在」的錯誤訊息,請請點選「忽略」。

clip_image014

  1. 修改以下的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) 

clip_image016

此時就可以正常地在64位元環境中的BIDS存取Oracle資料了。各位可以利用32位元版以及64位元版的匯入匯出精靈進行測試。

但是要記得的是,使用BIDS時,它是根據32位元的資料提供者,因此在開發以及偵錯時還是利用32位元的Oracle OLEDB來存取資料。但是當SSIS封裝佈署到64位元 SQL Server執行時,他就會改使用64位元的Oracle OLEDB。

Allan Yiin

CTO, AsiaMiner