這個過程中,最最消耗時間的部分是轉換和裝載數據這兩個步驟,在這些步驟中,要根據現有數據指定規則,然後按照這些規則來過濾數據,並且把合格的數據裝載到數據倉庫裡邊去。而這個步驟地最大困難就是要盡量不影響數據倉庫和源數據庫的性能,並且對於不同的數據量能夠有一定的可伸縮性,並且在最短的時間內完成。
當前絕大多數的ETL步驟都是通過第三方工具來進行的。這些工具能夠在把數據轉換並裝入到數據倉庫之前,對數據進行一些特定的處理。當數據轉換完成以後,再用Oracle的並行插入和裝載工具把這些數據插入到Oracle數據庫。Oracle數據庫的最主要的作用是管理這些數據行、索引和約束。有些ETL過程是串行進行的,因此需要使用更多的數據庫資源來進行這些轉換和裝載過程。如果使用這類串行裝載方法的話,首先利用一些第三方工具,數據先被提取出來,然後放到一個中間過渡區域裡邊,在使用PL/SQL或者Java 再在數據庫裡邊進行轉換,最後再把結果插入到數據庫的表裡邊。這個復雜的過程導致了這種方法不可避免的弱點:可伸縮性差、在萬一出現差錯時難以控制。
Oracle9i 引進了新的"邊裝載邊轉換"的辦法來取代那些過時的串行處理步驟:先轉換然後裝載或者先裝載然後轉換。在這種新方法裡,數據庫參與了數據轉換和裝載的過程,成為了ETL過程的一個有機組成部分。而另外有些原來是必須的步驟則沒有繼續存在地必要了,另一些則可以得到改進。Oracle 9i提供以下功能來幫助這個轉換、裝載步驟更加快速而高效。
Oracle Change Data Capture (OCDC)Framework 可以用來優化ETL過程中的數據提取這個步驟,建立一個可重復使用的執行步驟。OCDC能夠捕獲Oracle數據庫中變化的數據。使用對稱復制技術和Logminer技術,如果原始數據是來自Oracle數據庫的話,那麼Oracle能夠很容易實現幾個數據庫的改變了的數據的同步化和異步化工作。對於非Oracle數據庫,Oracle公司也提供了API,幫助第三方軟件廠商開發工具,來實現非Oracle數據庫和Oracle數據庫的集成。
External Tables這個特性能夠使一些外部數據源(比如一個普通文本文件)能夠像存儲在Oracle數據庫普通表裡邊的數據一樣被透明地存取。這個特性的唯一限制是:這張表是只讀的,不能修改。對於SQL,PL/SQL和Java程序來講,這些虛擬表不用首先被裝載到數據庫裡邊然後才能讀取。這樣的話,裝載和轉換步驟就被集成到一起了,不再需要在數據庫裡邊存儲中間數據。
Multi Table Insert 這是一個任何DBA和開發人員都會欣賞的新特性。在8i和以前的版本裡面,想要把同樣的數據插入到多張表裡邊,你不得不編寫一個存儲過程,或者執行多次SQL語句。在Oracle 9i裡邊,這些都可以不用了。一個SQL語句就可以解決這個問題。另外一個值得注意的新特性是Upset語句,它用一個語句提供了Update和Insert的功能,根據條件分別執行Insert或者Update語句。還有一個很有用的增強就是允許在一個Oracle數據庫裡邊有多個Block的大小。這對於在不同Oracle數據庫之間使用可移動表空間這個特性是非常關鍵的。從9i開始,可移動表空間的大小不一定需要是同樣的塊大小了。
有了以上這些新特性以及其他一些本文沒有提及的新特性之後,Oracle不僅僅適用於數據處理,也更加適用於數據倉庫環境下的使用。