2014-06-03 Created By BaoXinjian
一、摘要
Oracle DataGuard是Oracle自帶的數據同步功能,基本原理是將日志文件從原數據庫傳輸到目標數據庫,然后在目標數據庫上應用這些日志文件,從而使目標數據庫與源數據庫保持同步,是一種數據庫級別的高可用性方案。
DataGuard可以提供Oracle數據庫的冗災、數據保護、故障恢復等,實現數據庫快速切換與災難性恢復。
在生產數據庫的保證"事務一致性"時,使用生產庫的物理全備份創建備庫,備庫會通過生產庫傳輸過來的歸檔日志或重做條目自動維護備用數據庫。
DataGuard數據同步技術有以下優勢:
1. Oracle數據庫自身內置的功能,與每個Oracle新版本的新特性都完全兼容,且不需要另外付費。
2. 配置管理較簡單,不需要熟悉其他第三方的軟件產品。
3. 物理Standby數據庫支持任何類型的數據對象和數據類型。
4. 邏輯Standby數據庫處於打開狀態,可以在保持數據同步的同時執行查詢等操作。
5. 在最大保護模式下,可確保數據的零丟失。
二、架構
Oracle DataGuard由一個Primary數據庫(生產數據庫)及一個或多個Standby數據庫(最多9個)組成。組成Data Guard的數據庫通過Oracle Net連接,並且有可以分布於不同地域。
只要各庫之間可以相互通信,它們的物理位置並沒有什么限制,不受操作系統的限制。
1. Primary 數據庫
DataGuard包含一個Primary數據庫即被大部分應用訪問的生產數據庫,該庫既可以是單實例數據庫,也可以是RAC。
2. Standby 數據庫
Standby數據庫是Primary數據庫的復制(事務上一致)。在同一個Data Guard中可以最多創建9個standby數據庫,一旦創建完成,Data Guard通過應用Primary數據庫的redo自動維護每一個Standby數據庫。
Standby數據庫同樣即可以是單實例數據庫,也可以是RAC結構。
3. 結構圖
三、Standby數據庫類型
Standby數據庫通常分兩類:邏輯standby和物理standby。
1. 邏輯standby
a. 邏輯standby是通過接收primary數據庫的redo log並轉換成sql語句,然后在standby數據庫上執行SQL語句實現同步;
b. 與主庫共享同樣的模式定義;
c. 通過應用SQL(sql apply)與主庫保持一致;
d. 當從主庫接受到日志后,邏輯備用數據庫是通過logmnr將日志轉換成sql,在邏輯備庫的表中,表可以同時用於恢復,報表查詢功能;
2. 物理standby
a. 物理standby是通過接收並應用primary數據庫的redo log以介質恢復的方式實現同步,不僅文件的物理結構相同,連塊在磁盤上的存儲位置都是一模一樣的;
b. 基於數據塊級別和主數據庫一致;
c. 通過應用日志(redo apply)與主庫保持同步;
d. 在mount standby階段進行應用日志恢復,而同時也可以open read only提供報表查詢;
四、備份庫狀態
1. 物理備庫
(1). Managed recovery state
該模式下log transport service歸檔日志到備庫,log apply service 自動應用這些日志。數據庫不處於mount狀態,任何讀都不允許。
(2). Read only state
如果我們想做備庫為報表功能,那么在備庫環境中,我們以read only形式打開數據庫。在備庫log apply service將不能夠應用歸檔日志到備庫,但是主庫的log transport service可以繼續傳遞歸檔日志到備庫。
我們可以非產輕松的在上述兩種運行下進程切換,一般情況下我們會在如下的場景下進程切換:
a. 物理備庫用於報表模式
b. 為了災難的保護,檢查數據是否正常的傳遞到了備庫
2. 邏輯備庫
Open read write mode
該種模式,備庫仍然可以不斷的應用歸檔日志,但是該備庫同時可以提供報表查詢功能。
當log apply service正在更新一張表時,該表仍然可以查詢,但是在該表上無法做任何的DML操作。如果其他模式下的對象沒有被log apply service所維護,那么我們可以更新該模式下的那些對象。
五、服務
1. 重做傳輸服務(Redo Transport Services)
控制redo數據的傳輸到一個或多個歸檔目的地。
2. 日志應用服務(Log Apply Services)
應用redo數據到standby數據庫,以保持與primary數據庫的事務一致。redo數據即可以從standby數據庫的歸檔文件讀取,也可直接應用備用日志文件讀取。
3. 角色轉換服務(Role Transitions)
DataGuard中有兩種角色:primary和standby。角色轉換就是讓數據庫在這兩個角色中切換,
4. 切換分兩種:switchover和failover
(1). switchover:
a. 轉換primary數據庫與standby數據庫。
b. switchover可以確保不會丟失數據。
c. 計划中角色轉換,主要用於操作系統和硬件的維護,備庫切換成主庫,而主庫切換成備庫,在切換完成后,這個過程沒有任何的數據丟失和損失。
(2). failover:
a. 當primary數據庫出現故障並且不能被及時恢復時,會調用failover將一個standby數據庫轉換為新的primary數據庫。
b. 在最大保護模式或最高可用性模式下,failover可以保證不會丟失數據。
c. 非計划中的角色轉換,在緊急情況下使用,根據數據的保護模式的不同,只有少量的或者是很少的數據損失
六、保護模式
1. 最大保護
這種模式是默認的數據保護模式,在不影響源數據庫性能的條件下提供盡可能高的數據保護等級。
在該種模式下,一旦日志數據寫到源數據庫的聯機日志文件,事務即可提交,不必等待日志寫到目標數據庫,如果網絡帶寬充足,該種模式可提供類似於最大可用模式的數據保護等級。
2. 最大可用性
這種模式和"最大保護"基本上差不多。正常情況下,主備庫之間是同步的。
當網絡或者備庫出現問題時,不會影響到主庫的當機,主庫會自動轉換庫"最大性能"模式,等待備庫可用時,將歸檔傳輸到備庫做恢復。
3. 最大性能
這種模式保證主庫性能最大化,主備庫之間數據是異步傳輸的。
即,主備日志歸檔以后才會傳輸到備用庫,在備庫上使用歸檔日志文件做恢復操作。
七、安裝條件
運行DataGuard需要具備以下幾個條件:
1. 在主庫和從庫的所有機器上必須安裝同一個版本的Oracle企業版。
2. 主庫必須運行在歸檔模式下。
3. 主庫和從庫的操作系統必須一樣(允許版本不同),從庫可以使用與主庫不同的目錄結構。
4. 主從庫硬件系統的體系結構必須相同。比如:主庫運行在64位的Sun Sparc系統上,如果從庫是32位的Linux Intel系統就不允許。主從庫硬件的配置可以不同,比如:CPU數量、內存大小、存儲配置等。
Thanks and Regards
參考:百度文庫 - http://wenku.baidu.com/
參考:Anpiter - http://blog.chinaunix.net/uid-14877370-id-2782040.html