Configurar el DataGuard Broker en Oracle 19c

Introducción

Oracle provee una herramienta para administrar, configurar y monitorear los componentes de un ambiente DataGuard llamada DataGuard Broker, de acuerdo a la documentación:

El broker de Oracle Data Guard es un sistema de administración distribuido que automatiza y centraliza la creación, mantenimiento y monitoreo de las configuraciones de Oracle Data Guard.

Se pueden realizar la mayoría de las actividades requeridas para manejar y monitorear las bases de datos en la configuración usando comandos de DGMGRL.

Aqúi vamos a ver como podemos habilitar el DataGuard Broker y usarlo a través de la interfaz de línea de comandos DGMGRL.

Prerrequisitos

Recientemente construimos un ambiente de DataGuard creando una Standby Física para nuestra instalación de Oracle 19c multitenant en la nota Crear una Standby Física de Oracle DataGuard.
Vamos a reutilizar esa instalación agregando lo necesario para activar el DataGuard Broker.

Habilitar el DataGuard Broker

Configurar Parámetros de la Base de Datos

Primero necesitamos preparar las intancias que son parte del ambiente de DataGuard para que los procesos internos del Broker se activen.
En la instancia Primaria modifica el parametro DG_BROKER_START:

[oracle@patodgprmy ~]$ sqlplus / as sysdba

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> ALTER SYSTEM SET DG_BROKER_START=TRUE scope=both;

System altered.

SQL> show parameter dg_broker

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
dg_broker_config_file1               string      /opt/oracle/product/19c/dbhome
                                                 _1/dbs/dr1prmydb.dat
dg_broker_config_file2               string      /opt/oracle/product/19c/dbhome
                                                 _1/dbs/dr2prmydb.dat
dg_broker_start                      boolean     TRUE

En la instancia Standby también modificamos el parámetro DG_BROKER_START y debemos limpiar el parámetro log_archive_dest_n:

[oracle@patodgstby ~]$ sqlplus / as sysdba

SQL> ALTER SYSTEM SET DG_BROKER_START=TRUE scope=both;

System altered.

SQL> alter system set log_archive_dest_2=" ";

System altered.

Agregar un Servicio Estático al Listener

El DataGuard Broker necesita un servicio estático para poder reiniciar las instancias, entonces tenemos que agregar un servicio llamado db_unique_name_DGMGRL al listener.ora en ambos servidores:

[oracle@patodgprmy ~]$ vi $ORACLE_HOME/network/admin/listener.ora
...
SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(SID_NAME=prmydb)
     (GLOBAL_DBNAME=prmydb_DGMGRL)
     (ORACLE_HOME=/opt/oracle/product/19c/dbhome_1)
     (ENVS="TNS_ADMIN=/opt/oracle/product/19c/dbhome_1/network/admin")))
[oracle@patodgstby ~]$ vi $ORACLE_HOME/network/admin/listener.ora
...
SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(SID_NAME=stbydb)
     (GLOBAL_DBNAME=stbydb_DGMGRL)
     (ORACLE_HOME=/opt/oracle/product/19c/dbhome_1)
     (ENVS="TNS_ADMIN=/opt/oracle/product/19c/dbhome_1/network/admin")))

Conectarse a la Interfaz de Línea de Comandos

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 15 19:17:09 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.
DGMGRL>

Alternativamente se puede usar el usuario SYS si no se ha configurado un usuario para el DataGuard en el archivo orapwd.

Crear una Configuración en el DataGuard Broker

Una vez contectados necesitamos crear una nueva configuración de DataGuard especificando el DB_UNIQUE_NAME y el nombre del servicio para la base de datos Primaria.
Y luego agregar la base de datos Standby especificando su DB_UNIQUE_NAME y el nombre del servicio:

DGMGRL> CREATE CONFIGURATION dgpato AS PRIMARY DATABASE IS prmydb CONNECT IDENTIFIER IS prmydb;
Configuration "dgpato" created with primary database "prmydb"

DGMGRL> ADD DATABASE stbydb AS CONNECT IDENTIFIER IS stbydb;
Database "stbydb" added

DGMGRL> show configuration

Configuration - dgpato

  Protection Mode: MaxPerformance
  Members:
  prmydb - Primary database
    stbydb - Physical standby database

Fast-Start Failover:  Disabled

Configuration Status:
DISABLED

Habilitar la Configuración en el DataGuard Broker

Necesitamos habilitar esta configuración para poder controlar y monitorear este ambiente de DataGuard:

DGMGRL> ENABLE CONFIGURATION;
Enabled.
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 56 seconds ago)

Y ya es todo, tenemos el DataGuard Broker activado y la configuración habilitada para controlar y monitorar nuestro ambiente de DataGuard.

Monitorear el DataGuard

Mostrar el Estatus de la Base de Datos

Puedes enviar el comando SHOW DATABASE para ver la información relevante aerca de las bases de datos y el estatus de los procesos de Transport (Primaria) y de Apply (Standby):

DGMGRL> show database prmydb

Database - prmydb

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

Database Status:
SUCCESS

DGMGRL> show database stbydb

Database - stbydb

  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON
  Transport Lag:      0 seconds (computed 1 second ago)
  Apply Lag:          0 seconds (computed 1 second ago)
  Average Apply Rate: 0 Byte/s
  Real Time Query:    OFF
  Instance(s):
    stbydb

Database Status:
SUCCESS

Validar que la Base de Datos esté Preparada

Puedes enviar el comando VALIDATE DATABASE para validar si la base de datos está lista para un posible Switchover y Failover:

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".

Validar la Contectividad

Puedes enviar el comando VALIDATE NETWORK para revisar que la conectividad entre ambas base de datos (contraseña, servicio, red) esté funcionando adecuadamente:

DGMGRL> VALIDATE NETWORK CONFIGURATION for all
Connecting to instance "prmydb" on database "prmydb" ...
Connected to "prmydb"
Checking connectivity from instance "prmydb" on database "prmydb to instance "stbydb" on database "stbydb"...
Succeeded.
Connecting to instance "stbydb" on database "stbydb" ...
Connected to "stbydb"
Checking connectivity from instance "stbydb" on database "stbydb to instance "prmydb" on database "prmydb"...
Succeeded.

Oracle Clusterware is not configured on database "prmydb".
Connecting to database "prmydb" using static connect identifier "(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)))" ...
Succeeded.
The static connect identifier allows for a connection to database "prmydb".

Oracle Clusterware is not configured on database "stbydb".
Connecting to database "stbydb" using static connect identifier "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.20.0.20)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=stbydb_DGMGRL)(INSTANCE_NAME=stbydb)(SERVER=DEDICATED)(STATIC_SERVICE=TRUE)))" ...
Succeeded.
The static connect identifier allows for a connection to database "stbydb".

Controlar el DataGuard

Detener/Iniciar la Aplicación de los Archivelogs

Usando el DataGuard Broker podemos deshabilitar al replicación en la Standby deteniendo la aplicación de los archivelogs:

DGMGRL> edit database stbydb set state='APPLY-OFF';
Succeeded.

DGMGRL> edit database stbydb set state='APPLY-ON';
Succeeded.

Estos comandos son equivalentes a iniciar/detener la recuperación manualmente con los comandos:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION or
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL.

Detener/Iniciar la Transferencia de los Archivelogs

También podemos evitar que los archivelogs sean enviados de la Primaria a la Standby al detener la transportación de los archivelogs:

DGMGRL> edit database prmydb set state='TRANSPORT-OFF';
Succeeded.

DGMGRL> edit database prmydb set state='TRANSPORT-ON';
Succeeded.

Estos comandos son equivalentes a habilitar/diferir manualmente el destino de los archivelogs con los comandos:
alter system set log_archive_dest_state_2=DEFER or
alter system set log_archive_dest_state_2=ENABLE.

Conclusión

Hemos configurado exitosamente el DataGuard Broker para controlar y monitorear nuestro ambiente de DataGuard en Oracle 19c, y hemos usado la interfaz de línea de comandos DGMGRL para configurar, monitorear y controlar ambas bases de datos Primaria y Standby.