高級復制、流復制、備庫的區別
?
?
??? 公司目前需要做一個與生產庫實時同步的備庫,于是做了一些技術選擇。基本上來說,最省事的當然就是做個DG,但是對系統硬件、操作系統的要求比較高,不可能再弄臺小機搞這玩意。所以只能排除。另外物化視圖也是比較方便的方法,但是因為是需要整庫備份,很明顯是不切實際的。基本上可選的技術也只有高級復制和流復制兩種了。流復制的配置比較麻煩,而且應用也不是很成熟,但是功能強大。高級復制雖然要簡單一些,但是也只能支持Table級,所以在兩者之間還是很困惑,專門找了一些材料對比一下。
?
??? 高級復制(Advanced Replication)
??? 流復制(Streams Replication)
??? 備庫(DataGuard)
?
??? DataGuard在高可用及容災方面一般是dba的首選,畢竟DataGuard在這方面存在壓倒性的優勢,不管是物理備用庫(physical standby database)還是邏輯備用庫(logical standby database),它們都具有一些共同的待征。
?
??? 配置和管理方面的成本:DataGuard比Stream Replication簡單方便;安全與穩定方面的成本:DataGuard比Stream Replication穩定可靠。
?
??? 對對于一個24x7的系統來說,這些是非常重要的,系統宕機時間的增加不僅影響著公司的形象,還會影響公司的效益;采用DataGuard,數據的安全性相當有保障,物理備用庫可以在最短的時間完成故障切換,邏輯備用庫在保障數據安全的同時,也可以承擔大量的報表等業務;由于DataGuard的配置與管理比較簡單,同理也降低了dba的工作強度;那什么情況下選擇使用Stream Replication呢?
?
??? 1、局部復制 Stream可以只復制某些表或某些模式
??? 2、異構環境 充分利用現有的設備與技術
??? 3、遠程容災 Stream對網絡的要求較DataGuard低
?
??? Stream Replication有靈活的復制策略,不僅可以配置只復制某些表,還可以配置僅復制某些表上的DDL或DML,相比DataGuard必須整個數據庫復制而言,可以節省相當的存儲投資,畢竟對于某些海量數據而言,有許多是不必要復制的。
?
??? 如果在異構環境,即不同的操作系統,那DataGuard將會束手無策,非Stream Replication莫屬,這樣可以充分利用現有的環境,配置高用可方案。在異構環境,Stream Replication將會是Advanced Replication的強勁對手。
?
???
Stream Replication傳播的是經過logmnr挖掘并包裝的邏輯改變記錄(LCRs),相比DataGuard傳送archived redo log、Advanced Replication的mview log與MView刷新的方式,Stream Replication對網絡的需求降低了很多,在遠程異地容災的過程中,租用網絡帶寬是一筆較高的費用,Stream Replication可以適當地降低這筆費用。
?
???
Advanced Replication相對于DataGuard,缺點是:配置與管理較復雜、安全與穩定性不夠;優點:局部復制、異構環境等。Advanced Replication是一種相當成熟的技術,在許多關鍵系統中得到成功的運用,相對于9iR2推出的Stream Replication而言,雙方適用的環境雖然相當,比如都可以進行局部復制、異構復制、遠程容災等,Advanced Replication目前在穩定性與安全性方面更經得起考驗。
?
??? 對比Stream Replication與Advanced Replication底層的實現技術,Stream Replication在實時性、穩定性、高效率、低消耗(較少的cpu/network資源)等方面更有優勢,但凡一些新推出的功能,都或多或少存在一些不確定的因素。
?
??? 在10gR1中,Oracle針對目前Stream Replication存在的弱點進行了增強,不僅提供了從Advanced Replication遷移到Stream Replication的腳本,還提供了Stream Replication的配置與監控工具,Stream Replication在配置與管理方面必將智能化、簡單化,擔負起與shareplex爭奪企業數據復制市場的重任。
?
??? 綜上所述,Oracle在數據復制方面,DataGuard、Advanced Replication、Stream Replication都有自己的特點及獨到的地方,做為DBA,用什么樣的方案取決于目前的設備環境、業務需求、將來的發展趨勢以及已經成熟的技術。當然,對于已經選擇的數據復制方案,技術上必須有一定的掌握;畢竟所有的方案都不是沒有問題的,即使目前較安全、穩定、便于管理的DataGuard,也會出現一些莫明其妙的事情,所以最好做到良好的監控,預防可能存在的問題,問題一旦發生,能快速地解決問題。
?
???
Advanced Replication與Streams Replication的原理是完全不同的,Streams Replication可以到表、用戶、數據庫級別,但高級復制似乎只能到表一級。
?
??? 注意:Streams Replication不是高級復制的升級版。
?
?
------------------------------------------------
??? 異構環境下,Oracle的高可用和容災有Advanced Replication和Streams Replication兩種,兩種的異同點如下:
?
??? 1.高級復制是基于觸發器(trigger)原理,而Stream是基于日志挖掘原理,因此Stream復制對源數據庫的性能影響更小,但實時性不如高級復制。
??? 2.高級復制復制的對象是基于數據庫目標(Object)的,如表、索引和存儲過程,而Stream復制可以針對表、方案(schema)和整個數據庫,因此如果出于容災整個數據庫的考慮,Stream復制的配置相對簡單。
??? 3.高級復制是一種相當成熟的技術,在許多關鍵系統中得到成功的運用,相對于9iR2推出的Stream復制,高級復制目前在穩定性與安全性方面更經得起考驗。
??? 4.從發展的角度看,流的應用會越來越多,從Oracle10g開始,Oracle公司提供了從高級復制向流復制移植的工具。可以看出,Oracle公司會更偏重于基于流的新技術。
??? 5.由于高級復制是基于觸發器的,因此所有的復制對象結構(DDL)的改變,都必須通過Oracle提供的復制包來實施,和應用結合的比較緊,更適合于開發者使用,而流復制則更適合DBA來實施。
?
??? 兩種都用了一段時間了,實際使用來看,Streams復制需要更少的帶寬,2m帶寬,如果Streams復制不行,高級復制大概更沒戲,但是用Streams最好別網絡斷線時間過長,不知道是bug還是Oracle沒考慮這種情況,如果復制停頓一段時間,再恢復正常,大概是隊列表中消息太多了,入隊出隊都很慢,非線性增長啊,這樣就需要不短的一段時間來同步數據,高級復制就沒這種狀況。
?
???
BUG:反正10.2.0.1有一些,看你碰的到碰不到了,嚴重的能讓你刪掉隊列表重建才行,意味著基本是重建整個復制了,不過想重復一下又不出現了;還有使用negative rule如果站點多了遇到大的更新事務速度就變得極慢,站點多了要先設計好結構;會不停在有apply進程的站點udump目錄下生成trc文件,雖然還算不上很成熟,不過Streams復制真是好東西,以后必定會取代高級復制,建議打10.2.0.3補丁,據說修正了不少bug。
?
???
Stream對系統的設計與維護方要有相當的對Stream技術的把控能力,而大多數系分與DBA對這個東西都沒有經驗,所以難以推廣;DataGuard勝在維護簡單可靠,一般DBA都可以維護。Stream以后會的前景會非常廣闊! 尤其是雙向復制,解決了很多實際問題。
?
?