Saturday, February 8, 2014

Role Transitions - Switchover with Broker

Role Transitions ocorre quando por falha ou necessidade as regras de banco de dados, produção e standby mudam.

Switchover é uma operação planejada, a qual não há perda de dados e todos os bancos continuam fazendo parte da mesma configuração, mesmo que haja troca de regras.

1. Pre-requisitos


1.1 Broker devidamente configurado.

É possivel validar se a configuração do broker esta correta utilizando o comando show configuration, caso a configuração não esteja valida, ou seja reportado algum erro de parametro deve ser analisado e corrigido antes de se iniciar o switchover.

DGMGRL> show configuration

Configuration - orcl_dr

  Protection Mode: MaxPerformance
  Databases:
    orcl     - Primary database
    orclstby - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS

1.2 Static Service

Verificar se o parametro StaticConnectIdentifier esta devidamente configurado em ambos os bancos de dados, caso ele esteja nulo o Oracle assume o valor, _DGMGRL., o qual é registrado automaticamente no listener de cada instancia.

1.3 Parametro do Broker LOG_ARCHIVE_MAX_PROCESSES

Este parametro deve estar configurado para no minimo 4 em cada banco que fizer parte da configuração.
LOG_ARCHIVE_MAX_PROCESSES >= 4

1.4 Confirmar se o Redolog em Standby será limpo (clear).

Antes do standby database migrar para primary database seus online redologs devem ser limpos (clear), esta operação é automatizada pelo broker, porém o parametro LOGFILENAMECONVERT deve ter sido configurado previamente.

Este parametro pode ser configurado antes do switchover pelo comando edit database do broker, porém a instancia de standby precisa ser reiniciada.

Caso queria ou/e seja necessário realizar a limpeza manual, é possivel executar os seguintes passos pelo SQLPLUS do banco de standby, antes de iniciar o switchover.

SQL> SELECT DISTINCT L.GROUP# FROM V$LOG L, V$LOGFILE LF 
     WHERE L.GROUP# = LF.GROUP# AND L.STATUS 
     NOT IN ('UNUSED','CLEARING','CLEARING_CURRENT');

SQL> ALTER DATABASE CLEAR LOGFILE GROUP ;


Estes parametros, (StaticConnectIdentifier , LOG_ARCHIVE_MAX_PROCESSES e LOGFILENAMECONVERT) podem ser revisados através do comando show database, conforme a seguir:

DGMGRL> show database verbose orcl

Database - orcl

  Role:            PRIMARY
  Intended State:  TRANSPORT-ON
  Instance(s):
    orcl

  Properties:
    DGConnectIdentifier             = 'orcl'
    ObserverConnectIdentifier       = ''
    LogXptMode                      = 'ASYNC'
    DelayMins                       = '0'
    Binding                         = 'OPTIONAL'
    MaxFailure                      = '0'
    MaxConnections                  = '1'
    ReopenSecs                      = '300'
    NetTimeout                      = '30'
    RedoCompression                 = 'DISABLE'
    LogShipping                     = 'ON'
    PreferredApplyInstance          = ''
    ApplyInstanceTimeout            = '0'
    ApplyParallel                   = 'AUTO'
    StandbyFileManagement           = 'MANUAL'
    ArchiveLagTarget                = '0'
    LogArchiveMaxProcesses          = '4'
    LogArchiveMinSucceedDest        = '1'
    DbFileNameConvert               = 'orcl,orclstby'
    LogFileNameConvert              = 'orcl,orclstby'
    FastStartFailoverTarget         = ''
    InconsistentProperties          = '(monitor)'
    InconsistentLogXptProps         = '(monitor)'
    SendQEntries                    = '(monitor)'
    LogXptStatus                    = '(monitor)'
    RecvQEntries                    = '(monitor)'
    SidName                         = 'orcl'
    StaticConnectIdentifier         = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1523))(CONNECT_DATA=(SERVICE_NAME=ORCL)(INSTANCE_NAME=orcl)(SERVER=DEDICATED)))'
    StandbyArchiveLocation          = 'use_db_recovery_file_dest'
    AlternateLocation               = ''
    LogArchiveTrace                 = '0'
    LogArchiveFormat                = '%t_%s_%r.dbf'
    TopWaitEvents                   = '(monitor)'

Database Status:
SUCCESS

DGMGRL> 

1.5 Verificar se não há GAP de archive

Verificar se os archives estão sendo devidamente, pode ser validado através das consultas a seguir:

Produção:

SQL> SELECT THREAD#, SEQUENCE# FROM V$THREAD;

   THREAD#  SEQUENCE#
---------- ----------
1  270

Standby:

SQL> SELECT THREAD#, MAX(SEQUENCE#) FROM V$ARCHIVED_LOG
     WHERE APPLIED = 'YES'
     AND RESETLOGS_CHANGE# = (SELECT RESETLOGS_CHANGE#
     FROM V$DATABASE_INCARNATION
     WHERE STATUS = 'CURRENT')
     GROUP BY THREAD#;  2    3    4    5    6  

   THREAD# MAX(SEQUENCE#)
---------- --------------
1      268

Havendo diferença de 1 a 2 archives podemos considerar que não há GAPS entre as instancias.

1.6 Verificar se o banco de standby possui todos os tempfiles de produção.

Tempfiles criados no banco de produção não são propagados nos bancos de standby, portanto é uma boa pratica verificar se todos os tempfiles estão reflitidos em ambos bancos:

SELECT TMP.NAME FILENAME, BYTES, TS.NAME TABLESPACE
     FROM V$TEMPFILE TMP, V$TABLESPACE TS WHERE TMP.TS#=TS.TS#;

1.7 Offline Datafiles

Verificar se há algum datafile offline e traze-los online:

SQL> SELECT NAME FROM V$DATAFILE WHERE STATUS='OFFLINE';

2. Switchover


Após ter certeza de que a configuração do dataguard esta correta, realizar o switchover conforme a seguir, realizar sempre o switchover através do banco primary (produção).

Realizar, pelo broker: Switchover to ;

[oracle@os-indaia-orcl-prod trace]$ dgmgrl
DGMGRL for Linux: Version 11.2.0.3.0 - Production

Copyright (c) 2000, 2009, Oracle. All rights reserved.

Welcome to DGMGRL, type "help" for information.
DGMGRL> connect sys/oracle@orcl
Connected.
DGMGRL> show configuration

Configuration - orcl_dr

  Protection Mode: MaxPerformance
  Databases:
    orcl     - Primary database
    orclstby - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS

DGMGRL> switchover to orclstby;
Performing switchover NOW, please wait...
New primary database "orclstby" is opening...
Operation requires shutdown of instance "orcl" on database "orcl"
Shutting down instance "orcl"...
ORACLE instance shut down.
Operation requires startup of instance "orcl" on database "orcl"
Starting instance "orcl"...
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.
Database mounted.
Switchover succeeded, new primary is "orclstby"
DGMGRL> show configuration;

Configuration - orcl_dr

  Protection Mode: MaxPerformance
  Databases:
    orclstby - Primary database
    orcl     - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS

DGMGRL> 

Referencias:
Metalink: 11.2 Data Guard Physical Standby Switchover Best Practices using the Broker (Doc ID 1305019.1)
Oracle Data Guard Administration
Oracle Data Guard Broker

No comments: