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
Version 19.16.0.0.0
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 -
Production
Version 19.16.0.0.0
----------------
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
SQL> alter database activate standby database;
Database altered.
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.
SQL> alter database set standby database to maximize performance;
SQL> alter database open;
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.