Streams是從版本Oracle 9i才開始具有的數據同步功能,是為提高數據庫的高可用性和數據的分發和共享功能而設計的,Streams利用高級隊列技術,通過用LogMiner挖掘日志文件生成變更的邏輯記錄,然后將這些變更應用到目標數據庫上,從而實現數據庫之間或一個數據庫內部的數據同步。
Streams數據同步大致分如下幾個步驟:
1) Capture進程分析日志,生成邏輯記錄LCR,將其放入一個隊列中;
2) Propagation進程將LCR發送到另一個數據庫中,通常是目標數據庫;
3) 在目標數據庫中,Apply進程將LCR應用到目標庫,實現數據的同步;
該處理過程的信息流如下圖:
在簡單的Streams配置中,Capture進程一般位于源數據庫,因此叫做Local Capture Process,Capture進程在分析日志后將生成的LCR放入隊列中,由Propagation進程將LCR發送到目標庫中。這樣做的好處是不用在網絡上傳送整個的日志文件,因此可提高網絡傳輸的效率,但這一般會給源數據庫帶來較大的壓力,影響其性能。
另一種配置是Capture進程位于Downstream數據庫中,源數據庫只負責將日志文件傳送(日志傳輸方式可為ARCH傳輸、LGWR同步傳輸和LGWR異步傳輸中的任何一種)到Downstream數據庫中,所有的Capture操作都在Downstream數據庫上完成。這種配置的好處是可以大大降低源數據庫的壓力,缺點是需要傳輸整個日志文件,對網絡帶寬要求較高。
Streams數據同步技術有以下優勢:
1) 可支持一對多、多對一和雙向復制,可用于數據分發和共享,這是DataGuard所不具備的;
2) 可靈活配置只復制數據庫中的一部分對象,如可按Table復制、Schema復制,表空間復制等,并可在復制過程中對數據進行過濾和轉換,使之滿足不同的需要;
3) 同DataGuard一樣,是Oracle內置功能,與每個Oracle新版本的新特性(如ASM)都完全兼容,且不需要額外付費;
4) 可用于異構的操作系統和數據庫版本,但有一些限制;
5) 可支持非Oracle數據庫和Oracle數據庫之間的數據同步;
6) 目標數據庫處于打開狀態,可以在保持數據同步的同時執行查詢等操作,分擔源數據庫的壓力;
Streams數據同步技術有以下缺點:
1) 配置維護較復雜,需要較高的技術水平;
2) 在非Downstream復制中,對源數據庫壓力較大;如果使用Downstream復制,則增加了配置的復雜性且需要通過網絡傳輸整個日志文件,對網絡帶寬要求較高;
3) 不能支持某些特定的數據對象和數據類型;
4) 不能保證數據的零丟失;
Oracle公司將Streams技術定位于數據的分發和共享,雖然也可用于高可用的災難恢復場合,但Oracle推薦使用的災難恢復技術是DataGuard。