Switchover y Failover con DataGuard Broker en Oracle 19c
Introduccion
En una nota previa revisamos cómo realizar un Switchover en Oracle DataGuard 19c usando comandos de Oracle. Esta vez vamos a realizar el Switchover y pasar por los procesos de Failover y Reinstate usando el DataGuard Broker.
Prerrequisitos
Estamos usando un ambiente DataGuard con una instancia Primaria y una Standby Física en Oracle 19c multitenant con una base de datos pluggable. Para más información sobre cómo crear un ambiente DataGuard favor de revisar Crear una Standby Física de Oracle DataGuard.
También necesitamos que este ambiente DataGuard esté configurado para DataGuard Broker. Para mas información en como se hace esto favor de revisar Configurar el DataGuard Broker en Oracle 19c.
Switchover
Se hace un Switchover al intercambiar los roles de las instancias participantes en un ambiente DataGuard como se describe en la documentación:
Durante un switchover, la base de datos primaria transiciona a un role de standby, y la base de datos standby transiciona al rol primario.
Un switchover garantiza que no haya pérdida de datos y se hace típicamente para mantenimientos planeados en el sistema primario.
Acceder al DataGuard Broker
Envía el comando dgmgrl
en la instancia Primaria para acceder al DataGuard Broker, entonces contéctate a la base de datos con el usuario SYSDG
:
[oracle@patodgprmy ~]$ dgmgrl
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Thu Jul 29 20:41:37 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Welcome to DGMGRL, type "help" for information.
DGMGRL> connect sysdg
Password:
Connected to "prmydb"
Connected as SYSDG.
Alternativamente se puede usar el usuario
SYS
si no se ha configurado un usuario para el DataGuard en el archivo orapwd.
Validar que las Bases de Datos estén Preparadas para el Switchover
Primero tenemos que validar que ambas bases de datos estén preparadas para el proceso de Switchover, enviando el comando validate database
:
DGMGRL> validate database prmydb
Database Role: Primary database
Ready for Switchover: Yes
Managed by Clusterware:
prmydb: NO
Validating static connect identifier for the primary database prmydb...
The static connect identifier allows for a connection to database "prmydb".
DGMGRL> validate database stbydb
Database Role: Physical standby database
Primary Database: prmydb
Ready for Switchover: Yes
Ready for Failover: Yes (Primary Running)
Managed by Clusterware:
prmydb: NO
stbydb: NO
Validating static connect identifier for the primary database prmydb...
The static connect identifier allows for a connection to database "prmydb".
Como ambas bases de datos se muestran como Ready for Switchover: Yes
entonces podemos proceder.
Realizar el Switchover
Enviamos el comando switchover to
indicando la base de datos que queremos que sea la nueva Primaria:
DGMGRL> switchover to stbydb
Performing switchover NOW, please wait...
Operation requires a connection to database "stbydb"
Connecting ...
Connected to "stbydb"
Connected as SYSDG.
New primary database "stbydb" is opening...
Operation requires start up of instance "prmydb" on database "prmydb"
Starting instance "prmydb"...
Connected to an idle instance.
ORACLE instance started.
Connected to "prmydb"
Database mounted.
Connected to "prmydb"
Switchover succeeded, new primary is "stbydb"
Entonces revisamos los nuevos roles enviando el comando show configuration
:
DGMGRL> show configuration
Configuration - dgpato
Protection Mode: MaxPerformance
Members:
stbydb - Primary database
prmydb - Physical standby database
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 43 seconds ago)
DGMGRL>
Como podemos ver la instancia stbydb
es ahora la base de datos Primaria y la instancia prmydb
es ahora la Standby Física,
los roles se han intercambiado por lo tanto el Switchover fue exitoso.
Failover
En un ambiente DataGuard cuando la instancia Primaria falla necesitas pasar por los procesos de Failover y Reinstate con el fin de restaurar el servicio de la base de datos, como se describe en la documentación;
Se mueve una base de datos Standby al rol de Primaria en respuesta a una falla en la base de datos Primaria.
Si el Flashback está habilitado en la base de datos Primaria se puede restablecer como una Standby para la nueva bases de datos Primaria una vez que se haya corregido la causa de la falla.
Para este ejercicio hemos detenido la instancia Primaria y su listener.
Acceder al DataGuard Broker
Envía el comando dgmgrl
en la instancia Standby para acceder al DataGuard Broker, entonces contéctate a la base de datos con el usuario SYSDG
:
[oracle@patodgstby ~]$ dgmgrl
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Thu Jul 29 21:36:11 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Welcome to DGMGRL, type "help" for information.
DGMGRL> connect sysdg
Password:
Connected to "stbydb"
Connected as SYSDG.
Validar que la Standby está Preparada para el Failover
Primero tenemos que validar que la base de datos Standby está preparada para el proceso de Failover, enviando el comando validate database
:
DGMGRL> validate database stbydb
Database Role: Physical standby database
Primary Database: prmydb
Warning: primary database was not reachable
Ready for Switchover: No
Ready for Failover: Yes (Primary Not Running)
Flashback Database Status:
prmydb: Unknown
stbydb: On
Managed by Clusterware:
prmydb: Unknown
stbydb: NO
Validating static connect identifier for the primary database prmydb...
Unable to connect to database using (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.20.0.10)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=prmydb_DGMGRL)(INSTANCE_NAME=prmydb)(SERVER=DEDICATED)(STATIC_SERVICE=TRUE)))
ORA-12541: TNS:no listener
Failed.
Warning: Ensure primary database's StaticConnectIdentifier property
is configured properly so that the primary database can be restarted
by DGMGRL after switchover
Temporary Tablespace File Information:
prmydb TEMP Files: Unknown
stbydb TEMP Files: 3
Data file Online Move in Progress:
prmydb: Unknown
stbydb: No
Transport-Related Information:
Transport On: No
Gap Status: Unknown
Transport Lag: 0 seconds (computed 351 seconds ago)
Transport Status: Success
Log Files Cleared:
prmydb Standby Redo Log Files: Unknown
stbydb Online Redo Log Files: Unknown
stbydb Standby Redo Log Files: Unknown
DGMGRL>
De la salida podemos ver que no hay información disponible de la Primaria ya que ha fallado.
Como la base de datos Standby está marcada como Ready for Failover: Yes (Primary Not Running)
entonces podemos proceder.
Realizar el Failover
Enviamos el comando failover to
indicando la base de datos que queremos que sea la nueva Primaria:
DGMGRL> failover to stbydb
Performing failover NOW, please wait...
Failover succeeded, new primary is "stbydb"
DGMGRL>
Entonces podemos revisar si el Failover funcionó enviando el comando show configuration
:
DGMGRL> show configuration
Configuration - dgpato
Protection Mode: MaxPerformance
Members:
stbydb - Primary database
prmydb - Physical standby database (disabled)
ORA-16661: the standby database needs to be reinstated
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 11 seconds ago)
El Failover fue exitoso ya que podemos ver que la instancia stbydb
es ahora la base de datos Primaria.
La instancia prmydb
(que aún está en estatus fallido) queda marcada como una potencial Standby Física que necesita ser reestablecida.
Reinstate
Cuando la falla en la instancia Primaria original haya sido arreglada, necesitamos restablecer esta base de datos para que pueda regresar a funcionar como parte de esta configuración de DataGuard.
Primero tenemos que iniciar con startup mount
la instancia arreglada:
[oracle@patodgprmy trace]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Jul 29 21:42:30 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup mount
ORACLE instance started.
Total System Global Area 1610609888 bytes
Fixed Size 9135328 bytes
Variable Size 1023410176 bytes
Database Buffers 570425344 bytes
Redo Buffers 7639040 bytes
Database mounted.
SQL>
Luego en la instancia Primaria actual (Standby original) accedemos al DataGuard Broker y nos conectamos a la base de datos con el usuario SYSDG
:
[oracle@patodgstby trace]$ dgmgrl
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Thu Jul 29 21:43:16 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Welcome to DGMGRL, type "help" for information.
DGMGRL> connect sysdg
Password:
Connected to "STBYDB"
Connected as SYSDG.
Entonces podemos enviar el comando reinstate database
indicando la base de datos que estuvo en estatus fallido:
DGMGRL> reinstate database prmydb
Reinstating database "prmydb", please wait...
Reinstatement of database "prmydb" succeeded
DGMGRL>
Finalmente podemos revisar si el Reinstate funcionó enviando el comando show configuration
:
DGMGRL> show configuration
Configuration - dgpato
Protection Mode: MaxPerformance
Members:
stbydb - Primary database
prmydb - Physical standby database
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 45 seconds ago)
Como podemos ver la instancia stbydb
es aún la base de datos Primaria pero ahora la instancia prmydb
es la Standby Física,
entonces el proceso de Reinstate fue exitoso.
Switchback
Como paso final despues de un Failover/Reinstate hay que regresar a los roles originales en este ambiente DataGuard.
Entonces necesitamos hacer los mismos pasos que revisamos en la sección previa para el Switchover, pero esta vez apuntando hacia la base de datos prmydb
:
Validar que las Bases de Datos estén Preparadas para el Switchover
DGMGRL> validate database stbydb
Database Role: Primary database
Ready for Switchover: Yes
Managed by Clusterware:
stbydb: NO
Validating static connect identifier for the primary database stbydb...
The static connect identifier allows for a connection to database "stbydb".
DGMGRL> validate database prmydb
Database Role: Physical standby database
Primary Database: stbydb
Ready for Switchover: Yes
Ready for Failover: Yes (Primary Running)
Managed by Clusterware:
stbydb: NO
prmydb: NO
Validating static connect identifier for the primary database stbydb...
The static connect identifier allows for a connection to database "stbydb".
Realizar el Switchover
DGMGRL> switchover to prmydb
Performing switchover NOW, please wait...
Operation requires a connection to database "prmydb"
Connecting ...
Connected to "prmydb"
Connected as SYSDG.
New primary database "prmydb" is opening...
Operation requires start up of instance "stbydb" on database "stbydb"
Starting instance "stbydb"...
Connected to an idle instance.
ORACLE instance started.
Connected to "stbydb"
Database mounted.
Connected to "stbydb"
Switchover succeeded, new primary is "prmydb"
Entonces revisamos los nuevos roles enviando el comando show configuration
:
DGMGRL> show configuration
Configuration - dgpato
Protection Mode: MaxPerformance
Members:
prmydb - Primary database
stbydb - Physical standby database
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 49 seconds ago)
Como podemos ver la instancia prmydb
es ahora la base de datos Primaria y la instancia stbydb
es ahora la Standby Física,
entonces los roles han sido regresados a los originales exitosamente.
Conclusión
Hemos realizado exitosamente un Switchover y un Failover en nuestro ambiente DataGuard en Oracle 19c multitenant. Podemos ver que el DataGuard Broker facilita el proceso y validación del intercambio de roles cuando te enfrentas a un escenario de mantenimiento o falla en un ambiente DataGuard.