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.