Configurando Dataguard Broker

Oracle nos ofrece esta herramienta para poder hacer pasaje automatico en caso de tener un switch o un fail, y su uso una vez configurado  es tan sencillo como conectarse a la consola del administrador con el comando dgmgrl o desde el Entrerprise Manager con solo haciendo un click.

Yo en este caso voy a disponibilizar el modo de configuración desde la linea de comandos ya que me parece super práctico y nos sirve para conocer un poco más el modo en que trabaja.

Es importante saber que tanto desde la consola del GRID CONTROL o desde comandos hay que hacer una configuración previa que incluye:

  • Configuración de Listener en primaria y secundaria.
  • Configuración de Parametros de la base.
  • Creación de los archivos de configuración del broker. (Debemos ser sysdba)
  • En el caso de trabajar con una base que esta en RAC, hay que hacer la configuración con srvctl. (En este caso yo voy a presentarlo en una instancia en RAC y serán informados de ello para que sepan que el modo es el mismo para la single instance, menos este paso.)

CONFIGURANDO LISTENERS

Comenzaremos configurando los listeners, tanto en nuestra base primaria como en nuestra standby.
Es muy importante este paso ya que si el broker no ve el servicio no podrá hacer ninguna operación de switcheo.

# listener.ora.saturno01 Network Configuration File: /u01/app/oracle/product/10.2.0/db_mbpro/network/admin/listener.ora.saturno01
# Generated by Oracle configuration tools.

MBPRO_SATURNO01 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = saturno01-vip.danahomelinux.com)(PORT = 1526)
(IP = FIRST))
(ADDRESS = (PROTOCOL = TCP)(HOST = saturno01.danahomelinux.com)(PORT = 1526)
(IP = FIRST))
)
)

SID_LIST_MBPRO_SATURNO01 =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_mbpro)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = MBPRO_DGMGRL.danahomelinux.com)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_mbpro)
(SID_NAME = MBPRO1)
)
)

Una vez realizada la tarea, procedemos a relodear el listener, y luego con un status service vemos si los cambios fueron impactados.

lsnrctl status MBPRO_SATURNO01
lsnrctl service MBPRO_SATURNO01

Ahora procedemos a realizar la misma tarea en nuestra base secundaria.

CONFIGURANDO LA BASE

Ahora que configuramos los listeners (y los parametros con el comando srvctl en el caso de estar trabajando con una base en RAC) procedemos a crear los archivos fisicos de la configuración del broker y activar el feature en la base misma poniendo el parametro dg_broker_start=start, donde si tenemos una terminal abierta podremos ver en el alert.log que se activa un proceso nuevo que en DMON.
Primero creamos en un path en el SO que sea seguro y luego en la base pasamos esos mismos párametros.

SQL> sho parameter broker

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
dg_broker_config_file1		     string
dg_broker_config_file2		     string
dg_broker_start 		     boolean	 FALSE

SQL> alter system set dg_broker_config_file1='/u06/dgbroker/dr1_MBPRO.dat'
scope=both sid='*';

System altered.

SQL> alter system set dg_broker_config_file2='/u07/dgbroker/dr2_MBPRO.dat'
scope=both sid='*';

System altered.

SQL> sho parameter broker

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
dg_broker_config_file1		     string	 /u06/dgbroker/dr1_MBPRO.dat
dg_broker_config_file2		     string	 /u07/dgbroker/dr2_MBPRO.dat
dg_broker_start 		     boolean	 FALSE

SQL> alter system set dg_broker_start=true scope=both sid='*';
System altered.

Ingresamos a la consola del DGBROKER y luego nos conectamos con el usuario administrador.
Desde aqui vamos a decirle a broker como se llamará la primaria, la secundaria, y que roles tendra cada una. Esto nos servirá en el futuro para switchear, pasar por fail, o mantenimiento mismo.

[oracle@saturno bin]$ dgmgrl
DGMGRL for Linux: Version 10.2.0.4.0 - 64bit Production

Copyright (c) 2000, 2005, Oracle. All rights reserved.

Welcome to DGMGRL, type "help" for information.
DGMGRL> connect sys/PASSXXXX
Connected.

Creamos la configuración

DGMGRL> CREATE CONFIGURATION 'DR_MBPRO' AS
> PRIMARY DATABASE IS 'MBPRO'
> CONNECT IDENTIFIER IS MBPRO;
Configuration "DR_MBPRO" created with primary database "MBPRO"
DGMGRL>
DGMGRL> ADD DATABASE 'MBPRODG' AS
> CONNECT IDENTIFIER IS MBPRODG
> MAINTAINED AS PHYSICAL;
Database "MBPRODG" added
DGMGRL>

Ahora podemos ver configuracion que armamos y nos va a decir que esta en modo deshabilitado.

DGMGRL> show configuration;

Configuration
Name:                DR_MBPRO
Enabled:             NO
Protection Mode:     MaxPerformance
Fast-Start Failover: DISABLED
Databases:
MBPRO   - Primary database
MBPRODG - Physical standby database

Current status for "DR_MBPRO":
DISABLED

Habilitamos esa configuracion para que pueda ser leida por la instancia primaria y secundaria.

DGMGRL> enable configuration;
Enabled.
DGMGRL> show configuration;

Configuration
Name:                DR_MBPRO
Enabled:             YES
Protection Mode:     MaxPerformance
Fast-Start Failover: DISABLED
Databases:
MBPRO   - Primary database
MBPRODG - Physical standby database

Current status for "DR_MBPRO":
SUCCESS

Vemos la configuracion de la primaria.

DGMGRL> show database verbose "MBPRO";

Database
Name:            MBPRO
Role:            PRIMARY
Enabled:         YES
Intended State:  ONLINE
Instance(s):
MBPRO

Properties:
InitialConnectIdentifier        = 'MBPRO'
ObserverConnectIdentifier       = ''
LogXptMode                      = 'ARCH'
Dependency                      = ''
DelayMins                       = '0'
Binding                         = 'OPTIONAL'
MaxFailure                      = '0'
MaxConnections                  = '1'
ReopenSecs                      = '300'
NetTimeout                      = '180'
LogShipping                     = 'ON'
PreferredApplyInstance          = ''
ApplyInstanceTimeout            = '0'
ApplyParallel                   = 'AUTO'
StandbyFileManagement           = 'MANUAL'
ArchiveLagTarget                = '0'
LogArchiveMaxProcesses          = '2'
LogArchiveMinSucceedDest        = '1'
DbFileNameConvert               = '+PRUEBAS_DG1/MBPRO, +PRUEBAS_DG1/MBPRO'
LogFileNameConvert              = '+PRUEBAS_DG1/MBPRODG, +PRUEBAS_DG1/MBPRO'
FastStartFailoverTarget         = '+PRUEBAS_DG1/MBPRODG, +PRUEBAS_DG1/MBPRO'
StatusReport                    = '(monitor)'
InconsistentProperties          = '(monitor)'
InconsistentLogXptProps         = '(monitor)'
SendQEntries                    = '(monitor)'
LogXptStatus                    = '(monitor)'
RecvQEntries                    = '(monitor)'
HostName                        = 'saturno.danahomelinux.com'
SidName                         = 'MBPRO'
LocalListenerAddress            = '(ADDRESS=(PROTOCOL=TCP)(HOST=saturno.danahomelinux.com)(PORT=1529))'
StandbyArchiveLocation          = '?/dbs/arch'
AlternateLocation               = ''
LogArchiveTrace                 = '0'
LogArchiveFormat                = '%t_%s_%r.dbf'
LatestLog                       = '(monitor)'
TopWaitEvents                   = '(monitor)'

Current status for "MBPRO":
SUCCESS

Ahora la de la secundaria.

DGMGRL> show database verbose "MBPRODG";

Database
Name:            MBPRODG
Role:            PHYSICAL STANDBY
Enabled:         YES
Intended State:  ONLINE
Instance(s):
MBPRODG

Properties:
InitialConnectIdentifier        = 'MBPROdg'
ObserverConnectIdentifier       = ''
LogXptMode                      = 'ARCH'
Dependency                      = ''
DelayMins                       = '0'
Binding                         = 'OPTIONAL'
MaxFailure                      = '0'
MaxConnections                  = '1'
ReopenSecs                      = '300'
NetTimeout                      = '180'
LogShipping                     = 'ON'
PreferredApplyInstance          = ''
ApplyInstanceTimeout            = '0'
ApplyParallel                   = 'AUTO'
StandbyFileManagement           = 'AUTO'
ArchiveLagTarget                = '0'
LogArchiveMaxProcesses          = '2'
LogArchiveMinSucceedDest        = '1'
DbFileNameConvert               = '+PRUEBAS_DG1/MBPRO, +PRUEBAS_DG1/MBPRODG'
LogFileNameConvert              = '+PRUEBAS_DG1/MBPRO, +PRUEBAS_DG1/MBPRODG'
FastStartFailoverTarget         = ''
StatusReport                    = '(monitor)'
InconsistentProperties          = '(monitor)'
InconsistentLogXptProps         = '(monitor)'
SendQEntries                    = '(monitor)'
LogXptStatus                    = '(monitor)'
RecvQEntries                    = '(monitor)'
HostName                        = 'saturnoco.danahomelinux.com'
SidName                         = 'MBPRODG'
LocalListenerAddress            = '(ADDRESS=(PROTOCOL=TCP)(HOST=saturnoco.danahomelinux.com)(PORT=1529))'
StandbyArchiveLocation          = 'dgsby_MBPRODG'
AlternateLocation               = ''
LogArchiveTrace                 = '0'
LogArchiveFormat                = '%t_%s_%r.dbf'
LatestLog                       = '(monitor)'
TopWaitEvents                   = '(monitor)'

Current status for "MBPRODG":
SUCCESS

DGMGRL>

Ya estamos listos para hacer nuestro switch over.

Ahora que tenemos configurados los listener, servicios de RAC y parametros de la base, podriamos realizar el primer pasaje de base, un cambio de roles.
Si somos los sufientemente curiosos, para este primer paso, podemos abrir los alert y podemos ir mirando que es lo que trancurre y no encontraremos con que:

  • El broker hace los mismos pasos que nosotro hariámos a mano.
  • El broker pone los párametros que tiene en el listener y los coloca, asi que cualquier modificiación que hicieramos sobre estos siempre se van a impactar en la base.
  • Podemos hacer una consulta en la v$archive_dest antes de arracar, para verificar que hay conectividad y no tenemos problemas de red.
  • En el caso que la base no tuviese la suficiente memoria por algún proceso enorme o si se encontrara con problemas, el broker comienza el proceso, y si es preciso lo aborta dejando la base intacta al momento de arrancar, sobre su rol antes de comenzar el pasaje. Además de ello no arroja los errores con el log de por qué la  base no pudo pasar.
  • En el caso de que en un pasaje perdemos el sitio primario, y previamente hubiesemos arrancado el switch, no podrá retornar, pero como buenos DBA’s al mirar el log sabriamos como seguir el switch a mano, ya que en el alert muestra los comandos ejecutados, y con nuestro procedimiento de switch over manual, podriámos verificar que paso faltó y continuar. La experiencia sobre el caso, me dice que esto es cierto y no una mera suposición.
[oracle@saturno01 dbs]$ dgmgrl
DGMGRL for Linux: Version 10.2.0.4.0 - 64bit Production

Copyright (c) 2000, 2005, Oracle. All rights reserved.

Welcome to DGMGRL, type "help" for information.
DGMGRL> connect sys/xxxxxxx
Connected.
DGMGRL> switchover to "MBPRODG";
Performing switchover NOW, please wait...
Operation requires shutdown of instance "MBPRO" on database "MBPROD"
Shutting down instance "MBPRO"...
ORA-01109: database not open

Database dismounted.
ORACLE instance shut down.
Operation requires shutdown of instance "MBPRODG" on database "MBPRODG"
Shutting down instance "MBPRODG1"...
ORA-01109: database not open

Database dismounted.
ORACLE instance shut down.
Operation requires startup of instance "MBPRO" on database "MBPRO"
Starting instance "MBPRO"...
ORACLE instance started.
Database mounted.
Operation requires startup of instance "MBPRODG" on database "MBPRODG"
Starting instance "MBPRODG1"...
ORACLE instance started.
Database mounted.
Switchover succeeded, new primary is "MBPRODG"
DGMGRL>

About Juan Andres
Consultant | Oracle DBA & IT Specialist | LinuxUnix Administrator | Father | Musician | Farmer | Environmentalist | Writer | Builder | Buenos Aires · burzaco.wordpress.com

%d bloggers like this: