[SSIS][Oracle]安裝 Oracle Driver 提供 SSIS 使用

  • 10226
  • 0
  • SSIS
  • 2020-02-20

[SSIS][Oracle]安裝 Oracle Driver 提供 SSIS 使用

以往來說在 Windows 平台上開發程式時,搭配 SQL Server 的時候不用太多的考慮到 Driver 的問題,早期來說使用 MDAC,到現在作業系統內建的 WDAC 都很方便。但相對來說搭配 Oracle 就有點麻煩了。因為最近有任務要搭配 Oracle 12c & SQL Server 2014,因此就花了一點時間整理一下安裝的細節。

 

早期來說因為都是 32 位元,所以使用上來說沒有甚麼太多的需要去選擇,但在使用 Oracle 的 Driver 的時候,就可能要稍微注意一下,因為不見得你的作業系統是 64 位元,你就一定是使用 64 位元的 Driver,以 SSIS 來說,因為開發的時候是使用 SSDT,但因為這個程式是 32 位元的,因此要連接 Oracle 的時候,則需要使用 32 位元的驅動程式;但是開發好的封裝部屬到 SQL Server 上之後,執行的時候又是採用 64 位元,此時則需要 64 位元的驅動程式。而在連接的時候,而在 SSIS 下使用 ADO.Net 的方式,則不能直接使用 IP:Port/SID 的方式指定主機位置,則需要設定好 Net8 Alias 之後,才可以連接,這些都是需要先注意到的事項。

 

而在 Oracle 官網上面,針對 ODAC ( Oracle Data Access Component ) Windows 的 Driver,除了區分 32 位元和 64 位元,還有分是採用 XCopy 或是透過安裝程式安裝,以及是否要搭配 Visual Studio 來使用,感覺起來有點複雜,不是很清楚到底要安裝哪樣的版本。

image

 


 

64-bit Oracle Data Access Components

在這個版本內,會有三個主要安裝的版本,分別是 ODP.Net_Managed、ODAC_XCopy 和 ODAC 的三個版本,如果您跟我一樣只需要使用 ADO.Net 的連接,那麼 ODP.Net_Managed 會是比較精簡且快速的版本,解開壓縮檔之後執行批次檔就可以在 1mins 內完成安裝了;而如果您需要其他 OLE DB 的連接,或者是要能支援 MTS ( Microsoft Transaction Server ),那麼就要使用後面兩個版本,這兩個版本的主要差異是前者直接透過批次檔安裝,後者有 Java 寫的 GUI 介面來 Step by Step 的方式來進行安裝。

 

以上來安裝 ODP.Net_Managed 的版本

 

1. 下載程式並且解壓縮該檔案到指定的目錄下,可能會因為時間點或者是你需要的版本不同,下載的版本號碼是不同的。

image

 

2.  執行批次檔案進行安裝,這裡我指定要安裝到 C:\Oracle,並且設定要同時複製 x86 和 x64 的連接程式和完成相關設定

install_odpm.bat c:\oracle both true

image

 

3. 完成之後要設定 Net8 Alias,我們可以從剛剛安裝到 C:\Oracle 下面的 network\admin\sample 目錄中,會有個 tnsnames.ora 的設定檔案,可以將該檔案複製到 network\admin 下,再來根據您環境實際的狀況,進行修改相關設定。

image

 

4. 接著我們在 SSIS 內當設定連線管理員的時候,就可以看到有一個新的 「ODP.Net, Managed Driver

image

 

5. 要注意因為我們是安裝最精簡的方式,因此該部分只能透過  ADO.Net 來連線,但如果這個時候你要採用 UDL 的方式去設定連線的話,由於是抓取 OLE DB 的驅動程式,因此就無法看到和使用 Oracle 的連接程式,這個要注意一下。

image

 

6. 當我們測試完成之後,則可以正常部署封裝到 SQL Server 上的 SSIS Catalog 內,則我們選擇執行之後,可以透過 Integration Service 儀表板,看到所設計的封裝是可以正常執行的。

image

 

這裡要注意的是因為當我們透過批次作業去安裝連接程式的時候,在第二個參數設定的時候,我們是指定 「both」,因此從這個案例中可以看到,我們可以使用 x86 的連接程式在  SSDT 設計的時候,也可以在 SSIS 封裝執行的時候使用 x64 版本的。

 


 

32-bit ODAC with Oracle Developer Tools for Visual Studio

 

基本上如果只是要一般使用或者是開發,我個人覺得前者就足夠使用了;但如果要搭配 Visual Studio 使用 Entity Framework 的時候,則要改安裝 ODT & ODAC 的版本了

image

 

而這個版本安裝的東西就多了,加上又有一個安裝程式和 Java 都包在裡面,檔案相對地來說就大很多了。建議如果在安裝前已經有安裝舊版本的話,建議先將舊版本的給移除,否則到時可能要手動去改設定檔案,相對來說會比較麻煩一點。

 

1. 執行 Setup

image

 

2.設定 Oracle 目錄的使用者

image

 

3. 選擇安裝目錄,我個人覺得預設的目錄太深了,因此調整一下,這裡就看你自己的喜好來決定了。

image

 

4. 選擇要安裝連接程式和版本,如果有哪個不想要也可以不勾選,但占用的大小不會差異太大,也是可以隨你自己的喜好調整

image

 

5. 是否更改 machine.config 的設定檔

image

 

6. 設定 tnsnames 的設定檔,這個部分要特別注意一下,如果你在安裝到這一步的時候沒有設定,則在目錄下就不會有 tnsnames.ora 的設定檔案,那麼後續就必須自己到 Network\Admin\Sample 的目錄下,自己手動複製一個 tnsnames.ora 到目錄下,自己手動更改。

image

 

7. 確認無誤就可以選擇按下「安裝」來安裝程式了。

image

image

image

 


  

基本上上述不論哪個方式,在安裝的時候都會把 32 位元和 64 位元的  ADO.Net Provider 都會安裝上去 ( OLE DB Provider 還是要特別版本的才可以 )。如果要確認在 SSIS 下面有哪些可以使用,則可以用一個指令碼元件,利用以下的指令來進行處理,就可以確認有那些 Provider 是可以提供使用的 ( 指令參考黑暗執行緒的程式 [網址] )

 

		public void Main()
		{
			// TODO: Add your code here
            string provider = "";
            try
            {
                using (System.Data.DataTable dt = System.Data.Common.DbProviderFactories.GetFactoryClasses())
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                        provider = provider + string.Format("{0}: {1}\r\n", i.ToString(), dt.Rows[i][2].ToString());
                }
            }
            catch (Exception ex)
            {
            }
            MessageBox.Show(provider);
			Dts.TaskResult = (int)ScriptResults.Success;
		}

image

 

如果要搭配 SQL Server 2008R2/2012/2014 的 LINK Server , 那就最好是安裝 64 位元版本的ODAC,且安裝完畢之後務必要先重新開機,再去設定 LINK Server,否則會無法連線成功。LINK Server 設定的時候,要記得啟用 Dynamic Parameter 和 Allow Inprocess。