在一些場合,一些業務是不能容忍丟失數據的。而在另外的場合,數據庫的可用性可能比數據的丟失更加重要。一些應用要求數據庫的性能最大化,並且可以容忍少許數據的丟失。以下是三種不同數據保護模式的描述總結。
以下兩張圖三種模式的特點,下面將逐一進行分析:
1、最大保護模式(Maximum protection)
這個保護模式確保在主庫發生故障的時候,沒有數據的丟失。爲了提供這種級別的保護,重做日誌涉及的事務必須寫入本地online redo log和standby database的standby redo log之後(假設有多個備庫,至少寫入其中的一個即可),纔可以提交事務。爲了保證數據的不丟失,如果發生了一個故障阻止了redo流可以寫入至少一個事務一致的standby database,主數據庫將關閉。
由以上即可知,要配置最大保護模式,我們需要在備庫建立standby redo log,使用LGWR寫日誌,SYNC同步日誌,AFFIRM。
參數配置實例:
alter system set log_archive_dest_2='SERVICE=db_phystdby LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=PHYSTDBY AFFIRM ';
2、最高可用性(Maximum availability)
這種保護模式在不影響主庫的可用性情況下,提供最高級別的數據保護。與最大保護模式一樣,重做日誌涉及的事務必須寫入本地online redo log和standby database的standby redo log之後(假設有多個備庫,至少寫入其中的一個即可),纔可以提交事務。不過與最大保護模式不同的是,如果發生故障阻止redo流寫入遠程的standby redo log中,主庫不會關閉。取而代之的是,主庫運轉在最高性能模式下,直到故障消除以及redo log 文件的gaps(裂縫)解決掉。當所有的gaps解決掉,主庫自動恢復運行至最高可用模式。
這種模式保證在主庫故障的時候不會發生數據丟失,但是僅僅在第二個故障沒有阻止完整的redo data從主庫發送至最少一個備庫中。
採用這種模式,同最大保護模式一樣,需要在備庫建立standby redo log,使用LGWR寫日誌,SYNC同步日誌,AFFIRM。
參數配置實例:
alter system set log_archive_dest_2='SERVICE=db_phystdby LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=PHYSTDBY AFFIRM ';
3、最高性能(Maximum performance)
最高性能模式是默認的保護模式,這種模式在不影響主庫性能的前提下提供最高級別的數據保護。這種模式事務提交是不受限制的。主庫的redo data流同樣要求寫入至少一個standby database,但是redo 流與創建redo data的事務相對而言是不同步的。
當網絡帶寬足夠使用時,這種模式提供了類似於最高可用模式的數據庫保護,但是對於主庫的性能影響最下。
從以上分析即可知,這種模式下,我們可以使用ARCH或LGWR。
當使用ARCH時,則需要SYNC(同步)。
當使用LGWR時,可以是SYNC也可以是ASYNC。
Standby redo這個可有可無。
示例配置:
alter system set log_archive_dest_2 = 'SERVICE=db_phystdby LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=PHYSTDBY';
4、切換演示
切換爲最大保護模式
a、現在備庫上做操作,添加standby logfile
[oracle@dg2 ~]$ sqlplus / as sysdba SQL*Plus: Release 10.2.0.1.0 - Production on Sun Jan 5 01:00:35 2014 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production With the Partitioning, OLAP and Data Mining options SQL> alter database add standby logfile group 4 ('/u01/oracle/oradata/ORCLDB/stdby_redo04.log') size 50M; Database altered. SQL> alter database add standby logfile group 5 ('/u01/oracle/oradata/ORCLDB/stdby_redo05.log') size 50M; Database altered. SQL> alter database add standby logfile group 6 ('/u01/oracle/oradata/ORCLDB/stdby_redo06.log') size 50M; Database altered.
b、在主庫上執行以下的操作
[oracle@dg1 bdump]$ sqlplus / as sysdba SQL*Plus: Release 10.2.0.1.0 - Production on Sun Jan 5 01:10:32 2014 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production With the Partitioning, OLAP and Data Mining options SQL> alter database set standby database to maximize PROTECTION; alter database set standby database to maximize PROTECTION * ERROR at line 1: ORA-01126: database must be mounted in this instance and not open in any instance SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount ORACLE instance started. Total System Global Area 390070272 bytes Fixed Size 2021024 bytes Variable Size 142608736 bytes Database Buffers 243269632 bytes Redo Buffers 2170880 bytes Database mounted. SQL> alter database set standby database to maximize PROTECTION; Database altered. SQL> select PROTECTION_MODE,OPEN_MODE,DB_UNIQUE_NAME,DATABASE_ROLE,SWITCHOVER_STATUS from v$database; PROTECTION_MODE OPEN_MODE DB_UNIQUE_NAME DATABASE_ROLE SWITCHOVER_STATUS -------------------- ---------- ------------------------------ ---------------- -------------------- MAXIMUM PROTECTION MOUNTED WENDING PRIMARY TO STANDBY 分別將FLASHBACK_ON開啓。 SQL> select FLASHBACK_ON from v$database; FLASHBACK_ON ------------------ NO SQL> alter database flashback on; Database altered. 主庫上操作 SQL> alter system set log_archive_dest_2 = 'SERVICE=db_phystdby LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=PHYSTDBY AFFIRM '; System altered. SQL> alter database open; Database altered. SQL> select PROTECTION_MODE,OPEN_MODE,DB_UNIQUE_NAME,DATABASE_ROLE,SWITCHOVER_STATUS from v$database; PROTECTION_MODE OPEN_MODE DB_UNIQUE_NAME DATABASE_ROLE SWITCHOVER_STATUS -------------------- ---------- ------------------------------ ---------------- -------------------- MAXIMUM PROTECTION MOUNTED PHYSTDBY PHYSICAL STANDBY SESSIONS ACTIVE