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