实验分析:10G DG最大可用模式下备库发生故障时主库保护级别的变化
本文主要讨论在10G DG的最大可用保护级别下,如果备库发生故障,主库如何应对。
DG处于最大可用保护模式下,只有一个备库。
1、查看原来主库的保护模式
SQL> SELECT PROTECTION_MODE,PROTECTION_LEVEL FROM V$DATABASE;
PROTECTION_MODE PROTECTION_LEVEL
-------------------- --------------------
MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
2、在备库中停掉网卡
[root@standby ~]# ifdown eth0
3、此时在主库上执行
SQL> CREATE TABLE T(ID INT);
--这个会停顿180秒(默认值)才能完成建表
Table created.
4、查看此时后台的alert信息
Sun Jun 24 22:37:06 2007
ORA-16198: LGWR received timedout error from KSR
LGWR: Attempting destination LOG_ARCHIVE_DEST_2 network reconnect (16198)
LGWR: Destination LOG_ARCHIVE_DEST_2 network reconnect abandoned
Sun Jun 24 22:37:06 2007
Errors in file /u01/oracle/admin/primary/bdump/primary_lgwr_3822.trc:
ORA-16198: Timeout incurred on internal channel during remote archival
LGWR: Network asynch I/O wait error 16198 log 1 service 'standby'
Sun Jun 24 22:37:06 2007
Destination LOG_ARCHIVE_DEST_2 is UNSYNCHRONIZED
LGWR: Failed to archive log 1 thread 1 sequence 19 (16198)
Sun Jun 24 22:37:06 2007
LGWR: Closing remote archive destination LOG_ARCHIVE_DEST_2: 'standby' (error 16198)
(primary)
可以看到,主库在尝试连接备库失败后,会放弃传送日志到备库。
5、此时查看DG的保护模式
SQL> SELECT PROTECTION_MODE,PROTECTION_LEVEL FROM V$DATABASE;
PROTECTION_MODE PROTECTION_LEVEL
-------------------- --------------------
MAXIMUM AVAILABILITY RESYNCHRONIZATION
可以看到,DG仍然处于最大可用保护模式下,但PROTECTION_LEVEL已经变为RESYNCHRONIZATION。
当然,主库隔一段时间就会重试连接备库,如果网络修复后,DG的PROTECTION_LEVEL会重新成为MAXIMUM AVAILABILITY。
6、此时启用备库的网卡
service network restart
7、查看主库的alert日志
隔一段时间后,可以在alert中看到如下信息:
Sun Jun 24 22:57:32 2007
Thread 1 advanced to log sequence 22
Current log# 1 seq# 22 mem# 0: /u01/oracle/oradata/primary/redo01.log
LNSb started with pid=18, OS id=3904
Sun Jun 24 23:00:35 2007
LGWR: Standby redo logfile selected to archive thread 1 sequence 23
LGWR: Standby redo logfile selected for thread 1 sequence 23 for destination LOG_ARCHIVE_DEST_2
Thread 1 advanced to log sequence 23
Current log# 2 seq# 23 mem# 0: /u01/oracle/oradata/primary/redo02.log
Sun Jun 24 23:00:35 2007
ARC3: LGWR is actively archiving destination LOG_ARCHIVE_DEST_2
ARC3: Standby redo logfile selected for thread 1 sequence 22 for destination LOG_ARCHIVE_DEST_2
Sun Jun 24 23:01:26 2007
Thread 1 cannot allocate new log, sequence 24
Checkpoint not complete
Current log# 2 seq# 23 mem# 0: /u01/oracle/oradata/primary/redo02.log
Sun Jun 24 23:01:30 2007
Destination LOG_ARCHIVE_DEST_2 is SYNCHRONIZED
LGWR: Standby redo logfile selected to archive thread 1 sequence 24
LGWR: Standby redo logfile selected for thread 1 sequence 24 for destination LOG_ARCHIVE_DEST_2
Thread 1 advanced to log sequence 24
Current log# 3 seq# 24 mem# 0: /u01/oracle/oradata/primary/redo03.log
8、再次查询主库的保护模式
SQL> SELECT PROTECTION_MODE,PROTECTION_LEVEL FROM V$DATABASE;
PROTECTION_MODE PROTECTION_LEVEL
-------------------- --------------------
MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
可以看到,主库的PROTECTION_LEVEL会重新成为MAXIMUM AVAILABILITY。
至此,可以得到结论:
在最大保护模式下,如果备库出现故障,主库会自动降低保护级别,以使得主库的操作能继续执行,但是主库会有一小段时间的停顿
原文出处:
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/81912/viewspace-1274/,如需转载,请注明出处,否则将追究法律责任。