(一)三種保護模式介紹
1.最大性能模式
這種模式保證數據庫主庫性能最大化,主備庫之間數據是異步傳輸的。即,主庫日志歸檔以后才會傳輸到備庫,在備庫上使用歸檔日志文件做恢復操作。
這種模式提供在不影響primary數據庫性能前提下最高級別的數據保護策略。事物可以隨時提交,當前primary數據庫的redo數據也需要至少寫入一個standby數據庫,不過這種寫入是不同步的。
2.最高可用模式
這種模式和“最大保護”模式差不多,正常情況下,主備庫之間是同步的。當網絡或備庫出現故障時,不會影響到主庫的宕機,主庫會自動切換為“ 最大性能”模式,等待備庫可用時,將歸檔傳輸到備庫做恢復。
可以把最高可用模式理解為“最大保護”模式和“最大性能”模式的中間體。
這種模式提供在不影響primary數據庫可用前提下最高級別的數據保護策略。其實現方式與最大保護模式類似,也是要求所有事物在提交前必須保障redo數據至少在一個standby數據庫可用,不過與之不同的是,如果出現故障導致無法同時寫入stangby數據庫redo log,primary數據庫並不會shutdown,而是自動轉為最高性能模式,等standby數據庫恢復正常之后,又自動轉換為最高可用模式。
3.最大保護模式
這種模式主備之間數據是同步的。即主庫提交commit的同時,備庫會做相應的恢復。最大限度保證了數據的完整性,不允許數據的丟失。
如果主備庫之間網絡,或者備庫出現問題會直接影響主庫操作,導致主庫宕機。這種模式能夠確保絕無數據丟失。要實現這一步當然是有代價的,他要求所有的事物在提交前期redo不僅被寫入本地的online redo log,還要同時提交到standby數據庫的standby redo log,並確認redo數據至少在一個standby數據庫可用(如果有多個數據庫),然后才在primary數據庫上提交。如果出現故障導致standby數據庫不可用,那么primary數據庫也會被shutdown。
注意:
最大保護模式和最高可用模式需要至少一個standby數據庫redo數據被同步寫入。
(二)三種保護模式參數配置
最大性能:
LGWR ASYNC NOAFFIRM
最大保護,最高可用:
LGWR SYNC AFFIRM
(三)三種保護模式轉換
如何查看數據庫的主備、保護模式:
主庫:
SQL> select name,open_mode,database_role,protection_mode,protection_level from v$database; NAME OPEN_MODE DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL --------- -------------------- ---------------- -------------------- ------------------- ADGDB READ WRITE PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
備庫:
SQL> select name,open_mode,database_role,protection_mode,protection_level from v$database; NAME OPEN_MODE DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL --------- -------------------- ---------------- -------------------- -------------------- ADGDB READ ONLY WITH APPLY PHYSICAL STANDBY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
1.轉換為最高可用模式,在備庫和主庫上執行:
alter database set standby database to maximize availability;
2.轉換為最大性能模式,在備庫和主庫上執行:
alter database set standby database to maximize performance;
3.轉換為最大保護模式,在備庫和主庫上執行:
alter database set standby database to maximize protection;
例子:將DataGuard從默認的最大性能模式切換為最高可用模式
(1)備庫
查詢備庫的保護模式:
SQL> select name,db_unique_name,open_mode,database_role,protection_mode,protection_level from v$database; NAME DB_UNIQUE_NAME OPEN_MODE DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL --------- ------------------ -------------------- ---------------- -------------------- -------------------- ADGDB adgdbstandby READ ONLY WITH APPLY PHYSICAL STANDBY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
修改備庫的保護模式:
SQL> alter database set standby database to maximize availability; Database altered.
再次查看備庫的Dataguard保護模式:
SQL> select name,db_unique_name,open_mode,database_role,protection_mode,protection_level from v$database; NAME DB_UNIQUE_NAME OPEN_MODE DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL --------- ------------------ -------------------- ---------------- -------------------- -------------------- ADGDB adgdbstandby READ ONLY WITH APPLY PHYSICAL STANDBY MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
(2)主庫
同樣的,查看主庫的保護模式
SQL> select name,db_unique_name,open_mode,database_role,protection_mode,protection_level from v$database; NAME DB_UNIQUE_NAME OPEN_MODE DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL --------- ----------------- ------------ ---------------- -------------------- -------------------- ADGDB adgdb READ WRITE PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
修改主庫的保護模式:
SQL> alter database set standby database to maximize availability; Database altered.
再次確認,DataGuard的保護模式已經變為了maximum availability:
SQL> select name,db_unique_name,open_mode,database_role,protection_mode,protection_level from v$database; NAME DB_UNIQUE_NAME OPEN_MODE DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL --------- ----------------- ----------- ------------- -------------------- -------------------- ADGDB adgdb READ WRITE PRIMARY MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
【完】