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數據庫上完成。這種配置的好處是可以大大降低源數據庫的壓力,缺點是需要傳輸整個日志文件,對網絡帶寬要求較高。