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