Stream 是Oracle 的訊息佇列(也叫Oracle Advanced Queue)技術的一種擴充應用。 Oracle 的訊息佇列是通過發布/訂閱的方式來解決事件管理。流複製(Stream replication)只是基於它的一個資料共用技術,也可以被用作一個可靈活定製的高可用性方案。 它可以實現兩個資料庫之間資料庫級,schema級,Table級的資料同步,並且這種同步可以是雙向的。 Oracle Stream也是通過資料冗餘來提高可用性,這一點和Data Guard 類型。
Oracle 進階複製(Oracle advanced Replication) 和流複製(Stream Replication) 是從名稱和功能上都相似的兩種技術。 但前者是基於觸發器的,後者是基於日誌挖掘(Logminer)技術。
1、Stream 的工作原理
Stream 是Oracle Advanced Queue技術的一種擴充應用, 這種技術最基本的原理就是收集事件,把時間儲存在隊列中,然後把這些事件發布給不同的訂閱者。 從DBA的角度來說, 就是把捕獲Oracle資料庫產生的Redo日誌,然後把這些日誌通過網路傳播到多個資料庫,其他資料庫通過應用這些日誌,達到複製變化的作用。
在Stream 環境下, 複製的起點資料庫叫作Source Database, 複製的終點資料庫叫作Target Database。 在這兩個資料庫上都要建立一個隊列,其中的Source Database上的是發送隊列,而Target Database上的是接收隊列。
資料庫的所有操作都會被記錄在日誌中。 配好Stream環境後, 在Source Database上會有一個捕獲進程(Capture Process), 該進程利用Logminer技術從日誌中提取DDL,DML語句,這些語句用一種特殊的格式表達,叫作邏輯變更記錄(Logical Change Record, LCR)。 一個LCR對應一個原子的行變更,因此來源資料庫上的一個DML語句,可能對應若干個LCR記錄。 這些LCR會儲存到Sourece Database的本地發送隊列中。然後傳播進程(Propagation Process)把這些記錄通過網路發送到Target Database的接收隊列。 在Target Database上會有一個應用進程(Apply Process), 這個進程從本地的接收隊列中取出LCR記錄,然後在本地應用,實現資料同步
2、Data Guard 和Stream 區別
Date Guard有兩種類型:physical standby 和 logical standby。 這兩中standby 都有3個功能模組: 記錄傳送;日誌接收,日誌恢複。兩種standby在前兩個模組中是一樣的,都是通過LGWR或者ARCn進程發送日誌,通過RFS進程接受日誌。 區別在第三個模組:
Physical Standby 使用的是Media Recovery技術直接在資料區塊層級進行恢複, 因此Physical Standby 能夠做到兩個資料庫的完全同步, 沒有資料類型限制。
Logical Standby實際是通過Logminer技術,把日誌中的記錄還原成SQL語句,然後通過Apply Engine 執行這些語句實現資料同步, 因此Logical Standby不能保證資料的完全一致。 比如Logical Standby 不支援某些資料類型,這一點在選擇Logical Standby時必須要考慮。 Logical Standby 不支援的資料類型可以從DBA_LOGSTDBY_UNSUPPORTED是不裡查看。
SQL>SELECT * FROM DBA_LOGSTDBY_UNSUPPORTED;
Stream 使用的是Logical Standby 第三個模組,也就是在Source Database一端,Capture 進程利用Logminer 技術把日誌內容還原成LCR, 然後發送到Target Database, 而在Target database 一端, 也是通過Apply Engine 執行這些LCR。 因此Stream在使用上也有些限制條件。這些可以從視圖ALL/DBA_STREAMS_NEWLY_SUPPORTED, ALL/DBA_STREAMS_UNSUPPORTED 查看stream複製不支援的資料類型。
SQL>SELECT table_name, reason FROM ALL_STREAMS_NEWLY_SUPPORTED;
SQL>SELECT table_name, reason FROM DBA_STREAMS_NEWLY_SUPPORTED;
SQL>SELECT table_name, reason FROM DBA_STREAMS_UNSUPPORTED;
SQL>SELECT table_name, reason FROM ALL_STREAMS_UNSUPPORTED;
下面以圖表的形式列舉他們的區別:
Streams Data Guard
主要目的是資料共用 主要目的是災難恢複和高可用性
可以多方向同步 只能是單向,從Primary--> Standby
資料粒度可以是資料庫,Schema,Table三個層級 只有資料庫層級
支援異種平台的同步(Heterogeneous Platforms) 必須同種平台 (Homogeneous Platforms)
參與複製的每個資料庫可以讀寫 只有Primary可以讀寫,Standby 唯讀
支援Oracle 和非Oracle 資料庫間的同步 只能是Oracle資料庫間
查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/
3、前期規劃的幾點:
1)確定複製集:如是資料庫級還是表級
2)決定複製網站
3)決定LCR是本地捕獲還是下遊捕獲
本地捕獲: 在來源資料庫進行,從聯機日誌和歸檔日誌獲得LCR
下遊捕獲:在目標資料庫進行,從歸檔日誌獲得LCR.
本地捕獲可以保護更多的資料,但是會佔用來源資料庫的資源。
4)決定複寫拓撲結構:這時要決定複製資料庫的用途,是只用於預防災難,還是平時保持空閑,或允許使用者使用。