viernes, 30 de septiembre de 2016

Alta Disponibilidad Replicador de Base de Datos Oracle - ORASTB


ORASTB - Desarrollado por Victor Endara Manosalvas

ORASTB es un servicio que se encarga de realizar la réplica de la base de datos Principal a una BD de datos Standby en caliente. Aunque este es un esquema Activo/Pasivo la base de datos Stanby puede estar disponible para consultas (Si tiene proceso ETL de datawarehouse), esto si quisieras descargar la carga de trabajo a tu BD Principal puedes usar la Standby para las consultas.

Como administradores de base de datos una de las tareas que menos tiempo dedicamos, pero por ello no deja de ser importante es la "Continuidad del Negocio",  esto va orientado a las disponibilidad de todos los servicios tecnológicos de la organización con un DRP (para los que no saben: Plan de recuperación ante desastre) en la que se incluye nuestras BD, en la mayoría de lugares que he visitado los DBA o encargados de las BD solo se limitan a mantener en buen rendimiento la BD, pocas veces se preocupan de los respaldos y si hablamos de contingencia ni hablar!!!.

Si tu servidor de BD sufre algún daño (Dios no quiera), cuanto tiempo está dispuesto tu organización a estar sin sistema, está dispuesto a perder información?  Si los ingresos de tu organización es sistema-dependiente pues no creo que tengas mucho tiempo de holgura y no te permitan perder información.

Para implementar una contingencia de BD tenemos algunas opciones en el mercado:
Implementar Oracle Data Guard (Active o también) para replicar la BD en la Nube o centro de cómputo alterno

Implementar  con herramienta de terceros  para replicar la BD en la Nube o centro de cómputo alterno

En si tenemos algunas alternativas para esta implementaciones, pero también hay que tomar en cuenta que esto va acompañado de inversión económica en servicios, hardware y licencias esto va a depender de cuál de las arquitecturas vamos a implementar. En mi caso no disponía del presupuesto suficiente, asi que decidí realizar una herramienta de replicación de BD Oracle que la llame ORASTB.

Comparto la herramienta ORASTB realizada por mi para su uso sin costo alguno, a continuación explicare su funcionamiento y como implementarla.


Características  ORASTB
  • Es un servicio que se instala y configura en el servidor Standby.
  • Copia los Archivelog generados en el servidor Principal para llevarlos al Standby
  • Aplica los archivelog en el servidor Standby
  • Configuración de horarios de copiado de archivelog.
  • Configuración de horarios de aplicado de archivelog.
  • Configuración de borrado automáticos de archivelog.
  • Establecer tiempo mínimo de generación archivelog.

El servicio está realizado para plataformas Windows y lo he probado en Oracle DB 10g y 12C en plataformas WS 2003R2 y WS 2012
ORASTB Cuenta con una consola administrativa bastante simple, en donde podemos monitorear y configurar el servicio.

Links de descarga:
ORASTB x64
ORASTB x86

Consola ORASTB - Servicio
En esta pestaña podemos ver:
  • Estado del servicio con opción de iniciar/detener.
  • Estado de las instancias Principal y Standby, así como su secuencia de archivelog
  • Log de eventos del servicio, aquí nos daremos cuenta de lo que está realizando el servicio en tiempo real.
  • Opción FailOver, en caso de una caída del servidor Pricipar el servidor Standby se procede cambiar a modo principal, es decir se apertura a modo Lectura/Escitura.

Consola ORASTB – Sistema Config
 En esta pestaña se configura generalidades del servicio
  • Intervalo tiempo en minutos: Se configura el intervalo de tiempo que el servicio estará ejecutándose pare realizar las verificaciones.
  • Horario de copia de archivos ARC: Se especifica las horas en que el servicio podrá realizar las copias de los archivelog desde el servidor Principal.
  • Horarios de aplica ARC: Se especifica las horas en que se aplicaran los archivelog en la base de datos Standby. Durante la aplicación de archivelog, la base de datos no va a estar disponible para lectura, por lo que si tenemos servicio Datawarehouse que apunten a la base Standby van a perder la conexión durante la aplicación de los archivelogs.

Consola ORASTB – DB Config
Esta pestaña contiene información relacionada con la conectividad de las base de datos Principal y Standby.
  • Extensión ARC: Indica cual es la extensión de los archivos archivelog que se van a copiar.
  • Tiempo  mínimo Log: Este parámetro establece cual es tiempo minimo que la BD Principal debe de generar LOG, si el umbral pasa este valor entonces ORASTB forzará a la generación de archivelog.
Los siguientes parámetros aplican en general para Principal y STANDBY
  • Host: IP o Nombre del host PRINCIPAL o STANDBY
  • DB SID: Nombre identificador del servicio de BD PRINCIPAL o STANDBY
  • Listener: Puerto del listener del servidor PRINCIPAL o STANDBY
  • DB User: Usuario con privilegios DBA de la BD PRINCIPAL o STANDBY
  • DB Password: Password usuario con privilegios DBA de la BD PRINCIPAL o STANDBY.
  • Ruta ARC: PRINCIPAL se debe de especificar la ruta de red de donde se tomaran los archivelog. STANDBY se debe de especificar la ruta destino donde se enviaran los archivelogs.
  • Read Only: Configuración solo para la BD STANDBY, indica si la BD esta disponible en modo lectura, si se desactiva la BD STANDBY no podrá ser accedida por conexiones de red. Si se implementa estrategia procesos  ETL Datawarehouse deberá activar el casillero para que la BD este disponible en modo Lectura.


Implementación ORASTB

Planeación de la arquitectura


En nuestro plan a implementar tenemos un servidor Principal y uno Standby, ambos equipos deben homogéneos es decir igual SO y motor de base de datos, se recomienda que sea igual característica en procesado y memoria, pero esto puede aceptar variaciones.

Pre-Requisito
Principal
  • La base de datos debe de estar en modo archivelog.
Standby
  • Sistema Operativo igual que el Principal
  • Motor de base de datos igual que el Principal
  • Capacidad de almacenamiento igual que el Principal
  • Memoria RAM igual que el Principal
Pasos a seguir:
  1. Configurar en modo ARCHIVELOG la BD Principal y direccionarlos a una carpeta específica del filesystem (Para nuestra practica lo realizaremos en la ruta E:\backup\oracle\orcl\archivelog)para compartir con el servidor Standby.
  2. Sacar un backup full de la BD con el RMAN en el servidor Principal.
  3. Recuperar la BD en el servidor Standby.
  4. Instalar y configurar el servicio ORASTB en el servidor Standby
1 Configurar en modo ARCHIVELOG la BD Principal y direccionarlos a una carpeta específica para compartir con el servidor Standby
Configuración en la BD del servidor Principal




Verificar si la BD esta en modo ARCHIVELOG
SQL> select log_mode from v$database;
LOG_MODE
------------
ARCHIVELOG
Direccionar los archivelog a la ruta que vamos a compartir al servidor STANDBY
#>set Oracle_sid=orcl
#>sqlplus / as sysdba

//Configuramos la ruta donde vamos a almacenar los archivelog
//Comando para 12C
SQL> alter system set log_archive_dest_1= 'LOCATION=E:\backup\oracle\orcl\archivelog' scope=SPFILE;

//Comando para 10G
SQL> alter system set log_archive_dest=' E:\backup\oracle\orcl\archivelog\' scope=SPFILE;

Establecer la extensión ARC de los archivelog
//Configuramos el formato con el que se generara los archivelog
SQL> alter system set log_archive_format= 'ARC%S_%R.%T.ARC' scope=SPFILE;

Si no lo está modo ARCHIVELOG activarlo
#>set Oracle_sid=orcl
#>sqlplus / as sysdba
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;



Compartimos la carpeta “E:\backup” que contiene el archivelog en el servidor Principal.

Nota: Esta carpeta deberá tener los respectivos permisos de lectura a los  grupos o usuarios que van acceder desde el servidor Standby.




2 Sacar un backup full de la BD con el RMAN en el servidor Principal

Realizaremos con el RMAN un backup full de la BD del servidor Principal incluyendo los control file, ojo que necesitamos incluir e identificar el respaldo del controlfile para la reconstrucción de la BD en el servidor Standby.



Ejecutamos con el RMAN el respaldo
#> set Oracle_sid=orcl
C:\>rman target /
connected to target database: ORCL (DBID=1447292720)
//Ojo con este número marcado DBID, lo vamos a necesita para recrear la BD en el servidor STANDBY

run{
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'E:\backup\oracle\orcl\backup\control_%F';
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT 'E:\backup\oracle\orcl\backup\%d_%Y%M%D%U';
      BACKUP INCREMENTAL LEVEL 0 DATABASE
        include current controlfile
        plus archivelog;
}




El respaldo generado fue direccionado a la ruta E:\backup\oracle\orcl\backup la cual ya la tenemos compartida para que la vea el servidor STANDBY


3 Recuperar la BD en el servidor Standby.

Como requisito debemos tener en el servidor Standby ya instalado el motor de la base de datos con una instancia Oracle básica ya creada.

Pasos que vamos a seguir:
  • Crear la instancia de BD en el servidor Standby
  • Desactivamos el inicio automático de la instancia Orcl del servidor Standby
  • Copiar el respaldo de la BD Principal al servidor Standby
  • Recuperación de la BD en el servidor Standby
  • Configuración archivo  INIT
  • Recupera la BD en el servidor Standby

Crear la instancia de BD en el servidor Standby
Con el DBCA crearemos la instancia con las misma estructuras de fileserver que la BD del servidor Principal.







Desactivamos el inicio automático de la instancia Orcl del servidor Standby

El servicio ORASTB es quien se encargará de subir y bajar la base de datos para realizar la aplicación de los Archivelog, por ello se debe de desactiva el inicio automático.

Esto lo vamos a realizar desde el regedit, dependiendo de la versión del motor de BD y del nombre de la BD esto puede variar: HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB12Home1

En este caso buscamos la variable ORA_ORCL_AUTOSTART, que es la que está relacionada con nuestra instancia ORCL.


Copiar el respaldo de la BD Principal al servidor Standby


Copia del Backup del servidor Principal
C:\>copy \\CSC-DB-PROD-01\backup\oracle\orcl\backup\* E:\backup\oracle\orcl\back
up\



Configuración archivo  INIT
Copiar el archivo Init de la base de datos %OracleHome%\INITorcl.ora del servidor Principal al Servidor Stanby



Si no existe el pfile, crearlo en el servidor Principal
>set ORACLE_SID=ORCL
>sqlplus / as sysdba
SQL>create pfile='E:\app\oracle\product\12.1.0\dbhome_1\database\INITorcl.ora'
from spfile;
File created.
 

Luego de crearlo debe de ser copiado del servidor Principal en la misma ruta en el servidor Standby.

Nota: el archivo INITorcl.ora no se tiene que editar siempre y cuando se tenga la misma arquitectura de filesystem, memoria y procesador, si por ejemplo tu servidor Principal tiene mas memoria que el Standby podrás disminuir la memoria asignada a la instancia desde el  INITorcl.ora.

Recupera la BD en el servidor Standby
A partir de ahora empezaremos a realizar la recuperación de la base de datos con el RMAN de Oracle.



Nos conectamos con el RMAN
>set ORACLE_SID=ORCL
>rman target / nocatalog
Recovery Manager: Release 12.1.0.2.0 - Production on Fri Sep 30 11:30:27 2016
Copyright (c) 1982, 2015, Oracle and/or its affiliates.  All rights reserved.
connected to target database: ORCL (DBID=1451692359)
//Ojo, este número desde de ser reemplazado por el DBID de la BD Principal
using target database control file instead of recovery catalog


Bajamos la instancia
RMAN> shutdown immediate;
database closed
database dismounted
Oracle instance shut down
Iniciamos la instancia desde el archivo INITorcl.ora en modo NOMOUNT
RMAN> run {startup nomount pfile='E:\app\oracle\product\12.1.0\dbhome_1\database
\INITorcl.ora';}
Total System Global Area     822083584 bytes
Fixed Size                     3050992 bytes
Variable Size                612368912 bytes
Database Buffers             201326592 bytes
Redo Buffers                   5337088 bytes
Creamos el SPFILE
RMAN> sql "create spfile from pfile";
Establecemos el DBID de la BD del servidor Principal.
Recordar que lo hicimos mención al momento de sacar el respaldo!!, para obtenerlo, debes de conectarte con el RMAN en el servidor Principal y ver los mensajes al momento de la conexión:
connected to target database: ORCL (DBID=1447292720)
RMAN> Set DBID 1447292720;
executing command: SET DBID
Recuperar los control file del respaldo del RMAN
 
Este nombre de archivo va no va a ser el mismo cuando genere el respaldo, por lo que tendrán que editar el script para reemplazar el nombre del archivo
RMAN> restore controlfile from 'E:\backup\oracle\orcl\backup\CONTROL_C-144729272
0-20160930-01';

Starting restore at 30-SEP-16
using channel ORA_DISK_1
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
output file name=E:\APP\ORACLE\ORADATA\ORCL\CONTROL01.CTL
output file name=E:\APP\ORACLE\RECOVERY_AREA\ORCL\CONTROL02.CTL

Montamos la BD Standby
RMAN> sql "alter database mount";
sql statement: alter database mount
released channel: ORA_DISK_1
Recatalogamos el respaldo que copiamos del Principal al Standby
RMAN> catalog start with "E:\backup\oracle\orcl\backup\" noprompt;
searching for all files that match the pattern E:\backup\oracle\orcl\backup\
List of Files Unknown to the Database
=====================================
File Name: E:\BACKUP\ORACLE\ORCL\BACKUP\CONTROL_C-1447292720-20160930-01
cataloging files...
cataloging done
List of Cataloged Files
=======================
File Name: E:\BACKUP\ORACLE\ORCL\BACKUP\CONTROL_C-1447292720-20160930-01
Restablecemos la BD
RMAN> restore database;
Starting restore at 30-SEP-16
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=11 device type=DISK
channel ORA_DISK_1: restore complete, elapsed time: 00:01:05
Finished restore at 30-SEP-16    



4 Instalar y configurar el servicio ORASTB en el servidor Standby
Ahora realizaremos la instalación y configuración del servicio ORASTB, hay que tomar en cuenta lo siguite:
  • Para plataformas Windows x64 o X86
  • Requiere Framework 3.5 o superior


Pasos a seguir:
  • Descarga de archivos ORASTB_x64 o ORASTB_x86
  • Instalar servicio
  • Configurar parámetros de ORASTB desde la administración

Instalar servicio


Establecer los permisos sobre la carpeta donde reside el servicio E:\ORASTB_SERVICIO, el usuario debe de ser con el cual se realizó la instalación Oracle y Administrador.


Instalar servicio ORASTB
Ir al directorio %Windows%\Microsoft.NET. se debe de seleccionar el framwork de 32 o 64 bits, depende de la compilación y del ORASTB que decarguen, en este caso se usar la de 64btis
C:\Windows\Microsoft.NET\Framework64\v4.0.30319

Desde un CMD
installutil “E:\ORASTB_SERVICIO\ORASTB.EXE”

El mensaje al final debe indicar que se creó el servicio de forma correcta.

Establece usuario de sesión del servicio
En la administración de servicios buscar ORASTB y establecer usuario Oracle o Administrator, debe de ser el propietario de la instalación Oracle




Configurar parámetros de ORASTB desde la administración
Debemos establecer la configuración necesaria para que el servicio realice la aplicación de los archivelog como rutas e informacion de las instancias de BD.

Para más informacional de cada uno de los campos, está en la parte inicial de este documento.



Para ejecutar la consola administrativa  crear acceso directo o ejecutar E:\ORASTB_SERVICIO\E:\ORASTB_SERVICIO\ORASTB_ADM.EXE



Configuración “Sistema Config”
Dependiendo de la necesidad deberán establecer la configuración

Configuración “DB Config”
Llenar los datos del Principal y Standby así como de sus instancias




Establecer inicio en automático e iniciar



Una vez configurado e iniciado el servicio podrán ver la actividad en la consola


Listo ya tienes una base de datos Oracle Standby actualizadose de manera automática. En caso de que falle tu BD Pricipal para activar tu base de datos Standby debes:
  • Presionar el boton FailOver. esto pondrá en modo READ/WRITE la BD Standby
  • Direccionar tus conexiones de aplicaciones a la BD Standby que paso a ser Principal. 
  • Si deseas hacer mas transparente puedes manejar este direccionamiento por medio de tu DNS o Cambiar tu IP del servidor Stanby con la del Principal(Cabe recalcar que el Principal no debe de estar en uso)
Para consultorías Oracle me pueden contactar a las siguientes direcciones:
Correo:victor.endara@gmail.com
Telefono:593999627457