Se a área de ARCHIVE encher, execute FAILOVER
O Oracle Data Guard Broker permite o Fast Start Failover, que executa o Failover para o Standby em caso de falha na Produção.
Este cenário inclui um computador Observer, que precisa apenas do Oracle Client instalado. Se o Standby e o Observer perderem contato com a Produção por um determinado (configurável) número de segundos, o Failover é executado.
Além da perda de comunicação, o Fast Start Failover permite a execução do Failover em situações de falhas específicas, por exemplo, se a área de ARCHIVEs encher. Pode ser configurado também de forma que se um determinado erro ORA acontecer, o Failover é executado.
No exemplo abaixo, eu tenho configurado como condições extras para o Failover as opções “Corrupted Controlfile”, “Corrupted Dictionary”, “Datafile Offline”, além do erro “ORA-27102: out of memory”.
[oracle@OracleDG01 ~]$ dgmgrl SYS/Nerv2012@NERV01
DGMGRL for Linux: Version 11.2.0.1.0 - 64bit Production
Copyright (c) 2000, 2009, Oracle. All rights reserved.
Welcome to DGMGRL, type "help" for information.
Connected.
DGMGRL> SHOW CONFIGURATION;
Configuration - DRSolution
Protection Mode: MaxPerformance
Databases:
nerv01 - Primary database
nerv02 - (*) Physical standby database
nerv03 - Logical standby database
Fast-Start Failover: ENABLED
Configuration Status:
SUCCESS
DGMGRL> SHOW FAST_START FAILOVER;
Fast-Start Failover: ENABLED
Threshold: 30 seconds
Target: nerv02
Observer: OracleDG04.localdomain
Lag Limit: 600 seconds
Shutdown Primary: TRUE
Auto-reinstate: TRUE
Configurable Failover Conditions
Health Conditions:
Corrupted Controlfile YES
Corrupted Dictionary YES
Inaccessible Logfile NO
Stuck Archiver NO
Datafile Offline YES
Oracle Error Conditions:
ORA-27102: out of memory
Em seguida, eu adiciono a condição extra “Stuck Archiver”.
DGMGRL> ENABLE FAST_START FAILOVER CONDITION "Stuck Archiver"
Succeeded.
DGMGRL> EXIT
Agora simulo um “enchimento” da área de Archives, alterando o diretório de gravação para um onde o usuário oracle não tem permissão (o diretório /).
[oracle@OracleDG01 ~]$ sqlplus / AS SYSDBA
SQL*Plus: Release 11.2.0.1.0 Production on Mon Apr 16 10:46:02 2012
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> SHOW PARAMETER LOG_ARCHIVE_DEST_1
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1 string LOCATION=/home/oracle/archives/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=NERV01
log_archive_dest_10 string
log_archive_dest_11 string
log_archive_dest_12 string
log_archive_dest_13 string
log_archive_dest_14 string
log_archive_dest_15 string
log_archive_dest_16 string
log_archive_dest_17 string
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_18 string
log_archive_dest_19 string
SQL> ALTER SYSTEM SET log_archive_dest_1='LOCATION=/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=NERV01';
System altered.
Forço então a geração de um ARCHIVE, que fica congelada.
SQL> ALTER SYSTEM SWITCH LOGFILE;
No computador que funciona como Observer, vejo a mensagem da execução do Failover.
DGMGRL> START OBSERVER;
Observer started
10:47:21.05 Monday, April 16, 2012
Initiating Fast-Start Failover to database "nerv02"...
Performing failover NOW, please wait...
Failover succeeded, new primary is "nerv02"
10:47:37.44 Monday, April 16, 2012
E no Alert Log da Produção, vejo a confirmação do motivo do Failover.
Mon Apr 16 10:46:49 2012
A user-configurable Fast-Start Failover condition was detected. The primary is shutting down due to Stuck Archiver .
Database NERV01 will not be automatically reinstated.
USER (ospid: 6689): terminating the instance due to error 16832
Instance terminated by USER, pid = 6689
Este é um dos exercícios feitos no Treinamento de Oracle Data Guard na Nerv.
O Oracle Data Guard é um produto muito maior do que a maioria dos DBAs conhece, e é a solução de alta disponibilidade em bancos de dados mais avançada que conheço. Neste Treinamento os alunos irão, sem virtualização alguma, criar diversos bancos Standby, de todos os tipos (Physical, Logical, Snapshot), além de utilizar o Active Data Guard, Data Guard Broker, Switchover, Switchback, Failover, Failback, e muito mais. Acho que só de Physical Standby criamos um 6, de todas as formas possíveis.
Agenda: http://nervinformatica.com.br/
Valores: http://nervinformatica.com.br/valores.asp
Inscrições: contato@nervinformatica.com.br