DataGuard是Oracle數據庫自帶的數據同步功能,基本原理是將日志文件從原數據庫傳輸到目標數據庫,然后在目標數據庫上應用(Apply)這些日志文件,從而使目標數據庫與源數據庫保持同步。DataGuard提供了三種日志傳輸(Redo Transport)方式,分別是ARCH傳輸、LGWR同步傳輸和LGWR異步傳輸。在上述三種日志傳輸方式的基礎上,提供了三種數據保護模式,即最大性能(Maximum Performance Mode)、最大保護(Maximum Protection Mode)和最大可用(Maximum Availability Mode),其中最大保護模式和最大可用模式要求日志傳輸必須用LGWR同步傳輸方式,最大性能模式下可用任何一種日志傳輸方式。
最大性能模式:這種模式是默認的數據保護模式,在不影響源數據庫性能的條件下提供盡可能高的數據保護等級。在該種模式下,一旦日志數據寫到源數據庫的聯機日志文件,事務即可提交,不必等待日志寫到目標數據庫,如果網絡帶寬充足,該種模式可提供類似于最大可用模式的數據保護等級。
最大保護模式:在這種模式下,日志數據必須同時寫到源數據庫的聯機日志文件和至少一個目標庫的備用日志文件(standby redo log),事務才能提交。這種模式可確保數據零丟失,但代價是源數據庫的可用性,一旦日志數據不能寫到至少一個目標庫的備用日志文件(standby redo log),源數據庫將會被關閉。這也是目前市場上唯一的一種可確保數據零丟失的數據同步解決方案。
最大可用模式:這種模式在不犧牲源數據庫可用性的條件下提供了盡可能高的數據保護等級。與最大保護模式一樣,日志數據需同時寫到源數據庫的聯機日志文件和至少一個目標庫的備用日志文件(standby redo log),事務才能提交,與最大保護模式不同的是,如果日志數據不能寫到至少一個目標庫的備用日志文件(standby redo log),源數據庫不會被關閉,而是運行在最大性能模式下,待故障解決并將延遲的日志成功應用在目標庫上以后,源數據庫將會自動回到最大可用模式下。
根據在目標庫上日志應用(Log Apply)方式的不同,DataGuard可分為Physical Standby(Redo Apply)和Logical Standby(SQL Apply)兩種。
Physical Standby數據庫,在這種方式下,目標庫通過介質恢復的方式保持與源數據庫同步,這種方式支持任何類型的數據對象和數據類型,一些對數據庫物理結構的操作如數據文件的添加,刪除等也可支持。如果需要,Physical Standby數據庫可以只讀方式打開,用于報表查詢、數據校驗等操作,待這些操作完成后再將數據庫置于日志應用模式下。
Logical Standby數據庫,在這種方式下,目標庫處于打開狀態,通過LogMiner挖掘從源數據庫傳輸過來的日志,構造成SQL語句,然后在目標庫上執行這些SQL,使之與源數據庫保持同步。由于數據庫處于打開狀態,因此可以在SQL Apply更新數據庫的同時將原來在源數據庫上執行的一些查詢、報表等操作放到目標庫上來執行,以減輕源數據庫的壓力,提高其性能。