Data Guard 之 MAXIMIZE PROTECTION
9i以后,Oracle Data Guard 有三种保护模式:
1、MAXIMIZE PERFORMANCE(最大性能模式):该模式下日志文件传送采用arch或者lgwr异步传送,可能丢失数据情况,对主库的性能影响最小。
2、MAXIMIZE AVAILABILITY(最大可用模式):正常情况下采用lgwr同步数据传输,异常情况切换到MAXIMIZE PERFORMANCE模式,是一种性能和数据保护折中的方案。
3、MAXIMIZE PROTECTION(最大保护模式) :该模式提供最大的数据保护,LGWR同步数据传输,对主库的性能影响最大。
应该说,这三种模式各有优劣点,选用何种模式作为容灾手段,依照系统情况灵活处理。
相比MAXIMIZE AVAILABILITY和MAXIMIZE PERFORMANCE,MAXIMIZE PROTECTION下的DG体系,对主库性能的影响相对易见的,尤其是单物理standby库情况,往往备库端的异常情况会导致主库的不可用。
下面,来模拟一下主备库运行在 MAXIMIZE PROTECTION模式下的故障情况
1.备库down机,模拟故障。
SQL> shutdown immediate;
已经卸载数据库。
ORACLE 例程已经关闭。
2.主库端查日志传送情况
SQL> select DEST_ID,DEST_NAME,STATUS,ERROR from v$archive_dest;
DEST_ID DEST_NAME STATUS ERROR
———- ——————————————————————————– ——— ——————————————————————————–
1 LOG_ARCHIVE_DEST_1 VALID
2 LOG_ARCHIVE_DEST_2 ERROR ORA-01034: ORACLE 不可用
3 LOG_ARCHIVE_DEST_3 INACTIVE
4 LOG_ARCHIVE_DEST_4 INACTIVE
5 LOG_ARCHIVE_DEST_5 INACTIVE
6 LOG_ARCHIVE_DEST_6 INACTIVE
7 LOG_ARCHIVE_DEST_7 INACTIVE
8 LOG_ARCHIVE_DEST_8 INACTIVE
9 LOG_ARCHIVE_DEST_9 INACTIVE
10 LOG_ARCHIVE_DEST_10 INACTIVE
接下来在主库上执行事务:
SQL> create table wocainiao as select * from dba_data_files;
此时发现数据库挂起,过段时间,会收到如下错误。
create table wocainiao as select * from dba_data_files
第 1 行出现错误:
ORA-00603: ORACLE 服务器会话因致命错误而终止
从alert.log日志中,我们也可以获得以下信息:
LGWR: Network asynch I/O wait error 1092 log 2 service ‘test_standby’
Mon Feb 25 14:39:51 2008
Destination LOG_ARCHIVE_DEST_2 is UNSYNCHRONIZED
LGWR: All standby destinations have failed
******************************************************
WARNING: All standby database destinations have failed
WARNING: Instance shutdown required to protect primary
******************************************************
LGWR: terminating instance due to error 16098
Mon Feb 25 14:39:51 2008
Errors in file d:\oracle\product\10.2.0\admin\test\udump\test_ora_3816.trc:
ORA-16098: 为了保护主数据库, 已强行关闭不可访问的备用数据库
由于主库端LGWR不能传送数据到备库,主库此时强行宕机。可以看出,运行在最大保护模式的data guard体系能带来一个隐患,毕竟得有所失。对此,我们可以配置多个standby端来避免或者降低因单个standby问题(网络,os,etc)而造成的对主库的影响。
