miércoles, 29 de marzo de 2023

Data Guard : Como ejecutar un Failover cuando no se puede resolver el GAP en la Standby

El Failover es un cambio de rol, en el cual una base de datos Standby pasa a ser Primaria cuando la Primaria falla o queda inalcanzable.

 A continuación explicaré el procedimiento Manual que se ejecuta mediante comandos SQL. 

En este escenario tenemos instalado Oracle Database 19c con un Data Guard configurado con una base de datos Primaria y una Standby, ambas son single instance No-CDB.

La Standby habia reportado un GAP pero no se encontraban disponibles los archive logs que faltaban y a continuación falló la base de datos Primaria por lo que tuvimos que hacer un Failover sin resolver el GAP.

Procedimiento 

1 - Verificar Rol de la Base de Datos Standby

server1:orcl:/u05/backup> sqlplus / as sysdba

 SQL*Plus: Release 19.0.0.0.0 - Production on Tue Mar 28 13:21:59 2023

Version 19.16.0.0.0

 Copyright (c) 1982, 2022, Oracle.  All rights reserved.

 Connected to:

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.16.0.0.0

 SQL> select database_role from v$database;

 DATABASE_ROLE

----------------

PHYSICAL STANDBY

 

2 - Verificar que esta ejecutando el  proceso MRP

server1:orcl:/u05/backup> ps -ef | grep mrp

oracle    4918     1  0 09:29 ?        00:00:01 ora_mrp0_orcl

oracle   12904  9434  0 13:22 pts/2    00:00:00 grep --color=auto mrp

 

3 - Cancelar MRP

server1:orcl:/u05/backup> sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Tue Mar 28 13:25:05 2023

Version 19.16.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.

Connected to:

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.16.0.0.0


SQL>  recover managed standby database cancel;

Media recovery complete.

 

4 - Cambiar la Base de Datos a Modo Primaria

SQL> alter database recover managed standby database finish;

 

Da error por el GAP :

alter database recover managed standby database finish

*

ERROR at line 1:

ORA-00283: recovery session canceled due to errors

ORA-16171: RECOVER...FINISH not allowed due to gap for thr 1, seq 22871-22970

 

5 - Volvemos a ejecutar el Cancel por si quedo el MRP corriendo

SQL> alter database recover managed standby database cancel;

alter database recover managed standby database cancel 

*

ERROR at line 1:

ORA-16136: Managed Standby Recovery not active

 

6 - Activamos la Base, de esta forma monta la base de datos como Primaria.

SQL> alter database activate standby database;

Database altered.

 

 7 - Verificamos

SQL> select name,open_mode,database_role from v$database;

 

NAME      OPEN_MODE        DATABASE_ROLE

---------     --------------------     ----------------

ORCL       MOUNTED           PRIMARY


8 - Reiniciamos con force

SQL> STARTUP MOUNT FORCE;

ORACLE instance started.

Total System Global Area 1.0637E+10 bytes

Fixed Size                 13626296 bytes

Variable Size            4966055936 bytes

Database Buffers         5637144576 bytes

Redo Buffers               19927040 bytes

Database mounted.

 

9 - Nos aseguramos que este configurada en Maxima Performance

SQL> alter database set standby database to maximize performance;

 Database altered.

 

10 - Abrimos la Base de Datos

SQL> alter database open;

 Database altered.


Conclusión : Es posible realizar el Failover aun teniendo un GAP que no se puede resolver. En pocos pasos ejecutando comandos SQL podemos cambiar el rol de la Standby a Primaria.