lunes, 12 de mayo de 2014

Guía de Instalación para Oracle - Data Guard 11.2.0.4


RECUPERACIÓN  ANTE DESASTRES

Guía de instalación para Oracle Data Guard
Base de datos 11g
Version 11.2.0.4

08-MAYO-2014


Elaborado por:
José Fabre
                                                                     Oracle Certified Associate
                     Jose.fc182@gmail.com
                                                              @josefabrec


Índice General

1.       Introducción
2.      Arquitectura de data guard 11g
3.     Datos Generales
4.      Consejos (antes de empezar)
5.      Configurar servidor principal (Producción)
6.     Obtener los archivos de parámetros.
7.      Sincronizados los servidores con RMAN
8.      Sincronizados los servidores con Duplicate
9.      Configurar servidor secundario (Standby)
10.   Enviar archivelog's (Switch log file)
11.   Convertir servidor secundario a principal (Switchover)
12.   Hacer permanente servidor secundario principal (Failover)   
13.   Conclusiones


1.  Introducción

En la mayoría de empresas se han ido implantando durante los últimos años planes de recuperación ante desastres o DR (Disaster Recovery). Estos planes comprenden un conjunto de recursos hardware, software y procedimientos que deben permitir a una empresa continuar ofreciendo sus servicios (o los considerados mínimos) en caso de que ocurran problemas graves en los sistemas informáticos.

En el caso de Oracle y para intentar minimizar este tipo de problemas, existen configuraciones de DR data guard que nos permiten mantener en ubicaciones físicamente separadas sistemas de contingencia denominados standby que podrán seguir dando servicio en caso de caída de los sistemas principales.

El concepto de Alta disponibilidad o HA (High Availability) es indispensable en una empresa por lo que DR. puede  disponer de discos, o tarjetas de red duplicados en un servidor es una solución de alta disponibilidad (HA), disponer de un segundo servidor en otra ciudad replicado con el primero es protección ante desastres (DR).

Finalmente existen las soluciones que nos aporta Oracle: las BDD Standby y el producto DataGuard (que ya viene integrado en las BDD EE) ".Solo aplicable para Enterprise Edition"

Una BDD Standby física (existen Standby “lógicas” de las que hablaremos en otra ocasión) es una copia “bit a bit” de nuestra BDD productiva, separada de ésta varias decenas, centenares o miles de kilómetros. Los cambios se trasmiten de la principal a la Standby y se aplican posteriormente en ésta.

Las trasmisiones de datos se realizan de manera comprimida y optimizada ocupando un mínimo de ancho de banda, y los datos pueden aplicarse en la standby "al momento" o con un cierto retardo, de manera que en caso de errores lógicos (modificación o borrado por error de gran cantidad de datos en la principal) se pueda ir a consultar los datos "del pasado" en la standby.

2. Arquitectura



3. Datos Generales

Sistema Operativo

Oracle Linux Server release 6.4  

Instaladores del software Oracle 12c 

*Para descargar los instaladores se debe crear una cuenta en Oracle http://www.oracle.com/ y descargar los  paquetes de 12.1.0.1 para Linux

http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html

Una vez los paquetes descargados copiar en la partición o en la partición donde se tenga espacio para instalar la base.

/u01/database/

4. Consejos

4.1. Se debe constatar que tanto la base como el sistema operativo sean iguales en los dos servidores mismo Hadware y Software.

4.2. Los dos servidores deben tener instalados los paquetes necesarios para el correcto funcionamiento del oracle consulta el siguiente link http://docs.oracle.com/cd/B28359_01/install.111/b32002/pre_install.htm#LADBI214

4.2. El primer servidor de producción contiene la base con listener el segundo solo el software de oracle y listener con los mismos parámetros que se configuro el principal

4.3. Deben tener las mismas características físicas los dos servidores

4.4. Crear archivo de variables de ambiente en el servidor de standby ".bash_profile"


Sentencias útiles para ver la versión del sistema operativo

Nombre tipo y versión de S.O.

[oracle@rfcg ~]$ lsb_release -a

Consulta para la versión del software de  Oracle

SQL> select value from v$system_parameter where name = 'compatible'

Consulta Para ver los parámetros de configuración de la base de datos

SQL> SELECT * FROM NLS_DATABASE_PARAMETERS



5. Configurar servidor principal (Producción)

5.1. Poner la base principal en modo archivelog

Nota: Para verificar el modo actual de tu servidor principal

SQL> SELECT log_mode FROM v$database;

LOG_MODE
------------
NOARCHIVELOG

Poner en modo archivelog

*Realizar esta operación en horario no laboral

SQL> SHUTDOWN IMMEDIATE;

SQL> STARTUP MOUNT;

SQL> ALTER DATABASE ARCHIVELOG;

SQL> ALTER DATABASE OPEN;


5.2.Habilitar el registro forzado

SQL> ALTER DATABASE FORCE LOGGING;

5.3.Verificar la configuración de db_name y db_unique_name en ambos casos debe ser el nombre de la instancia de producción

SQL> show parameter db_name

NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
db_name     string DB11G

SQL> show parameter db_unique_name

NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
db_unique_name     string DB11G



5.4.Configurar el archivelog para stanby

SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(DB11G,DB11G_STBY)';

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=db11g_stby NOAFFIRM ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB11G_STBY';

SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;


5.5.Configurar el passwordfile

SQL> ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' SCOPE=SPFILE;

SQL> ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=30;

SQL> ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;

5.6.Configurar el envio de spfile a standby

SQL> ALTER SYSTEM SET FAL_SERVER=DB11G_STBY;

SQL> ALTER SYSTEM SET DB_FILE_NAME_CONVERT='DB11G_STBY','DB11G' SCOPE=SPFILE;

SQL> ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='DB11G_STBY','DB11G' SCOPE=SPFILE;

SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;


5.7.Configurar el tnsname.ora 

Se debe agregar manual o con el utilitario netmgr el servicio de standby que se creo en el servidor secundario. 

[oracle@host ~]$ vim $ORACLE_HOME/network/admin/tnsnames.ora

/***************************************************
DGARD =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = rfcg.oracle.com)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = dgard.oracle.com)
    )
  )


DGARD_STBY =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = rfcg2.oracle.com)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = dgard_stby.oracle.com)
    )
  )

***************************************************/

Nota: Para probar si se tiene conexión entre los dos servidores se recomienda ejecutar el comando tnsping <nombre del servicio>

[oracle@host ~]$ tnsping DGARD_STBY

6. Obtener los archivos de parámetros

6.1. Crear el controlfile y parameterfile para standby

Ejecutar en el principal

SQL>ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/db11g_stby.ctl';

SQL>CREATE PFILE='/tmp/initDB11G_stby.ora' FROM SPFILE;

6.2. Cambiar en el archivo de controlfile creado para standby anteriromente

*Cambiar las lineas con -> lo que se tiene en la derecha es lo original por lo de la izquierda.

Original -> Nuevo Valor

[oracle@host ~]$ vim /tmp/initDB11G_stby.ora

/************************************************************************

dgard.__db_cache_size=503316480 -> dgard_stby.__db_cache_size=503316480
dgard.__java_pool_size=16777216 -> dgard_stby.__java_pool_size=16777216
dgard.__large_pool_size=16777216 -> dgard_stby.__large_pool_size=16777216
dgard.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
->  dgard_stby.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
dgard.__pga_aggregate_target=754974720 -> dgard_stby.__pga_aggregate_target=754974720
dgard.__sga_target=855638016 -> dgard_stby.__sga_target=855638016
dgard.__shared_io_pool_size=0 -> dgard_stby.__shared_io_pool_size=0
dgard.__shared_pool_size=268435456 -> dgard_stby.__shared_pool_size=268435456
dgard.__streams_pool_size=33554432 -> dgard_stby.__streams_pool_size=33554432
*.audit_file_dest='/u01/app/oracle/admin/dgard/adump'
-> *.audit_file_dest='/u01/app/oracle/admin/dgard_stby/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/u01/app/oracle/oradata/dgard/control01.ctl','/u01/app/oracle/fast_recovery_area/dgard/control02.ctl'
 ->
*.control_files='/u01/app/oracle/oradata/dgard_stby/control01.ctl','/u01/app/oracle/fast_recovery_area/dgard_stby/control02.ctl'
*.db_block_size=8192
*.db_domain='oracle.com'
*.db_file_name_convert='dgard_stby','dgard' ->  *.db_file_name_convert='dgard','dgard_stby'
*.db_name='dgard'
Aumentar esta Linea------------> *.db_unique_name='dgard_stby'
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=4322230272
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=dgardXDB)'
*.fal_server='DGARD_STBY' -> *.fal_server='DGARD'
*.log_archive_config='DG_CONFIG=(dgard_stby,dgard)' ->*.log_archive_config='DG_CONFIG=(dgard,dgard_stby)'
*.log_archive_dest_2='SERVICE=dgard NOAFFIRM ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dgard_stby'
-> *.log_archive_dest_2='SERVICE=dgard NOAFFIRM ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dgard'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t_%s_%r.arc'
*.log_archive_max_processes=30
*.log_file_name_convert='dgard_stby','dgard' -> *.log_file_name_convert='dgard','dgard_stby'
*.memory_target=1603272704
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'


************************************************************************/


7. Sincronizados los servidores con RMAN


7.1. Sacar backup de la base primaria

Ejecutar en el principal

[oracle@host ~]$ rman target=/

RMAN> BACKUP DATABASE PLUS ARCHIVELOG;


7.2. Crear los directorios como se tiene en el servidor de producción

Ejecutar en el secundario

[oracle@host ~]$ mkdir -p /u01/app/oracle/oradata/dbg11_stby

[oracle@host ~]$ mkdir -p /u01/app/oracle/fast_recovery_area/dbg11_stby

[oracle@host ~]$ mkdir -p /u01/app/oracle/admin/dbg11_stby/adump

7.3. Copiar los archivos de configuración de producción a standby

Ejecutar en el primario

*Controlfile

[oracle@host_stby ~]$ scp oracle@ol5-112-dga1:/tmp/db11g_stby.ctl /u01/app/oracle/oradata/dbg11_stby/control01.ctl

[oracle@host_stby ~]$ cp /u01/app/oracle/oradata/DB11G/control01.ctl /u01/app/oracle/fast_recovery_area/dbg11_stby/control02.ctl

*Archivelogs and backups

[oracle@host_stby ~]$ scp -r oracle@ol5-112-dga1:/u01/app/oracle/fast_recovery_area/DB11G/archivelog /u01/app/oracle/fast_recovery_area/dbg11_stby

[oracle@host_stby ~]$ scp -r oracle@ol5-112-dga1:/u01/app/oracle/fast_recovery_area/DB11G/backupset /u01/app/oracle/fast_recovery_area/dbg11_stby

*Parameter file.

[oracle@host_stby ~]$ scp oracle@ol5-112-dga1:/tmp/initDB11G_stby.ora /tmp/initDB11G_stby.ora

*Login password file.

[oracle@host_stby ~]$ scp oracle@ol5-112-dga1:$ORACLE_HOME/dbs/orapwDB11G $ORACLE_HOME/dbs

*Tnsname

[oracle@host_stby ~]$ scp oracle@ol5-112-dga1:$ORACLE_HOME/network/admin/tnsname.ora $ORACLE_HOME/network/admin/tnsname.ora

7.4. Levantar el listener

[oracle@host_stby ~]$ lsnrctl reload

7.5. Restaurar el backup en el servidor de standby con el spfile

[oracle@host_stby ~]$ export ORACLE_SID=DB11G

[oracle@host_stby ~]$ sqlplus / as sysdba

SQL> CREATE SPFILE FROM PFILE='/tmp/initDB11G_stby.ora';

[oracle@host_stby ~]$ rman target=/

RMAN> STARTUP MOUNT;

RMAN> RESTORE DATABASE;

7.6. Crear los logfile

SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=MANUAL;

SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/dgard_stby/standby_redo01.log') SIZE 50M;

SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/dgard_stby/standby_redo02.log') SIZE 50M;

SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/dgard_stby/standby_redo03.log') SIZE 50M;

SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/dgard_stby/standby_redo04.log') SIZE 50M;


8. Sincronizados los servidores con Duplicate

8.1. Copiar los archivos de configuración de producción a standby

Ejecutar en el principal

*Controlfile

[oracle@host_stby ~]$ scp oracle@ol5-112-dga1:/tmp/db11g_stby.ctl /u01/app/oracle/oradata/dbg11_stby/control01.ctl

[oracle@host_stby ~]$ cp /u01/app/oracle/oradata/DB11G/control01.ctl /u01/app/oracle/fast_recovery_area/dbg11_stby/control02.ctl

*Parameter file.

[oracle@host_stby ~]$ scp oracle@ol5-112-dga1:/tmp/initDB11G_stby.ora /tmp/initDB11G_stby.ora

*Login password file.

[oracle@host_stby ~]$ scp oracle@ol5-112-dga1:$ORACLE_HOME/dbs/orapwDB11G $ORACLE_HOME/dbs

*Tnsname

[oracle@host_stby ~]$ scp oracle@ol5-112-dga1:$ORACLE_HOME/network/admin/tnsname.ora $ORACLE_HOME/network/admin/tnsname.ora

8.2. Crear los los redo de standby en el principal

Ejecutar en el principal

SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/DB11G/standby_redo01.log') SIZE 50M;

SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/DB11G/standby_redo02.log') SIZE 50M;

SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/DB11G/standby_redo03.log') SIZE 50M;


SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/DB11G/standby_redo04.log') SIZE 50M;

Ejecutar en el secundario

8.3. Levantar el listener

[oracle@host_stby ~]$ lsnrctl reload

8.3. Usar duplicate

[oracle@host_stby ~] export ORACLE_SID=DB11G

[oracle@host_stby ~] sqlplus / as sysdba

SQL> STARTUP NOMOUNT PFILE='/tmp/initDB11G_stby.ora';

8.4. Conectarse a RMAN y ejecutar script de duplicate

Ejecutar en el principal

[oracle@host_stby ~]  rman TARGET sys/password@DB11G AUXILIARY sys/password@DB11G_STBY


RMAN > DUPLICATE TARGET DATABASE
  FOR STANDBY
  FROM ACTIVE DATABASE
  DORECOVER
  SPFILE
    SET db_unique_name='DB11G_STBY' COMMENT 'Is standby'
    SET LOG_ARCHIVE_DEST_2='SERVICE=db11g ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB11G'
    SET FAL_SERVER='DB11G' COMMENT 'Is primary'
  NOFILENAMECHECK;

9. Configurar servidor secundario (Standby)

9.1. Permitir el recibimiento de archivelog.

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE;

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

Nota: Estas sentencias sirven para dejar abierto stanby y recibir archivelog de produccion.

Se usa 

                SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

Para cancelar y dejar de recibir archivelog

CONSEJO: Realizar tnsping a producción desde standby y viceversa a ambas instancias para saber que están conectadas


10. Enviar archivelog's (Switch log file)

Ejecutar en el principal

10.1. Saber numero de transacción en la que se encuentra actualmente

SQL> ALTER SESSION SET nls_date_format='DD-MON-YYYY HH24:MI:SS';

SQL> SELECT sequence#, first_time, next_time FROM   v$archived_log ORDER BY sequence#;

10.2. Dejar de escribir en archive y enviar a memoria sincronizando con standby

SQL> ALTER SYSTEM SWITCH LOGFILE;

10.3. Validar la transferencia de archive en standby

Ejecutar en el secundario

SQL> ALTER SESSION SET nls_date_format='DD-MON-YYYY HH24:MI:SS';

SQL> SELECT sequence#, first_time, next_time, applied FROM   v$archived_log ORDER BY sequence#;

Nota: Verificar que el mismo número de secuencia este en ambos y el estado de la transacción sea  applied = YES

11. Convertir servidor secundario a principal (Switchover)

Ejecutar en el principal

CONSEJO: en otra terminal hacer "tail -f"  al alert log para verificar que todo se ejecute normalmente

11.1. Realizar principal servidor secundario

SQL> CONNECT / AS SYSDBA

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO STANDBY;

SQL> SHUTDOWN IMMEDIATE;

11.2. Montar servidor principal como standby

SQL> STARTUP NOMOUNT;

SQL> ALTER DATABASE MOUNT STANDBY DATABASE;


SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

11.3. Finalizar la administracion de standby como servidor secundario

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;

12. Hacer permanente servidor secundario principal (Failover)

Ejecutar en el secundario

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;


SQL> ALTER DATABASE ACTIVATE STANDBY DATABASE;

Nota: Después de ejecutar el failover no se puede regresar atrás


Conclusiones

Después de realizar esta practica usted debe ser capaz de:

- Configurar un servidor de standby ante desastres.
- Conocimientos de hacer una copia de base con duplicate.
- Conocimientos de rman backup.


CONSULTAS ÚTILES

- Consulta identifica si es primario o secundario

SELECT name,open_mode,database_role,db_unique_name,protection_modeFROM v$database;

-identificar el rol actiual del servidor

 SELECT database_role FROM v$database;




No hay comentarios:

Publicar un comentario