一步一步學Streams(1) 第一部分 基礎之概述篇

junsansi發表於2008-12-18

一、Streams概述

Oracle的Streams提供了資訊共享的一種方式,區別於其它資料共享的方式,Streams甚至允許不同型別的資料庫之間傳遞資料,實現這點的根本在於Streams的複製流程,通過捕獲,傳播,應用三個步驟,將指定的資訊傳輸到指定位置,在捕獲訊息,管理訊息,以及在不同資料庫或應用之間共享訊息等方面提供了比傳統解決方案更為強大的功能和擴充套件性。Streams特性適用於分散式的企業應用,資料倉儲,高可用解決方案等等。

只要掌握的足夠精通,你就能感受到Streams強大的可定製性,比如說控制哪些資訊被捕獲,這些資訊在資料庫之間的流向,注入資料庫時做怎樣的處理,何時關閉stream等等。通過一些自定義的配置,Streams自動捕獲、應用和管理諸如DML/DDL修改觸發的訊息。你甚至自定義資訊存入stream,Streams會自動傳輸這些資訊到其它資料庫或相關應用。

 

二、Streams能用來做什麼

1、資料複製Data Replication

Streams通過capture程式捕獲dml,ddl操作,然後通過propagate程式傳播到其它資料庫,然後再通過apply程式應用的方式複製資料。這中間的每個步驟都是可定製的,所謂術業有專攻,在俺看來streams就是用來幹這個的。後面三思會通過無數個示例一一演示不同規則,不同需求,不同環境的配置。

2、資料保護Data Protection

最有效的資料保護策略就是冗餘,Streams顯然能夠實現這一點,因為streams的主要功能就是複製資料。不過需要注意的是,由於streams實現複製的方式是邏輯的,因此如果你希望用streams取代dataguard................不是完全不可以,不過,需要好好設計。Streams與邏輯standby非常想像,都是通過分析primary的redolog,如果你對oracle dataguard特性有一定了解,那你一定能夠理解,但凡邏輯standby不支援的,streams也不支援。

3、資料倉儲資料載入Data Warehouse Loading

資料載入是資料複製中的特例。資料倉儲系統的資料也是需要更新的,比如說新增或修改資料的同步,streams恰恰就可以滿足這一點,因此streams也可以應用於資料倉儲系統。

4、提供資料庫服務的高可用支援Database Availability During Upgrade and Maintenance Operations

藉助streams特性的幫助,你可以儘可能的降低甚至避免資料庫在升級或維護操作時的停機時間。而且由於streams的實現是邏輯的,因此幾乎可以無視跨版本跨平臺跨字符集等方式的升級,並且如果前期準備得當,也可以做到短暫停機甚至完全不停機。

當然說老實話三思個人認為這個東西也是看起來很美,一方面系統升級並不會頻繁(更別提又跨平臺又跨版本甚至再跨字符集之類超常規需求,越大型系統越是如此),第二由於是邏輯實現,前期工作必不可少,即使是邏輯就不可能100%相同,總會有些條件不具備,總會有些物件不支援,總會有些操作無法執行,這些都是需要dba在前期予以考慮並解決的,因此相對於物理方式,streams會給dba帶來相當多的必須手工介入操作的機會。

 

三、為什麼要用Streams

在回答為什麼要用Streams前,我們先得了解什麼是Streams。前面大概介紹了一下streams能用來做什麼,當然,都是些官方定義,實際上Streams不是一項新特性,但也不是一項很新的特性。從Oracle的9iR2版本開始推出,在10g中得到了一些增強(比如提供了downstream),其主要功能說白了就是複製資料。說到複製資料,你可能會想到oracle的其它一些同樣實現資料複製功能的特性,比如說高階複製(Advanced Replication),Dataguard等等。

在9iR2之前高階複製應用比較廣泛,高階複製也分兩種:多主複製和基於物化檢視的複製,就我理解其最大的劣勢是大資料量下效率堪優,並且對於ddl的支援不夠友好。從技術實現思路上與streams幾無相同之處,倒是邏輯standby與streams的實現方式非常想像,都是通過分析redo生成重做的sql語句在目標端執行,如果要說差異的話,邏輯standby只提供了整庫級的複製,從功能上來看standby還是更適合應用於容災,而streams不僅能夠實現整庫級的同步,在複製策略上設計的非常靈活,你可以通過不同的方式實現表空間/SCHMEA/表級的複製。也就是在複製策略定製上更靈活。由於是分析redo實現,因此對ddl的支援相比高階複製那實在好太多了(雖然仍有不很操作和資料型別不支援),並且streams仍屬於邏輯實現的方式,因此支援跨平臺跨版本的實施,這點是dataguard無法比擬的(至少在目前)。

如果要說劣勢的話,雖然經歷了9i,10g到最新的11g,但streams實現還是個新東西,其應用的廣泛程度自然遠不能與高階複製和dataguard相比,因此在穩定性上可能還有所欠缺,比如說碰到bug的機率會比較高。從管理的角度,streams比dataguard要複雜一些,與高階複製應該說不相上下。當然這裡並不是要寫一篇專門對比streams/dataguard/高階複製間差異的文章,因此,點到為止吧,通過大致的對比希望能讓你瞭解到streams的特點和優劣。

然後,回到問題上,為什麼要用Streams呢,這個問題還得你自己回答,三思始終認為,所有技術所有服務於應用的,應用模式確定之後究竟哪種技術更適合你的應用,那是需要根據具體情況具體分析的。應用能決定一切嗎?也不絕對,比如技術實施的成本/時間/難易度包括後期維護等等,這些也都是需要綜合考慮的,當然這也就體現出DBA的價值了,如果你實在沒有自信,一定要三思幫你拿個主意,那也沒有問題,只要出的起價俺就乾的了這活,有資料庫的活儘管找我,沒問題啊,同時我司還可承接如下業務:苦力搬運,裝卸,水電工,瓦工,木工,室內裝潢,通下水道,VB、VC、.Net、C#、JAVA、J2EE、C++、delphi、彙編、微控制器、手機軟體、手機遊戲開發、網路管理、建站、ASP網站、JSP、PHP、CGI開發,考試替考、黑車、黑槍、代客討債,代理欺負中小學生(年紀在5-15歲之間,身高在50CM-120CM之間)代中小學生寫作業等等俺都行啊,俺的聯絡方式詳見:轉換手機號玩玩

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-515847/,如需轉載,請註明出處,否則將追究法律責任。

相關文章