Si uno busca en la web acerca de como crear un entorno de alta disponibilidad usando Oracle Data Guard (también llamado Oracle Standby) va a encontrar cientos de sitios que muestran el paso a paso. Algunos sitios son muy claros y precisos y otros no tanto. Yo siempre recomiendo empezar para la documentación oficial. En esta oportunidad no solo voy a mostrar el paso a paso sino que además pretendo mostrar como activar Switchover, Failover, repasar los modos de protección disponibles, como monitorear y también algo de troubleshooting básico.
Ahora voy a compartir el Paso a Paso para armar un entorno de replicación desde desde cero. La base primaria se llama ROP y la base standby se llamará ROPDG
Ahora voy a compartir el Paso a Paso para armar un entorno de replicación desde desde cero. La base primaria se llama ROP y la base standby se llamará ROPDG
Configuración Inicial de Oracle Data Guard Físico (PODG)
Configuración de la base Primaria
1. Preparar la base primaria (ROP)
1.1 Habilitar la base para que funcione con archivelog
Para revisar si la base esta en modo archivelogSQL> SELECT log_mode FROM v$database;Si el resultado es NOARCHIVELOG, bajar la base y seguir los siguientes pasos:SQL> STARTUP MOUNTSQL> ALTER DATABASE ARCHIVELOGSQL> ALTER DATABASE OPEN;Para chequear como quedó configurado:SQL> ARCHIVE LOG LIST;1.2 Crear password file (si es que no existe)$ orapwd file=filename password=password entries=max_users1.3 Forzar el logueo de las operacionesSQL> ALTER DATABASE FORCE LOGGING;1.4 Setear los parámetrosPara Setear el modo de protección Maximum AvailabilitySQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(ROP,ROPDG)';SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2 = 'SERVICE=ROPDG SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ROPDG' SCOPE=BOTH;SQL> ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE AVAILABILITY;SQL> ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES = 30 SCOPE=BOTH;SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;1.5 Crear los standby redo (que se usaran en Switchover)2. Configurar el servicio en ambos servidoresCrear las entradas en los tns de ambos equipos, una entrada para primaria y otra para standbyROP = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = host-primario)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = ROP) ) ) ROPDG = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = host-standby)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = ROPDG) ) )3. Bajar la base y tomar un backup en frio (datafiles y logfiles)4. Montar la base y crear el standby controlfileSQL> STARTUP MOUNT
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/ctlROP2.ctl';5. Preparar el init para la base standby5.1
En la base primaria crear un pfile desde el spfile (si la base no tiene spfile simplemente copiar el pfile en /tmp)SQL> CREATE PFILE='/tmp/initROP.ora' FROM SPFILE;5.2
Editar el archivo de inicio recién creado (/tmp/initROP.ora) y cambiar los parámetros necesarios para que sirva con init de la base standby. La mayoría de los parámetros son iguales. Los que pueden cambiar son los siguientes:DB_NAME=ROP
DB_UNIQUE_NAME=ROPDGConfiguración de la base Standby (Manual)6. Transferir los archivos del backup, el initROPDG.ora y el pfile al servidor standby7. Levantar el listener8. Crear los standby redo
Los redo standby son requerimiento para poder usar real time apply:SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oradata/rop/stdby_redo01.log') SIZE 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oradata/rop/stdby_redo02.log') SIZE 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oradata/rop/stdby_redo03.log') SIZE 50M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oradata/rop/stdby_redo04.log') SIZE 50M;9. Activar la aplicación de Redo en StandbyPara activar la aplicación en Real-TimeCon la base montada ejecutar:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;Para activar la aplicación sin Real-TimeCon la base montada ejecutar:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;Para Cancelar la aplicación de RedoSQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;FailoverSi la base de datos primaria no esta disponible y la falla no tiene pronta solución (una falla critica en el hardware del equipo donde se aloja la base) será necesario activar la standby como base primaria. Luego de convertirla a primaria se recomiendo tomar un backup fullSQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
SQL> ALTER DATABASE ACTIVATE STANDBY DATABASE;La base primaria original luego podrá pasar a ser la standby. Si se usa flashback database es podrá restaurar al momento anterior a la falla y convertirla en standby rapidamente, si no se usa flashback database habrá que realizar el setup de cero.Switchover (Switchback)Para Convertir la base Primaria en StandbySQL> CONNECT / AS SYSDBA
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO STANDBY;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP NOMOUNT;
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;Para Convertir la base Standby en PrimariaSQL> CONNECT / AS SYSDBA
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;El switchover puede ser útil por ejemplo para aplicar parches sin tener que cortar el servicio (garantizando la continuidad de negocio). Es recomendable realizar pruebas de switchover, también probando que el transporte y aplicación de redos funciona correctamente y luego volver a realizar un switchover para dejar la base primaria en el servidor original, este proceso se llama Switchover.Active DataGuardLas bases standby pueden levantarse en modo read only, lo cual puede ser usado para ejecutar reportes y de esa forma descargar la base productiva o también podría usarse para tomar backup lógicos. Mientras la base esta en read only no se puede aplicar cambios, aunque los cambios se siguen transportando no se aplican y por lo tanto la base standby va quedando cada vez mas desincronizada con la base primaria. En 11g se puede configurar la base standby como activa con lo cual la base si bien sigue estando en read only aplica lo cambios que van llegando desde la primaria.Este feature es muy interesante aunque tiene un costo extra y se tiene que licenciar por separado. Hay que tener cuidado en activarlo porque técnicamente es muy sencillo de hacer y queda registrado (chequear en DBA_FEATURE_USAGE_STATISTICS) el uso del feature con lo cual una auditoria podría constatarlo fácilmente.Ahora voy a mostrar como activar la replica en modo activa:SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE OPEN READ ONLY;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;Notar que si se activa el recover con la base en modo read only en lugar de solo montada se activa el Active DataGuard.Monitorear Oracle Data Guard Físico (PODG)Para chequear datos referentes a tipo y nivel de protección, rol de la base de datos y status del swithoverSQL> SELECT DATABASE_ROLE,DB_UNIQUE_NAME,OPEN_MODE,PROTECTION_MODE,
PROTECTION_LEVEL,SWITCHOVER_STATUS
FROM V$DATABASEPara ver los archivelog que fueron aplicados:SQL> SELECT MAX(SEQUENCE#) LAST_APPLIED_LOG FROM V$LOG_HISTORYPara chequear el redo apply y el redo transport en el sitio standby:SQL> SELECT PROCESS,STATUS,SEQUENCE#,BLOCK#,BLOCKS
FROM V$MANAGED_STANDBYPara revisar eventos que disparan mensajes en el alert tanto en primaria como en standby:SQL> SELECT MESSAGE FROM V$DATAGUARD_STATUS;
buenas tardes estoy trabajando para implementar tu solucion data guard.. la verdad no soy muy bueno en esto..
ResponderEliminartengo problemas en esto
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2 = 'SERVICE=DBSERVERDG SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DBSERVERDG' SCOPE=BOTH;
me da error
ora-32017:fallo al actualizar spfile
ora-00439:funcion no activada managed standby
Creo es por tu version de Oracle Database
ResponderEliminar