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