Oracle Live

11/04/2016

Dataguard Broker

Filed under: Dataguard — mogukiller @ 10:46 pm

Os pongo un pequeño manual de configuración y administración de Dataguard Broker.

------------------------------------------
-- Parametros de configuracion
------------------------------------------

/* Hay que comprobar que este asi en los dos niveles. En un entorno de RAC estos ficheros han de ser compartidos */

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
dg_broker_config_file1               string      /export/oracle/app/oracle/product/11.2.0.3/dbs/dr1PRUEBA_N1.dat
dg_broker_config_file2               string      /export/oracle/app/oracle/product/11.2.0.3/dbs/dr2PRUEBA_N1.dat
dg_broker_start                      boolean     TRUE

/*
El proceso que levanta es:
	oracle    2836     1  0 00:24 ?        00:00:02 ora_dmon_PRUEBA
*/
ALTER SYSTEM SET DG_BROKER_START=TRUE;

----------------------------------
-- Para desinstalar DG Broker
----------------------------------

DGMGRL> REMOVE CONFIGURATION [PRESERVE DESTINATIONS]	--> PRESERVE DESTINATIONS: Para que no toque los parametros del spfile

-- En la primaria y en la standby

SQL> ALTER SYSTEM SET DG_BROKER_START=FALSE;
> rm -f dr1PRUEBA_N1.dat dr2PRUEBA_N1.dat

----------------------------------
-- Configuracion del listener
----------------------------------
NOTA: Es recomendable utilizar dos listener diferentes para la instancia y para el dataguard broker. La forma de configurarlo es:

SID_LIST_LISTENER_DGMGRL = 
  (SID_LIST = 
    (SID_DESC = 
     ( GLOBAL_DBNAME = PRUEBA_N2_DGMGRL)
        (ORACLE_HOME = /export/oracle/app/oracle/product/11.2.0.3) 
      (SID_NAME = PRUEBA) 
    ) 
  ) 

LISTENER_DGMGRL = 
  (DESCRIPTION_LIST = 
    (DESCRIPTION = 
      (ADDRESS = (PROTOCOL = TCP)(HOST = mogubedb11n1)(PORT = 1526)) 
    ) 
  ) 

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = mogubedb11n1)(PORT = 1521))
    )
  )
  
Por lo que se tiene un listener en el 1521 y otro en el 1526. Para indicarle al dataguard broker que hay que modificar hacemos:

EDIT DATABASE prueba_n2 SET PROPERTY staticConnectidentifier= '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=mogubedb11n2)(PORT=1526))(CONNECT_DATA=(SERVICE_NAME=PRUEBA_N2_DGMGRL)(INSTANCE_NAME=PRUEBA)(SERVER=DEDICATED)))';
EDIT DATABASE prueba_n1 SET PROPERTY staticConnectidentifier= '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=mogubedb11n1)(PORT=1526))(CONNECT_DATA=(SERVICE_NAME=PRUEBA_N1_DGMGRL)(INSTANCE_NAME=PRUEBA)(SERVER=DEDICATED)))';

--tnsnames.ora
PRUEBA_N2=
        (DESCRIPTION=
                (ADDRESS=(PROTOCOL=tcp)(HOST=mogubedb11n2)(PORT=1521))
        (CONNECT_DATA=
                (SERVICE_NAME=PRUEBA_N2))
        )
PRUEBA_N1=
        (DESCRIPTION=
                (ADDRESS=(PROTOCOL=tcp)(HOST=mogubedb11n1)(PORT=1521))
        (CONNECT_DATA=
                (SERVICE_NAME=PRUEBA_N1))
        )

LISTENER =
  (DESCRIPTION =
    (ADDRESS=(PROTOCOL=TCP)(HOST=mogubedb11n2)(PORT=1521))
  )

-- Parametro local_listener

ALTER SYSTEM SET LOCAL_LISTENER='LISTENER' SCOPE=SPFILE;  

-- Servicios registrados
/*
mogubedb11n2(oracle)- admin > lsnrctl services

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 05-JUN-2013 18:39:34

Copyright (c) 1991, 2011, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=mogubedb11n2)(PORT=1521)))
Services Summary...
Service "PRUEBA_N2" has 1 instance(s).
  Instance "PRUEBA", status READY, has 1 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:5 refused:0 state:ready
         LOCAL SERVER
Service "PRUEBA_N2_DGB" has 1 instance(s).
  Instance "PRUEBA", status READY, has 1 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:5 refused:0 state:ready
         LOCAL SERVER
The command completed successfully

mogubedb11n2(oracle)- admin > lsnrctl services LISTENER_DGMGRL

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 05-JUN-2013 18:39:57

Copyright (c) 1991, 2011, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=mogubedb11n2)(PORT=1526)))
Services Summary...
Service "PRUEBA_N2_DGMGRL" has 1 instance(s).
  Instance "PRUEBA", status UNKNOWN, has 1 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:3 refused:0
         LOCAL SERVER
The command completed successfully
 */
3.- Añadimos configuracion

-- Se lanza desde la primaria

> dgmgrl sys/oracle
DGMGRL> CREATE CONFIGURATION 'DG_CONFIGURATION' AS PRIMARY DATABASE IS PRUEBA_N1 CONNECT IDENTIFIER IS PRUEBA_N1;
DGMGRL> ADD DATABASE PRUEBA_N2 AS CONNECT IDENTIFIER IS PRUEBA_N2;


DGMGRL> show configuration
/*
Configuration - DG_PRUEBA

  Protection Mode: MaxPerformance
  Databases:
    PRUEBA_N1 - Primary database
    PRUEBA_N2 - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
DISABLED
*/

DGMGRL> show database verbose 'prueba_n1';
/*
Database - prueba_n1

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

  Properties:
    DGConnectIdentifier             = 'prueba_n1'
    ObserverConnectIdentifier       = ''
    LogXptMode                      = 'SYNC'
    DelayMins                       = '0'
    Binding                         = 'optional'
    MaxFailure                      = '0'
    MaxConnections                  = '1'
    ReopenSecs                      = '300'
    NetTimeout                      = '30'
    RedoCompression                 = 'DISABLE'
    LogShipping                     = 'ON'
    PreferredApplyInstance          = ''
    ApplyInstanceTimeout            = '0'
    ApplyParallel                   = 'AUTO'
    StandbyFileManagement           = 'AUTO'
    ArchiveLagTarget                = '300'
    LogArchiveMaxProcesses          = '4'
    LogArchiveMinSucceedDest        = '1'
    DbFileNameConvert               = ''
    LogFileNameConvert              = '/export/oracle/app/oracle/oradata/PRUEBA, /export/oracle/app/oracle/oradata/PRUEBA'
    FastStartFailoverTarget         = ''
    InconsistentProperties          = '(monitor)'
    InconsistentLogXptProps         = '(monitor)'
    SendQEntries                    = '(monitor)'
    LogXptStatus                    = '(monitor)'
    RecvQEntries                    = '(monitor)'
    SidName                         = 'PRUEBA'
    StaticConnectIdentifier         = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=mogubedb11n1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=PRUEBA_N1_DGMGRL)(INSTANCE_NAME=PRUEBA)(SERVER=DEDICATED)))'
    StandbyArchiveLocation          = 'USE_DB_RECOVERY_FILE_DEST'
    AlternateLocation               = ''
    LogArchiveTrace                 = '0'
    LogArchiveFormat                = 'PRUEBA_D%d_T%tS%sR%r.ARC'
    TopWaitEvents                   = '(monitor)'

Database Status:
SUCCESS
*/
4.- Habilitamos | Deshabilitamos la configuracion que hemos creado

DGMGRL> ENABLE CONFIGURATION 
Enabled.

DGMGRL> DISABLE CONFIGURATION
Disabled.

4.1 - Añadir una nueva base de datos

/*
DGMGRL> show configuration

Configuration - DG_CONFIGURACION

  Protection Mode: MaxPerformance
  Databases:
    prueba_n1 - Primary database
    prueba_n2 - Physical standby database
    prueba_n3 - Physical standby database (disabled)
*/
DGMGRL> ENABLE DATABASE prueba_n3
-- NOTA: Se ve como se configuran los parametros de sistema.

5.- Cambiamos parametros Dataguard

N1:
	/*NOTA: Este parametro deshabilita el envio de archiver a todas las bases de datos. Oracle no recomienda esto. Se puede utilizar el parametro LogShipping en las standbys*/
	DGMGRL> EDIT DATABASE 'prueba_n1' SET STATE='TRANSPORT-OFF'; 		 -- Deja de enviar
	DGMGRL> EDIT DATABASE 'prueba_n1' SET STATE='TRANSPORT-ON';  		 -- Comienza a enviar
	
	
	DGMGRL> EDIT DATABASE 'prueba_n1' SET PROPERTY 'LogXptMode'='ASYNC'; --Cambia el modo de envio ASYNC y NOAFFIRM
	DGMGRL> EDIT DATABASE 'prueba_n1' SET PROPERTY 'LogXptMode'='SYNC';  --Cambia el modo de envio  SYNC y AFFIRM
N2
	DGMGRL> EDIT DATABASE 'prueba_n2' SET STATE='APPLY-OFF'; -- Deja de aplicar redo
	DGMGRL> EDIT DATABASE 'prueba_n2' SET STATE='APPLY-ON';  -- Comienza a aplicar redo
	
	DGMGRL> EDIT DATABASE 'prueba_n2' SET PROPERTY 'LogXptMode'='ASYNC'; --Cambia el modo de envio ASYNC y NOAFFIRM
	DGMGRL> EDIT DATABASE 'prueba_n2' SET PROPERTY 'LogXptMode'='SYNC'; --Cambia el modo de envio  SYNC y AFFIRM
	
	DGMGRL> EDIT DATABASE 'prueba_n2' SET PROPERTY 'LogShipping'='OFF'; -- Habilita | Deshabilita el envio de redo a una standby.
	DGMGRL> EDIT DATABASE 'prueba_n2' SET PROPERTY 'LogShipping'='ON';

-- Para cambiar el modo de proteccion haremos:
	DGMGRL> EDIT DATABASE 'prueba_n1' SET PROPERTY 'LogXptMode'='SYNC';
	DGMGRL> EDIT DATABASE 'prueba_n2' SET PROPERTY 'LogXptMode'='SYNC';
	DGMGRL> EDIT CONFIGURATION SET PROTECTION MODE AS MAXAVAILABILITY;
	
	DGMGRL> EDIT CONFIGURATION SET PROTECTION MODE AS MAXPERFORMANCE;
	DGMGRL> EDIT DATABASE 'prueba_n1' SET PROPERTY 'LogXptMode'='ASYNC';
	DGMGRL> EDIT DATABASE 'prueba_n2' SET PROPERTY 'LogXptMode'='ASYNC';
	

6.- Monitorizar

/*
Cuando hacemos show database verbose prueba_n1 no salen algunos parametros con (monitor) esos los podemos consultar:

    InconsistentProperties          = '(monitor)'
    InconsistentLogXptProps         = '(monitor)'
    SendQEntries                    = '(monitor)'
    LogXptStatus                    = '(monitor)'
    RecvQEntries                    = '(monitor)'
*/

DGMGRL> SHOW DATABASE 'prueba_n1' 'InconsistentLogXptProps';
DGMGRL> SHOW DATABASE 'prueba_n1' 'TopWaitEvents';	

7.- Hacer una SNAPSHOT de la Standby.

-- Es necesario que la base de datos tenga el FLASHBACK activado

DGMGRL> CONVERT DATABASE 'prueba_n2' TO SNAPSHOT STANDBY;

/*Converting database "prueba_n2" to a Snapshot Standby database, please wait...
Database "prueba_n2" converted successfully
*/

-- Hacemos que vuelva a aplicar

DGMGRL> CONVERT DATABASE 'prueba_n2' TO PHYSICAL STANDBY;

8.- Hacemos un switchover

DGMGRL> SWITCHOVER TO <standby>
/*
Performing switchover NOW, please wait...
New primary database "prueba_n1" is opening...
Operation requires shutdown of instance "PRUEBA" on database "prueba_n2"
Shutting down instance "PRUEBA"...
ORACLE instance shut down.
Operation requires startup of instance "PRUEBA" on database "prueba_n2"
Starting instance "PRUEBA"...
ORACLE instance started.
Database mounted.
Switchover succeeded, new primary is "prueba_n1"
*/

9.- Failover 

DGMGRL> FAILOVER TO PRUEBA_N2
Performing failover NOW, please wait...
Failover succeeded, new primary is "prueba_n2"

10. - Reinstate database.

/* Si conseguismos solucionar el problema por el que perdimos la base de datos podemos hacer*/

DGMGRL> REINSTATE DATABASE PRUEBA_N1
Reinstating database "prueba_n1", please wait...
Error: ORA-16653: fallo al volver a instanciar la base de datos

Failed.
Reinstatement of database "prueba_n1" failed
DGMGRL> reinstate database prueba_n1
/*Reinstating database "prueba_n1", please wait...
Operation requires shutdown of instance "PRUEBA" on database "prueba_n1"
Shutting down instance "PRUEBA"...
ORA-01109: base de datos sin abrir

Database dismounted.
ORACLE instance shut down.
Operation requires startup of instance "PRUEBA" on database "prueba_n1"
Starting instance "PRUEBA"...
ORACLE instance started.
Database mounted.
Continuing to reinstate database "prueba_n1" ...
Reinstatement of database "prueba_n1" succeeded*/

-- NOTA: Internamete lo que hace es un FLASHBACK TO SCN

Dejar un comentario »

Aún no hay comentarios.

RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Crea un blog o un sitio web gratuitos con WordPress.com.

A %d blogueros les gusta esto: