Switchover and Switch Back

1. Documentación en Tahiti -> Oracle Database, 11g Release 2 (11.2) -> Masters Book List -> 5 Switchover and Failover Operations

2. Un Switchover es la operación de intercambio de roles entre la BD primaria y la BD Standby. Se garantiza que no hay perdida de datos y se realiza normalmente para tareas de mantenimiento. No hay que confundir con Failover. El Failover es la transación deuna BD Standby en primaria cuando hay un fallo en la primaria o no se puede acceder por alguna razón.

Uno de los prerrequisitos importantes para hacer Switchover con el Broker es que tenemos que tener configuración un servicio con GLOBAL_NAME = <db_unique_name>_DGMGRL.db_domain en el listener de ambos nodos. Ya lo hemos realizado durante la creación del Data Guard.

3. El primer ejercicio consiste en cambiar los roles Primary/Standby entre las BD OCM/DG, respectivamente.

-- Comprobamos el estado del SWITCHOVER en la instancia OCM
-- Como no hemos empezado, debe aparecer "TO_STANDBY"
SELECT SWITCHOVER_STATUS FROM V$DATABASE;

 

# Nos conectamos con el interfaz dgmgrl
dgmgrl sys/***********

# Comprobamos el estado de la BD Primaria (OCM) y la BD Standby (DG)
SHOW DATABASE VERBOSE 'OCM';
SHOW DATABASE VERBOSE 'DG';

# Lanzamos la operación de SWITCHOVER
SWITCHOVER TO 'DG';

# Comprobamos el estado tras el Switchover
SHOW CONFIGURATION;

# Volvemos a hacer otro Switchover para dejar la BD como estaba.
# Lanzamos el Switchover especificando que la nueva BD Primary sea OCM
SWITCHOVER TO 'OCM';

4. Este proceso se peude hacer manualmente sin necesidad del Broker. Veamos cómo se hace. Primero realizamos un SWITCHOVER hacia DG. Los siguientes pasos se realizan en OCM. Hay más documentación en esta página.

-- Revisamos la configuración de la BD OCM
SELECT SWITCHOVER_STATUS FROM V$DATABASE;

-- Preparamos la BD RAC para ser la nueva Standby
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;

-- Reiniciamos la instancia
SHUTDOWN ABORT;
CONN / AS SYSDBA
STARTUP MOUNT;

Los siguientes pasos se realizan sobre DG.

-- Convertimos la BD DG en primaria
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;

-- Abrimos la BD
ALTER DATABASE OPEN;

Ahora activamos Redo Apply en OCM.

-- Activamos Redo-Apply
ALTER DATABASE
  RECOVER MANAGED STANDBY DATABASE
  USING CURRENT LOGFILE
  DISCONNECT FROM SESSION;

-- Comprobamos que está aplicando correctamente
SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS FROM V$MANAGED_STANDBY;

Ya hemos realizado el switchover hacia DG. Pero tenemos que hacer la vuelta atrás. Hay que realizar los mismos pasos, pero teniendo en cuenta que DG en la BD primaria ahora, y RAC es la BD Standby.

-- Pasos a realizar en la instancia DG
SELECT SWITCHOVER_STATUS FROM V$DATABASE;
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
SHUTDOWN ABORT;
CONNECT / AS SYSDBA
STARTUP MOUNT;

-- Pasos a realizar en la instancia OCM
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
ALTER DATABASE OPEN;

-- Por último, activamos Redo-Apply en DG y comprobamos que está funcionando
ALTER DATABASE
  RECOVER MANAGED STANDBY DATABASE
  USING CURRENT LOGFILE
  DISCONNECT FROM SESSION;
SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS FROM V$MANAGED_STANDBY;