SQL Server集成服務用於Oracle Database 10g

      內容摘要:Microsoft SQL Server(32位和64位)以SQL Server集成服務(SSIS)的方式提供了最好的數據集成工具。這篇文章描述了你可以怎樣使用SSIS來輕鬆地面對運行在Oracle Database 10g數據庫平臺上的其它數據源。

 

1. 導言

  這篇文章關注於使用SQL Server集成服務來從異構數據源提取數據以及將數據導入到Microsoft® SQL Server™用於商業智能(BI)分析和報表的好處。Oracle Database 10g數據作爲主要數據s源來使用。

  這篇文章的讀者包括IT專家、數據庫管理員和系統架構師。讀者應該具有對數據庫和Microsoft SQL Server以及Oracle Database 10g的一般性瞭解。讀者應該在他們喜歡的硬件平臺上使用參考的數據庫.

      SQL Server是Microsoft集成商業智能平臺的一部分,並覆蓋了數據倉庫、分析和報表、記分卡、計劃和預算。SQL Server在甘特的商業智能平臺的魔力象限和數據倉庫的魔力象限中都是處於領導者象限。Microsoft在SQL Server標準版和企業版中都具有優秀的商業智能產品。這些包括SQL Server集成服務(SSIS)、SQL Server報表服務(SSRS)、以及SQL Server分析服務(SSAS)。與之對應的,Oracle提供了類似的功能作爲Oracle企業版的可選項,但是需要額外收費。

  這篇文章首要關注的是SQL Server 集成服務。SSIS提供了對異構和同構環境的支持,並作爲一個集成工具服務於使用多個數據源和運行在Microsoft和非Microsoft軟件環境中平臺的客戶。我們介紹了建立具有一個異構數據源的SSIS和導入數據到SQL Server是多麼簡單。我們還記錄了從一個Oracle Database 10g數據源導入數據到SQL Server的步驟。

  許多IT經理努力採用實用的、性價比高的解決方案來支持他們的業務過程。我們再次強調SQL Server 所帶給商業智能解決方案的價值。SQL Server 包括優秀的商業智能工具而沒有額外收費,這是IT經理所不能忽視的。

 

2. 關於SSIS

      SQL Server集成服務(SSIS)是建立在Microsoft SQL Server之上的首要數據轉換框架。它執行許多任務,從簡單的導入/導出操作到在異構數據源間複雜的高性的提取、轉換、加載(ETL)任務。 這個強大的功能來自於一組緊密結合的工具套件,它包括控制流和數據流邏輯設計器、用來建立和執行獨立的包的工具,以及支持這個執行和自動化高性能數據轉換所必需的服務。

  SSIS來源於SQL Server 的之前版本,是作爲數據轉換服務(DTS)——一個建立在SQL Server之中的簡單數據轉換框架。

  SSIS作爲數據轉換服務(DTS)——一個內置於SQL Server之中的簡單轉換框架,出現於SQL Server的先前版本。DTS所缺少的是廣泛的功能,它只是以一個簡單的“希望完成它”的思想來發布的。這使得開發人員和數據庫管理員可以在Microsoft SQL Server和其它數據庫平臺或數據源間直接提取、轉換和加載數據。但是,如同數據庫操作的需求改變了一樣,對SQL Server中一個更加複雜的ETL解決方案的需求也改變了。

SSIS是許多年來客戶反饋和Microsoft修改的最終結果。在SQL Server中數據轉換的基本前提沒有改變,但是完成ETL任務的工具和處理從根本上改變了。SSIS具有比它之前版本更加廣泛的功能。這篇文檔提供了一個使用SSIS從外部數據源提取和轉換數據到一個SQL Server數據庫的實際例子。這個例子中的數據源來自於一個Oracle Database 10g數據庫。隨着Oracle and SQL Server之間所有者的總成本的增加,這個例子可能變得更通用。IT決策制訂者在決定使用哪個數據庫平臺來運行他們的業務時將成本看作是一個重要的購買依據,而且SQL Server具有建立商業智能解決方案所必需的程序。

  開始

  在我們開始我們的ETL過程示例之前,我們必須先定義源Oracle數據庫和目標SQL Server數據庫之間的聯繫路徑。這要求安裝所必需的Oracle支持軟件。Oracle要求網絡傳輸工具比如Oracle Net來與其它的數據庫服務聯繫。Oracle Net與SQL Server Tabular Data Stream(TDS)很類似。Oracle Database 10g客戶端軟件最新的32位和64位版本可以從這裏下載:

  http://download.oracle.com/otn/nt/oracle10g/10201/10201_client_win32.zip

  http://download.oracle.com/otn/nt/oracle10g/10201/102010_win64_x64_client.zip

  要注意安裝客戶端軟件的特定版本——32位或64位。爲你的操作系統(32位或64位)安裝正確的版本。

2.1 安裝Oracle Database 10g客戶端軟件

在你下載和提取客戶端軟件檔案文件之後,進到存儲的安裝文件所在目錄,然後進行下面的過程。

  要安裝Oracle Database 10g客戶端軟件

  1. 雙擊 setup.exe文件。這會啓動Oracle Universal Installer。會出現一個類似於下面圖片的歡迎界面。選擇Custom,然後點擊Next。

 2. 下一個界面提示爲安裝輸入一個名稱和目錄地址。如果必要的話,編輯這個信息。然後點擊Next繼續。

 

 3. 現在要安裝的組件。除了默認的選擇,確保還選擇了Oracle Windows Interfaces和Oracle Net。點擊Next。

 

4. 下一個界面顯示了產品特定先決條件的檢查情況。確保所有的檢查都成功,如果必要的話修正所有的問題。然後點擊Next。

 

 5. 在提示輸入用於Microsoft Transaction Server的Oracle Services端口號頁面(圖5)裏,接受默認端口號,點擊Next。

 6. 一個總結界面顯示了Oracle Universal Installer將要執行的所有任務。檢查這些信息是否正確。點擊Install來開始軟件部署。

 7. 在軟件部署完成之後,Oracle Net Configuration Assistant將開啓並指導你進行配置Oracle Net軟件的配置過程。按你的環境配置設置。下面的選項是用於這個例子的:

                    

選項
Perform Typical Configuration No (unselected)
Selected Naming Method Local Naming
Service Name ORCL
Network Protocol TCP
Host Name ADAMS
Port Number 1521
Perform Test Yes
Net Service Name ORCL
 

  8. 當Oracle Net Configuration Assistant完成時,Universal Installer會顯示這個安裝完成了。點擊Exit來關閉這個安裝。

 2.2 測試Oracle Database 10g客戶端的安裝

  在安裝了客戶端軟件之後,可以通過執行一個從Oracle導入基本數據到SQL Server的操作來測試和驗證下這個安裝。

  爲了測試Oracle Database 10g客戶端安裝

   9. 從SQL Server管理套件中,右鍵單擊你可以用來執行一個測試導入的數據庫,選擇Tasks,然後選擇Import Data。

 10. 在指定數據源的提示中,改變Data Source選項爲Microsoft OLE DB Provider for Oracle。點擊Properties按鈕。

 11. 在數據鏈接屬性對話框中,輸入字段信息。對於服務器名稱,使用你在之前安裝客戶端軟件的過程中第七步輸入的Net Service Name。確保你提供的憑證可以訪問Oracle 中的示例數據。可選的,你可以執行一個連接測試,點擊Test Connection。當完成的時候點擊OK。

 12. 下一個界面提示數據導出的目的地。默認是你在第一步中指定的數據庫。檢查信息是否是正確的,然後點擊Next。

 13. 下一個界面告訴你指定你是否想在運行一個查詢時從一個表或視圖拷貝數據。選擇從一個或多個表或視圖拷貝數據,然後點擊Next。

 14. 選擇從數據源導入的表或視圖。確保你指定的目標表不存在。點擊Next。

      15. 在提示執行導入或保存它爲一個包的頁面中,選擇導入,然後點擊Next。

  16. 在總結頁面中,檢查這些信息是正確的,然後點擊Finish來開啓這個導入過程。

  17. 一個顯示執行步驟和狀態的對話框會顯示出來,如下所示。

在這個過程中,你可能會遇到類似於下面的警告。這是預料當中的,並且你可以忽略它們。如果出現了警告對話框,點擊OK關閉它。

 

18. 當安裝完成的時候,點擊Close來退出這個嚮導。

  如果一切正常,並且沒有致命錯誤,那麼這個安裝就是成功的。這表示所有的軟件組件都工作正常,而且SQL Server 可以可靠地從Oracle提取數據。下一步是建立一個可重用的SSIS數據導入解決方案。

  3. 在SSIS中建立一個ETL解決方案

  3.1 計劃這個解決方案

  當開發一個全面的解決方案時,第一步總是制定計劃。在計劃過程中要回答的問題有:

  · 這些數據從哪來?

  · 這些數據要到哪去?

  · 數據源和目的地之間發生了什麼?

  這些步驟可能看起來都很基礎,但是它們是在進行任何開發工作之前要定義的重要對象。清楚的對象定義使得消除了可能會破壞一個成功ETL解決方案的任何不確定因素。

     在我們的例子中,我們從一個Oracle事務型系統提取了銷售訂單信息並將它導入到一個我們正在建立的SQL Server數據倉庫中。這個例子開始於一個從Oracle到SQL Server的簡單數據拷貝。然後隨着數據倉庫的發展添加一些簡單的數據轉換。

  3.2 創建解決方案

  所有的SSIS解決方案開始於SQL Server商業智能開發套件(BIDS)。這個集成的開發環境是作爲開發任何商業智能解決方案的中心,無論它是一個集成服務包、一個報表服務報表,或是一個分析服務立方體。要開始,啓動BIDS並創建一個項目。

  從開始菜單打開BIDS。對於項目類型,選擇Integration Services Project。命名這個項目,然後選擇默認地址或指定一個不同的地址。點擊OK。圖11顯示了一個新項目對話框例子。

 

      在新項目創建之後,你會看到用來創建和定義項目工作流的用戶界面。這個工作流分爲三個主要分類:控制流、數據流和事件處理。

  控制流定義什麼類型的任務將作爲這個包的一部分來執行。任務可以包括簡單數據流和批量插入任務、包括備份和數據庫完整性檢查的維護計劃、還有更多的複雜立方體處理任務、e‑mail任務,或文件系統任務。這些廣泛的可用控制流任務顯示了SSIS的靈活性。

  數據流任務包括基本的數據導入和導出,以及數據合併(可用於連接從異構數據源獲得的數據)、數據轉化和轉換,以及複雜的模糊數據搜索和分組。

  事件處理使得你可以創建獨立於主要包的控制流邏輯,它只在包遇到一個定義的錯誤事件時才執行。

  要創建一個包,你首先要定義控制流邏輯。.

  要定義控制流邏輯

  1. 對於我們的例子,從左邊的工具箱拖拉一個Data Flow Task到控制流中去,如圖12所示。

      2. 要給這個控制流任務添加必要的邏輯以支持數據導入,雙擊Data Flow Task圖標以顯示你可以添加數據流任務的數據流畫布。

  3. 要定義源和目標數據源,右鍵單擊窗口下面的Connection Managers面板並選擇New OLE DB Connection。

  4. 在顯示的對話框中(看圖13),選擇New。對於Provider,選擇Microsoft OLE DB Provider for Oracle。點擊OK完成定義數據源連接和關閉Connection Manager對話框。

新創建的連接顯示在Connection Manager面板中。

  5. 要爲目標連接打開一個新的連接管理器,右鍵單擊Connection Manager面板並選擇New OLE DB Connection。點擊New。

  6. 在Connection Manager對話框(圖14)中,provider選擇Native OLE DB/SQL Native Client。輸入服務器名稱、用戶憑證和目標數據庫名稱。點擊OK來完成定義目標連接和關閉Connection Manager對話框。

 

    你應該看到你的兩個連接都顯示在Connection Manager面板中。

  現在,定義從源到目標數據源的數據轉移。

  要定義數據源中的數據怎樣移動到目的地

  1. 從工具箱中,拖拉一個OLE DB Source數據流來源和一個SQL Server Destination數據流目的地到數據流畫布中。

  2. 點擊OLE DB Source圖標並拖拉綠色箭頭到SQL Server Destination。這在邏輯上連接了來源和目的地。

  3. 雙擊OLE DB Source圖標以顯示來源屬性。選擇你之前爲來源連接定義的連接管理器,然後選擇你想提取數據的來源表。你的屏幕的顯示應該類似於下面的圖片。點擊OK來關閉這個對話框。

    4. 要阻止在我們之前測試導入中遇到的默認代碼頁面監測警告,那麼改變OLE DB Source對象的AlwaysUseDefaultCodePage屬性爲True。

  5. 雙擊SQL Server Destination圖標打開目標屬性。選擇你之前爲目標數據源定義的連接管理器,然後選擇要導入到目標數據源的表。如果你還沒有創建目標表,你可以現在創建,通過點擊New。你的窗口看起來應該類似於下面的圖片。

你可能注意到在對話框下面的警告信息。這表示我們沒有提供源字段到目標字段的邏輯映射。SSIS將自動努力進行一個“最佳”映射嘗試,但是如果這個映射是比較複雜的,那麼這可能需要用戶的干預。在我們的例子中,有一個從源字段到目標字段的直接映射。換句話說,源字段和目標字段是一致的。

  6. 要瀏覽這個映射,那麼點擊左邊的Mappings選項。看圖17。

  7. 檢查映射是否正確,然後點擊OK。現在這個數據流畫布應該如圖18所示。

      注意,在實際場景中,你可能只想匹配源字段的一個子集到目標字段。

  現在配置好了基本的數據導入,可以測試了。

  要測試數據導入

  1. 要保存這個項目,從File菜單選擇Save All。

  2. 從Build菜單,選擇Build [Project Name]。

  3. 從Debug菜單,選擇Start Debugging。

  這從BIDS開發環境中快速地執行了這個包,並將這個包的執行狀態報告回來,如下面的圖19所示。

      綠色表示成功執行。轉移的記錄數顯示在綠色連接箭頭的下方。在這個例子裏,所有的任務都成功完成了,而且轉移了正確的記錄數。

  3.3 改進這個解決方案

  我們的例子到目前爲止,只介紹了一個非常簡單的源字段到目標字段的直接映射而沒有執行實際的轉化。現在我們將這個例子更進一步,添加一些基本數據轉化。

  數據轉化

  在我們的例子數據中,有四個字段顯示了美元數量(SubTotal、TaxAmt、Freight和TotalDue),但是現在它們被配置爲導入普通數字型數據類型而不是貨幣數據類型。我們需要命令SSIS將這些數據作爲貨幣導入。首先,改變目的表來反映這個數據類型的改變,然後插入一個數據轉化任務到這個數據流中去。

  爲了添加一個數據轉化任務到數據流中去

  1. 右鍵單擊OLE DB Source和SQL Server Destination之間的綠色連接箭頭,然後選擇Delete。

  2. 從工具箱裏,拖拉一個數據轉化任務到數據流畫布裏。從OLE DB Source到Data Conversion圖標連接綠色箭頭。從Data Conversion圖標到SQL Server Destination圖標連接綠色箭頭。

  3. 雙擊Data Conversion Task來打開任務屬性。這個對話框是你定義數據類型轉化的地方。

  4. 在Available Input Columns列表中,選擇每一個要求數據轉化的字段。這些被添加到窗口下面的面板中。這創建了到數據流的輸入字段邏輯拷貝。可選的,你可以通過編輯Output Alias屬性字段來重新命名這個邏輯拷貝。

  5. 將數據類型從數字型[DT_NUMERIC]改爲貨幣型[DT_CURRENCY],然後點擊OK。下面的圖片是一個例子。

      6. 雙擊SQL Server Destination任務圖標打開任務屬性。點擊窗口左邊的Mappings選項。

  7. 光標停在映射線上並點擊Delete從而刪除源輸入字段和目標字段間的已有映射。

  通過拖拉新的字段別名到目標字段從而在源字段和目標字段間創建新的映射,直到你的屏幕顯示類似於圖21所示。

 8. 完成時點擊OK。這時數據流畫布應該如圖22所示。

 9. 當你完成了之前的操作後保存、建立和開始調試這個包。在這個包完成之後,輸出窗口開起來應該如下所示:

      你現在已經成功地添加了一個簡單的數據轉化到你的導入包中。結果是輸出字段具有正確的貨幣數據類型而不是一個普通的數字數據類型。這個基本例子可以擴展在其它場景中執行相對複雜的數據轉化。

  出列

  現在我們要做些更復雜的事情。我們在源數據裏有一個字段叫做OnlineOrderFlag,它指定了一個訂單是否在線。這是一個數字型字段作爲一個比特字段來使用,存儲0代表False而1代表True。我們想創建一個更具親和力的字段形式,其中存儲的是“True”或“False”字符值而不是比特字段。我們可以通過一個出列數據流任務來進行這項工作。SSIS將爲基於一個我們提供的表達式的邏輯字段獲取一個值。要指定獲取值的數據源,這個表達式可以參考輸入流的其它字段或代碼值,並且具有所有的邏輯級別,從簡單到複雜。

  第一步是添加一個新的字段到我們的目標表中用來存儲新獲取的值。

  要添加一個出列

  1. 右鍵單擊Data Conversion圖標和SQL Server Destination圖標之間的綠色連接箭頭,並選擇Delete。

  2. 從工具箱拖拉一個Derived Column數據流任務到數據流畫布中。從Data Conversion任務到Derived Column任務用綠色箭頭連接,然後從Derived Column任務到SQL Server Destination任務用綠色箭頭連接。

  3. 右鍵單擊Derived Column任務圖標以顯示任務屬性。

  4. 添加一個新的出列、表達式和數據類型,它們的屬性類似於下面圖片所示。

這個表達式是一個類似的替換。它檢查了OnlineOrderFlag字段看看它的值是否是“1”,如果是的話那麼替換是“True”。否則,這個字段會顯示爲“False”。這些新的值將存儲在一個叫做OnlineFlagChar的出列字段中,它是一個可變長度的字符字段。點擊OK保存這個出列字段設置。

  5. 右鍵單擊SQL Server Destination任務打開任務屬性。點擊窗口左邊的Mappings標籤。

  6. 下拉輸入字段的字段映射列表直到你找到新的出列字段。將它拖到你目標字段的新字段中,如下圖所示。

7. 完成的時候點擊OK。你的數據流畫布看起來應該如下圖所示:

8. 保存、建立和啓動調試這個包,如同你先前所做的一樣。在這個包完成之後,輸出窗口應該如圖27所示。

你現在已經添加了一個出列到你的導入過程。出列爲SSIS的數據流能力提供了強大的功能。它們不侷限於我們在例子中描述的簡單替代。

  4. 總結

  這些簡單的示例只說明了SQL Server集成服務的一小部分功能。

  對於那些之前有數據轉換服務(DTS)經驗的人可以很清楚SSIS提供了更好的靈活性和功能。更熟悉Oracle的人可能會驚訝於Microsoft竟在SQL Server中包含了這樣強大的免費軟件。但是Microsoft是致力於爲它們的優秀數據庫平臺提供最好的商業智能解決方案。

                                                                           摘自:http://tech.ddvip.com/2008-06/121311560045531.html

                                                                           來源:IT專家網來源:IT專家網

                                                                                           

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章