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ò)帶寬要求較高。