Actualización, consolidación, migración y contingencia de ... · Instalación de Oracle Linux...

216
Actualización, consolidación, migración y contingencia de un entorno hardware y software para la gestión de bases de datos Autor: Juan Rafael García Santana Tutor: Gabino Padrón Morales Departamento de Informática y Sistemas Las Palmas de Gran Canaria, 30 de agosto de 2013

Transcript of Actualización, consolidación, migración y contingencia de ... · Instalación de Oracle Linux...

Actualización, consolidación, migración y

contingencia de un entorno hardware y

software para la gestión de bases de datos

Autor:

Juan Rafael García Santana

Tutor:

Gabino Padrón Morales

Departamento de Informática y Sistemas

Las Palmas de Gran Canaria, 30 de agosto de 2013

Índice

Índice ................................................................................................................................ 3

Prólogo ............................................................................................................................. 7

Agradecimientos ............................................................................................................... 8

Contexto actual ................................................................................................................. 9

Entorno de software y hardware ................................................................................... 9

Problemática actual .................................................................................................... 10

Objetivos ......................................................................................................................... 12

Objetivos académicos .................................................................................................. 12

Objetivos de este Trabajo de Fin de Grado ................................................................ 12

Competencias ................................................................................................................. 14

CII01............................................................................................................................ 14

CII02............................................................................................................................ 14

CII04............................................................................................................................ 15

Introducción ......................................................................................................... 15

Marco del proyecto ............................................................................................... 16

Objetivos del proyecto ....................................................................................... 16

Alcance del proyecto ......................................................................................... 16

Requisitos técnicos ............................................................................................ 19

Planificación ......................................................................................................... 19

Descripción del equipo de trabajo .................................................................... 19

Plan de trabajo .................................................................................................. 20

Anexo I. Planificación temporal del proyecto ...................................................... 21

Servicio de Análisis genérico previo a la migración ........................................ 21

Servicio de migración completa de las instancias de base de datos ................. 21

Servicio de creación y puesta en marcha del servidor de contingencia ........... 25

Aspectos que están fuera del alcance de esta propuesta ...................................... 26

Condiciones generales .......................................................................................... 26

Condiciones económicas ...................................................................................... 27

Condiciones legales .............................................................................................. 27

CII18............................................................................................................................ 28

Aportación al entorno socio-económico ........................................................................ 29

Actualización y mejora del hardware ......................................................................... 29

Actualización del software de gestión de bases de datos ............................................ 29

Reorganización y mejora de la infraestructura .......................................................... 30

Normativa y legislación .................................................................................................. 32

Normativa y regulación de la información en el ámbito internacional .................. 32

Estados Unidos ..................................................................................................... 33

Alemania ............................................................................................................... 33

Austria .................................................................................................................. 33

Gran Bretaña ........................................................................................................ 34

Holanda ................................................................................................................ 34

Francia ................................................................................................................. 34

Chile ..................................................................................................................... 35

Normativa y regulación de la informática en el ámbito europeo ............................ 35

Normativa y regulación de la informática en el ámbito nacional ........................... 36

Leyes y Decretos Ley. ........................................................................................... 36

Código penal ............................................................................................................ 37

Recomendaciones de la Agencia de Protección de Datos. ...................................... 37

Información en la recogida de datos .................................................................... 37

Finalidad para la que se recogen los datos ......................................................... 38

Seguridad en el intercambio de datos .................................................................. 38

Protección jurídica de programas de ordenador (piratería informática) ........... 39

¿En qué casos se infringe la Ley? ........................................................................ 39

Medidas judiciales ................................................................................................ 40

Licencias de software ............................................................................................... 40

Plan de trabajo ............................................................................................................... 42

Análisis ........................................................................................................................... 44

Requerimientos de software ........................................................................................ 44

Requerimientos de hardware ...................................................................................... 46

Procesador ............................................................................................................... 46

Memoria RAM .......................................................................................................... 48

Almacenamiento ....................................................................................................... 49

Nodos del RAC. Almacenamiento local ................................................................ 49

Nodos del RAC. Almacenamiento externo ............................................................ 50

Servidor de contingencia. Almacenamiento local ................................................ 52

Conectividad ............................................................................................................ 52

Nodos del RAC ..................................................................................................... 53

Servidor de contingencia ...................................................................................... 54

Despliegue usando VLANs ................................................................................... 55

Red de almacenamiento y red pública .................................................................. 58

Hardware. Resumen de la configuración mínima recomendada............................. 60

Configuración definitiva adquirida por el cliente....................................................... 61

Distribución del almacenamiento ............................................................................... 62

Desarrollo ....................................................................................................................... 67

Instalación del hardware y configuración de la cabina de discos .............................. 67

Instalación de Oracle Linux ........................................................................................ 69

Instalación de Oracle Clusterware ............................................................................. 80

Instalación del software de Oracle RAC ..................................................................... 86

Creación de la instancia de base de datos en RAC..................................................... 95

Creación de la base de datos de contingencia .......................................................... 101

Instalación de Oracle GoldenGate en el RAC .......................................................... 104

Instalación de GoldenGate en la máquina de contingencia ..................................... 106

Instalación de GoldenGate en el servidor ROSS ...................................................... 107

Replicación del esquema FIN ................................................................................... 109

Aplicación del Patch Set Update al software de Oracle en el RAC .......................... 115

Configuración de GoldenGate en Alta Disponibilidad en el RAC............................ 117

Instalación de GoldenGate en la máquina APTAE ................................................... 121

Migración de los esquemas de Alfresco y Administración Electrónica .................... 122

Migración de los esquemas de SIME ........................................................................ 130

Instalación de STATSPACK en la base de datos del RAC y en la de contingencia . 140

Esquema de copias de seguridad propuesto para el clúster y su base de datos ...... 146

Esquema de copias. Visión general ....................................................................... 147

Esquema de copias. Detalle ................................................................................... 147

Diferencias de configuración de los scripts de copia en cada nodo ..................... 150

Modificaciones a los scripts de copia al añadir o eliminar un nodo .................... 151

Modificaciones al añadir o eliminar una instancia de base de datos ................... 152

Ejemplo de recuperación del servicio tras la pérdida total de discos del clúster . 152

Scripts de backup del clúster y de la base de datos en RAC ..................................... 161

Habilitar “huge pages” en las máquinas del RAC y contingencia........................... 191

Replicación de los esquemas de Alfresco y Admón. Electrónica en contingencia ... 198

Replicación de los esquemas de SIME en contingencia ........................................... 207

Conclusiones ................................................................................................................. 214

Bibliografía ................................................................................................................... 216

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 7

Prólogo

En los entornos informáticos es habitual la realización de actualizaciones de los

componentes tanto hardware como software por distintos motivos. La obsolescencia de

los componentes que ya no se adaptan a los requerimientos del negocio o la

modificación de éstos requerimientos a lo largo del tiempo figuran entre los motivos

principales por los que, llegado el momento, una organización decide actualizar sus

sistemas informáticos.

El escenario de migración en el que está basado este Trabajo Fin de Grado se

enmarca dentro de un proyecto real de migración de un entorno completo de hardware y

software para el soporte de un gestor de bases de datos Oracle. En este escenario, la

organización para la que se realizaron los trabajos necesitaba actualizar los

componentes hardware que habían quedado obsoletos a lo largo de los años y

necesitaba, así mismo, consolidar en un entorno centralizado las distintas bases de datos

dispersas en varios servidores dentro de la organización además de actualizarlas a la

última versión de Oracle disponible en el momento del comienzo del proyecto.

Dado que la magnitud del proyecto real de migración escaparía a los objetivos

de este Trabajo de Fin de Grado, se han reflejado en este trabajo las tareas principales

del mismo de tal forma que el conjunto de todas ellas permita tomar este documento

como base para realizar cualquier migración de este tipo con garantías de éxito.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 8

Agradecimientos

Quisiera expresar mi más sincero agradecimiento a todas aquellas personas que,

en alguna medida, me han aportado algo durante el desarrollo de este Trabajo de Fin de

Grado.

En primer lugar agradecer a mi familia por el apoyo incondicional

imprescindible para realizar este trabajo y la paciencia para soportar mis rabietas y

cambios de humor cuando algo no salía como esperaba.

A mis compañeros de la empresa en la que trabajo por al apoyo y por sus sabios

consejos basados en su dilatada experiencia.

Y, por supuesto, a mi tutor, Gabino, por su apoyo, ayuda y consejos y por

empujarme constantemente para que no me durmiera en los laureles y llevar este

Trabajo a feliz término.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 9

Contexto actual

Entorno de software y hardware

El entorno software actual objeto de la migración consta de tres bases de datos

Oracle todas ellas con distintas versiones de software ya obsoletas que carecen de

soporte por parte del vendedor. Una de las bases de datos, además, está en un entorno

virtualizado que tampoco está soportado por el fabricante.

La base de datos principal se denomina DRAGO y tiene como características

principales:

• Versión: Oracle 9i (9.2.0.4) Enterprise Edition

• Tamaño aproximado de archivos de datos: 300GB

• Aproximadamente 200 tablespaces

• Aproximadamente 360 usuarios/esquemas

Los esquemas de esta base de datos soportan la gran mayoría de las aplicaciones

empleadas en la organización, tanto propietarias como de terceros, que tienen como

“backend” una base de datos Oracle.

La segunda base de datos a migrar se denomina ROSS y sus características

principales son:

• Versión: Oracle 10g (10.2.0.3) Enterprise Edition

• Tamaño aproximado de archivos de datos: 16 GB

• Aproximadamente 10 tablespaces

• Aproximadamente 30 usuarios/esquemas

Esta base de datos da soporte a la aplicación ECOFIN exclusivamente.

Finalmente, la tercera base de datos a migrar se denomina APTE y éstas son sus

características principales:

• Versión: Oracle 10g (10.2.0.1) Enterprise Edition

• Tamaño aproximado de archivos de datos: 180 GB

• Aproximadamente 30 tablespaces

• Aproximadamente 40 usuarios/esquemas

La organización no necesita migrar todos los esquemas de las bases de datos

pues muchos de ellos pertenecen a aplicaciones que ya están obsoletas, son esquemas de

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 10

prueba o, simplemente, requieren un cribado de su contenido aprovechando las tareas

propias de la migración.

Dos de las tres bases de datos, DRAGO y ROSS, corren sobre hardware antiguo

que ya no responde adecuadamente a los requerimientos del negocio y dificulta la

implantación y desarrollo de nuevas aplicaciones. La tercera base de datos, APTAE,

corre en una máquina virtual en un entorno VMWare que no está soportado

directamente por Oracle.

Las características principales de los equipos son las siguientes:

Máquina: XERQUE (corre la base de datos DRAGO)

• Características: XEON 2GHz (2x CPU, 4 CORES, 4 THREADS) y 8 GB

RAM

• Sistema Operativo: Windows Server 2003 STD SP2 (32 bit)

Máquina (virtual): APTAE (corre la base de datos APTAE)

• Características: Xeon 5650 2.67Ghz (6 cores, 12 threads), dos de los

cuales están asignados a la máquina virtual, y 6 GB RAM

• Sistema Operativo : Windows Srv 2003 R2 STD x64 SP2

Máquina: ECOFIN (corre la base de datos ROSS)

• XEON E5335 2 Ghz (1x 4 cores, 4 threads) y 4 GB RAM

• Sistema Operativo: Windows Server 2003 STD SP2 (32 bit)

Problemática actual

A continuación se exponen los principales aspectos problemáticos de la

configuración de software y hardware expuesta.

Las versiones del software de base de datos Oracle actuales, o bien ya no están

directamente soportadas por Oracle como es el caso de las bases de datos en versión 9i,

o requieren de un soporte extendido con cargo extra.

Las nuevas aplicaciones y entornos de desarrollo requieren versiones más

recientes del software de base de datos Oracle.

La dispersión de las bases de datos en tres entornos de hardware y software

distintos e independientes dificulta las tareas de administración y mantenimiento de las

mismas y hace un uso poco eficiente del hardware.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 11

Por otra parte, sólo una de las tres bases de datos, DRAGO, dispone de una

solución de alta disponibilidad y ésta es de la forma de clúster activo/pasivo que

mantiene en todo momento un servidor sin utilizar con el consiguiente

desaprovechamiento de recursos.

Actualmente no se dispone de un mecanismo de contingencia para las bases de

datos que permita la continuidad del negocio en caso de desastre total del entorno de

producción.

Finalmente, el esquema de copias de seguridad de las bases de datos es

deficiente y no garantiza la recuperación exitosa en todos los supuestos de desastre.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 12

Objetivos

Objetivos académicos

La meta a conseguir en cualquier educación superior se rige por la validez de sus

estudiantes a la hora de incorporarse al mercado laboral, cobrando especial importancia

la asimilación del rápido avance de la tecnología y un constante período de reciclaje.

Esto provoca la necesidad de que el alumno se familiarice con métodos, técnicas y

tecnologías actuales.

Existe un carácter integrador de conocimientos adquiridos en la titulación como

son:

Programación.

Ingeniería del software.

Prueba y mantenimiento de software.

Diseño y programación de sistemas.

Tecnologías aplicadas a los sistemas de información.

Objetivos de este Trabajo de Fin de Grado

A grandes rasgos, los principales objetivos de este Trabajo de Fin de Grado

coinciden con los objetivos de la organización y pueden resumirse en los siguientes

puntos:

Identificación de las deficiencias y necesidades tanto actuales como a medio

plazo del entorno software y hardware de la organización para la gestión de

bases de datos mediante un análisis en profundidad del entorno y de los

requerimientos futuros de la organización.

Determinar los requisitos de software y hardware necesarios para satisfacer las

necesidades identificadas en el análisis anterior.

Planificación e implantación de la solución seleccionada que incluirá:

o La adquisición e instalación del nuevo hardware y software.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 13

o La consolidación y migración de las tres bases de datos en un entorno

centralizado de alta disponibilidad tipo activo/activo.

o El establecimiento de un entorno de contingencia totalmente

independiente del entorno de producción y sincronizado

permanentemente con éste.

o Creación de un esquema de copias de seguridad que cubra la

recuperación exitosa del entorno de producción en todos los supuestos de

desastre.

Seguimiento de la solución implementada determinando si cumple con los

requisitos esperados y posterior obtención de conclusiones.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 14

Competencias

CII01

Capacidad para diseñar, desarrollar, seleccionar y evaluar aplicaciones y

sistemas informáticos, asegurando su fiabilidad, seguridad y calidad, conforme a

principios éticos y a la legislación vigente.

Mediante la realización de este Trabajo de Fin de Grado quedan cubiertas todas

las competencias que se indican bajo este epígrafe.

Durante la fase de análisis se determinan exhaustivamente los requisitos de

software y hardware para implementar la solución al problema presentado haciendo uso

de las capacidades de evaluación y selección para identificar los componentes

adecuados.

En este trabajo se justifican adecuadamente los motivos que llevaron a la elección

de los componentes elegidos y se indican las ventajas de las soluciones de alta

disponibilidad, contingencia y copia de seguridad propuestas.

CII02

Capacidad para planificar, concebir, desplegar y dirigir proyectos, servicios y

sistemas informáticos en todos los ámbitos, liderando su puesta en marcha y su mejora

continua y valorando su impacto económico y social.

A lo largo de todas sus fases el Trabajo abarca la mayoría de las tareas a realizar

en un proyecto informático.

Dada la gran cantidad de tareas a realizar no sólo se cubre la capacidad de

planificación de tareas sino que resulta imprescindible realizar una planificación de

detallada de todas las acciones a realizar.

El trabajo describe la planificación de las tareas que comprenden todas las fases

del proyecto así como la ejecución de las mismas indicando los problemas presentados

en la implantación y las soluciones aplicadas para resolverlos.

De todos los elementos de un sistema de gestión de proyectos, la planificación es

posiblemente la más importante, puesto que una mala o inexistente planificación

conducirá a una mala realización en el proyecto, lo cual repercutirá enormemente tanto

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 15

en la calidad como en el plazo de terminación del proyecto, ocasionando grandes

perjuicios. Esta competencia queda cubierta puesto que la buena planificación de este

Trabajo de Fin de Grado ha dado lugar al propósito fundamental, que no es otro que la

finalización del mismo en los plazos establecidos así la consecución de manera

adecuada de los objetivos propuestos inicialmente.

En el capítulo social y económico, la aportación del trabajo es evidente teniendo

en cuenta que a la finalización del mismo, la organización dispondrá de una plataforma

hardware y software más potente, segura, de alta disponibilidad y preparada para las

exigencias requeridas por las aplicaciones actuales y futuras.

CII04

Capacidad para elaborar el pliego de condiciones técnicas de una instalación

informática que cumpla los estándares y normativas vigentes.

A continuación se muestra el pliego de condiciones técnicas presentado y

aprobado por la Organización previo comienzo de los trabajos.

Introducción

El objeto del presente documento es ofrecer a la organización, en adelante el

Cliente, una oferta de servicios para la migración y consolidación de tres bases de

datos Oracle en uso en la organización y la creación de un sistema de contingencia

para ellas.

Los servicios ofertados incluyen la detección previa de los problemas que puedan

surgir con la migración de las aplicaciones que hacen uso de las bases de datos

determinando, en la medida de lo posible, aquellos errores y requisitos a satisfacer

para llevar a cabo la migración de manera correcta.

En este documento se detallan todas y cada una de las tareas necesarias para la

realización de los servicios ofertados (fases del proyecto, tareas, plazos, recursos,

etc.) así como sus costes.

La presente propuesta está estructurada en tres apartados principales y dos anexos

con el siguiente contenido:

Apartado de Marco del Proyecto, donde se describe el alcance de los trabajos a realizar en los distintos servicios ofrecidos.

Apartado de Planificación, donde se detallan los equipos que se destinarán al proyecto, y una planificación temporal del desarrollo del mismo.

Apartados de Condiciones Económicas y Condiciones Generales, donde se encuentran valorados los esfuerzos necesarios para la realización del proyecto, y donde se especifican los aspectos que, en el momento de

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 16

elaborar esta propuesta, se ha entendido que deben estar fuera del alcance de la misma.

ANEXO I.- Planificación Temporal de los Trabajos.

Marco del proyecto

Objetivos del proyecto

El proyecto persigue los siguientes objetivos:

Asesoramiento previo al Cliente indicando los posibles problemas y adaptaciones necesarias identificados por Oracle para el proceso de migración y consolidación de base de datos.

Estudio de licenciamiento de los productos Oracle necesarios para implementar el esquema de consolidación propuesto.

Migración de las bases de datos de la Oraganización a Oracle RAC 11gR2 de 2 nodos.

Establecimiento de un mecanismo de contingencia para las bases de datos migradas.

Alcance del proyecto

El proyecto abarca los siguientes aspectos:

Servicio de análisis genérico previo a la migración

1. Recopilación de información genérica sobre la migración

Se recopilará, a nivel genérico y a partir de notas de Oracle Support,

información sobre la migración. De esta forma se identificarán los

problemas, cambios y errores que pueden producirse en la migración a la

versión 11g y que podrían afectar a las bases de datos y a las aplicaciones

que soportan.

La información recopilada incluye las matrices de certificación y errores

encontrados para los conectores ODBC, JDBC y ODP.NET.

2. Elaboración y envío al cliente de un informe con la información recopilada.

Esta información permitirá al cliente conocer de antemano los problemas

identificados por Oracle a la hora de migrar bases de datos 9i y 10g a la

versión 11g con la que podrá informar a los proveedores de las aplicaciones

de los posibles cambios a realizar en las mismas.

Servicio de migración completa de las instancias de base de datos

Para la realización de este servicio es imprescindible que se hayan completado

todas las tareas del servicio “Análisis previo a la migración”.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 17

En este servicio se realiza la migración de las bases de datos ROSS, APTAE y

DRAGO a un RAC 11gR2 de dos nodos.

Para las tareas de migración se utilizará el software Oracle GoldenGate que

reducirá al mínimo el tiempo de parada de la actividad a usuarios y

aplicaciones.

A continuación se describen las tareas a realizar.

1. Determinar e informar al cliente sobre los requisitos de hardware y software (sistema operativo y parches) necesarios para la instalación y puesta en marcha del RAC y de las bases de datos destino.

En particular se informa al cliente de los requisitos de licenciamiento de

productos Oracle necesarios.

2. Preparación del entorno en los dos servidores del RAC para la instalación del software de clúster (Grid Infrastructure) y el software de base de datos Oracle.

3. Instalación en ambos nodos del software de cluster que incluye la creación de las dos instancias ASM para la administración del almacenamiento compartido. Esta tarea requiere que el servidor tenga instalado el sistema operativo y los parches mínimos para la instalación.

Es necesario, así mismo, que el almacenamiento externo y compartido por los dos nodos del RAC esté configurado y visible en ambos nodos y que la infraestructura de red necesaria para el RAC esté configurada (red de interconexión entre nodos y la red pública) y esté disponible el conjunto de direcciones IP virtuales requerido.

4. Instalación de la nueva versión del software de Base de Datos Oracle en los dos nodos del RAC. Esta tarea requiere que el servidor tenga instalado el sistema operativo y los parches mínimos para la instalación.

5. Creación de las instancias de base de datos en el RAC destino.

6. Estudio previo de los entornos origen y destino y configuración de ambos entornos para la instalación de Oracle GoldenGate.

7. Instalación y pruebas de Oracle GoldenGate en las tres máquinas origen y en los dos nodos del RAC.

8. Configuración de Oracle GoldenGate para la lectura de las bases de datos origen y configuración de Oracle GoldenGate para la entrega de los datos leídos en origen. Estas tareas incluyen las correspondientes pruebas de funcionamiento.

9. Exportación consistente de las bases de datos origen a un punto concreto en el tiempo (o SCN) e importación en el entorno RAC destino.

10. Activación de la réplica entre las bases de datos origen y destino.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 18

11. Pruebas de compatibilidad de las aplicaciones existentes con las nuevas bases de datos. Estas pruebas serán realizadas por el Cliente.

12. Seguimiento del funcionamiento del sistema migrado para detectar posibles problemas.

13. Ajustes post-migración a las bases de datos.

14. Configuración y prueba de la política de copias de seguridad de la base de datos.

15. Elaboración y envío al cliente de un informe describiendo las tareas realizadas.

Servicio de creación y puesta en marcha de un servidor de contingencia

Con este servicio se configura un tercer servidor externo al RAC con el

software de base de datos 11gR2 y con memoria y almacenamiento suficientes

para montar tres instancias de bases de datos DRAGO, ROSS y APTAE que

se mantendrán constantemente sincronizadas a través de Oracle GoldenGate

con sus homólogas del RAC.

Las tareas correspondientes a este servicio son las siguientes:

1. Determinar e informar al cliente sobre los requisitos de hardware y software (sistema operativo y parches) necesarios para la instalación y puesta en marcha del servidor de contingencia.

2. Preparación del entorno para la instalación del software de base de datos Oracle y comprobación de requisitos.

3. Instalación del software de base de datos Oracle 11g en el servidor.

4. Creación de las instancias de base de datos en el servidor de contingencia.

5. Estudio previo y configuración del servidor de contingencia para la instalación de Oracle GoldenGate.

6. Instalación y pruebas de GoldenGate en el servidor de contingencia.

7. Configuración del entorno origen (RAC) para la lectura de datos con Oracle GoldenGate y del entorno destino (servidor de contingencia) para la entrega. Esta fase incluye las pruebas necesarias para garantizar el correcto funcionamiento de la instalación.

8. Exportación inicial consistente a un punto en el tiempo (o SCN) en origen e importación en destino.

9. Activación de la entrega con GoldenGate en destino.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 19

Requisitos técnicos

Salvo cuando las tareas a realizar requieran la presencia del técnico en las

instalaciones del cliente, las actuaciones se realizarán de forma remota. Por

ello, el cliente deberá habilitar y garantizar al personal técnico el acceso remoto

a los sistemas y bases de datos a migrar y a los sistemas resultantes de la

consolidación.

Cuando las actuaciones deban realizarse en las oficinas del cliente, éste

dispondrá de un PC para realizar las labores de administración con el software

necesario instalado, o en su defecto, se tendrá acceso al propio servidor de la

base de datos.

Para la prestación del servicio, es necesario que el técnico designado disponga

de privilegios de administrador de las bases de datos, por lo que, en el

momento en que se vayan a realizar tareas que requieran la introducción de la

clave de administrador del servidor, deberá estar presente el personal del

Cliente que conozca la clave necesaria en cada caso o en su defecto el técnico

debe conocer dicha clave.

El técnico no se responsabiliza de los resultados provocados por cualquier

cambio de configuración, instalación de software o hardware o cualquier tipo de

corrección realizada por el cliente que puedan afectar al sistema objeto de los

trabajos si no ha habido recomendación expresa por parte del técnico para ser

realizados. Cualquier pérdida de datos, parada total o parcial del sistema

productivo o fallo del sistema provocado por esos cambios será

responsabilidad exclusiva del cliente.

Planificación

A continuación se describen el equipo de trabajo, plan de trabajo y la

planificación temporal del proyecto.

Descripción del equipo de trabajo

Un proyecto de estas características requiere una composición mixta de

responsables y técnicos tanto del Cliente como de la empresa consultora. El

éxito del mismo depende de la formación, experiencia e interacción de dicho

equipo mixto.

La composición del equipo de proyecto propuesta es la que se describe a

continuación:

Por parte del cliente:

Un (1) Responsable de Área Técnica. Esta persona realizará las funciones de interlocutor técnico con el administrador de base de datos. Tendrá la capacidad de tomar decisiones a nivel técnico, así

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 20

como de autorizar los acuerdos que se alcancen entre el técnico y el cliente.

Por parte del técnico de servicios:

Un (1) Administrador de Bases de datos Oracle con experiencia en proyectos de administración en entornos Oracle. Se encargará, en colaboración directa con el Responsable de Área Técnica del Cliente, de llevar a cabo las tareas descritas en la sección “Alcance del proyecto” y de la elaboración de los entregables.

Para garantizar el éxito del proyecto es necesario que exista una comunicación

efectiva entre los responsables del Cliente y los Administradores de bases de

datos. Es importante reducir la pérdida de productividad debido a las

comunicaciones en un proyecto, consiguiendo que el trabajo se realice en los

plazos estimados y con la calidad deseada. Para que esto sea posible, los

responsables del Cliente adscritos al proyecto deben implicarse en todo

momento, dedicando tiempo y esfuerzo a los requerimientos solicitados por el

equipo de consultores y agilizando el proceso de toma de decisiones.

Plan de trabajo

El Anexo I (Planificación temporal de los trabajos) detalla la planificación

temporal de los trabajos para los diversos equipos de trabajo.

Los trabajos se realizarán remotamente excepto en los casos que haya que

visitar las dependencias del Cliente, para la realización de entrevistas,

reuniones, planificación de tareas, etc. o si se estimase oportuno por alguna de

las partes.

La jornada laboral se realizará de acuerdo al siguiente horario: lunes a viernes

de 08:00h a 15:00 h salvo que la realización de algunas tareas requieran su

ejecución fuera del horario laboral.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 21

Anexo I. Planificación temporal del proyecto

A continuación se detallan las tareas a realizar para los distintos servicios y los

tiempos estimados para su ejecución:

Servicio de Análisis genérico previo a la migración

TAREA

Tiempo del

técnico

(horas)

Recopilación de datos del entorno actual de las bases de datos

DRAGO, APTAE y ROSS 3

Recopilación de información sobre las aplicaciones 6

Recopilación de información sobre la migración 12

Elaboración del informe final con la información recopilada y

conclusiones 4

TOTAL 25

Servicio de migración completa de las instancias de base de datos

Tarea

Tarea

Cliente

(horas)

Técnico

(horas)

PREPARATIVOS

Elaboración y envío de documento con los requisitos software y

hardware de los dos nodos del RAC, del almacenamiento externo y

de la infraestructura de red incluyendo servidor DNS e IPs. 0 2,4

Configuración de servidores, electrónica de red y configuración de

cabina de almacenamiento 4,8 2,4

Configuración del sistema operativo y parches en los dos nodos del

RAC 0 1,2

Creación de grupos, usuarios y rutas para la instalación 0 0,6

Modificaciones necesarias al servidor DNS 0,3 0

INSTALACIÓN Y CONFIGURACIÓN DE ORACLE CLUSTERWARE

Comprobación de requisitos de hardware y software en ambos nodos

del RAC, lanzamiento de la herramienta de certificación del Cluster 0

0

2,1

0 Chequeo de almacenamiento externo y de la infraestructura de red

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 22

Tarea

Cliente

(horas)

Técnico

(horas)

incluyendo servidor DNS e IPs

Diseño de la configuración de almacenamiento en Oracle ASM 0 2,4

Configuración de ASMLIB 0 1,5

Instalación de Oracle ClusterWare en ambos nodos 0 2,25

Tareas post-instalación. Descarga y aplicación de parches post-

instalación y ajuste del sistema 0 2,4

Reunión con el cliente para el diseño de la política de copias de

seguridad 2 2

INSTALACIÓN Y CONFIGURACIÓN DEL SOFTWARE DE BD Y ORACLE

GOLDENGATE

Lanzamiento, comprobación y ajustes con la herramienta Cluster

Verification Utility para RAC 0 2,4

Instalación del software de base de datos Oracle 0 1,5

Descarga e instalación de parches al software de base de datos

Oracle 0 1,65

Configuración de Oracle Net en el RAC 0 0,9

Preparativos para la instalación de Oracle GoldenGate. Identificación

y validación de arquitectura y requisitos. Revisión del estado de los

sistemas origen y el nuevo destino. Recopilación de los elementos

para la instalación (usuarios en sistemas involucrados, componentes

de GoldenGate a desplegar, estado de las bases de datos),

documentación 0 7,2

Instalación de GoldenGate en RAC: Despliegue de componentes

Oracle GoldenGate, configuración de Oracle GoldenGate en entorno

RAC, pruebas de funcionamiento, documentación 0 14,4

CREACIÓN, PARAMETRIZACIÓN Y MIGRACIÓN DE INSTANCIAS DE BBDD ORACLE

(ROSS)

ROSS. Estudio de parámetros de la base de datos, extracción de

información y scripts de creación de tablespaces 0 1,2

ROSS. Creación de la base de datos ROSS de dos instancias en el

RAC usando DBUA 0 2,1

ROSS. Aplicación de scripts post-patch a la instancia base de datos 0 1,5

ROSS. Instalación de GoldenGate en servidor origen: Despliegue de

componentes de Oracle GoldenGate, configuración de Oracle

GoldenGate para lectura de la base de datos origen. Configuración

de la entrega de datos en el RAC. Pruebas de funcionamiento, 0 7,2

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 23

Tarea

Cliente

(horas)

Técnico

(horas)

documentación.

ROSS. Instanciación inicial en el RAC: Confirmación de captura

GoldenGate, exportación consistente de la base de datos a un

SCN/Punto del tiempo. Importación en el RAC. 0 7,2

ROSS. Activación réplica de ROSS en RAC: Activación de entrega

con GoldenGate en destino a SCN/Punto del tiempo determinado,

validación de resultados, documentación 0 7,2

ROSS. Monitorización del comportamiento de la BD, ajustes post-

importación 0 1,5

ROSS. Creación, prueba y lanzamiento de los scripts de copia de

seguridad, según la política definida 0 2,4

ROSS. Ajuste y prueba de las aplicaciones contra la base de datos

ROSS en el RAC 24 0

ROSS. Monitorización del comportamiento de la BD y ajustes finales 0 2,4

CREACIÓN Y PARAMETRIZACIÓN Y MIGRACIÓN DE INSTANCIAS DE BBDD ORACLE

(APTAE)

APTAE. Estudio de parámetros de la base de datos, extracción de

información y scripts de creación de tablespaces. 0 1,2

APTAE. Creación de la base de datos APTAE de dos instancias en el

RAC usando DBUA. 0 2,1

APTAE. Aplicación de scripts post-patch a la instancia base de datos. 0 1,5

APTAE. Instalación de GoldenGate en servidor origen: Despliegue de

componentes de Oracle GoldenGate, configuración de Oracle

GoldenGate para lectura de la base de datos origen. Configuración

de la entrega de datos en el RAC. Pruebas de funcionamiento,

documentación. 0 7,2

APTAE. Instanciación inicial en el RAC: Confirmación de captura

GoldenGate, exportación consistente de la base de datos a un

SCN/Punto del tiempo. Importación en el RAC. 0 14,4

APTAE. Activación réplica de APTAE en RAC: Activación de entrega

con GoldenGate en destino a SCN/Punto del tiempo determinado,

validación de resultados, documentación 0 7,2

APTAE. Monitorización del comportamiento de la BD, ajustes post-

importación. 0 1,5

APTAE. Creación, prueba y lanzamiento de los scripts de copia de

seguridad, según la política definida. 0 2,4

APTAE. Ajuste y prueba de las aplicaciones contra la base de datos 24 0

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 24

Tarea

Cliente

(horas)

Técnico

(horas)

ROSS en el RAC.

APTAE. Monitorización del comportamiento de la BD y ajustes

finales. 0 2,4

CREACIÓN Y PARAMETRIZACIÓN Y MIGRACIÓN DE INSTANCIAS DE BBDD ORACLE

(DRAGO)

DRAGO. Estudio de parámetros de la base de datos, extracción de

información y scripts de creación de tablespaces. 0 3

DRAGO. Creación de la base de datos DRAGO de dos instancias en

el RAC usando DBUA. 0 2,1

DRAGO. Aplicación de scripts post-patch a la instancia base de

datos. 0 1,5

DRAGO. Instalación de GoldenGate en servidor origen: Despliegue

de componentes de Oracle GoldenGate, configuración de Oracle

GoldenGate para lectura de la base de datos origen. Configuración

de la entrega de datos en el RAC. Pruebas de funcionamiento,

documentación. 0 14,4

DRAGO. Instanciación inicial en el RAC: Confirmación de captura

GoldenGate, exportación consistente de la base de datos a un

SCN/Punto del tiempo. Importación en el RAC, documentación 0 14,4

DRAGO. Activación réplica de DRAGO en RAC: Activación de

entrega con GoldenGate en destino a SCN/Punto del tiempo

determinado, validación de resultados, documentación 0 7,2

DRAGO. Monitorización del comportamiento de la BD, ajustes post-

importación. 0 2,4

DRAGO. Creación, prueba y lanzamiento de los scripts de copia de

seguridad, según la política definida. 0 2,4

DRAGO. Ajuste y prueba de las aplicaciones contra la base de datos

ROSS en el RAC. 24 0

DRAGO. Monitorización del comportamiento de la BD y ajustes

finales 0 2,4

Total horas: 79,2 169,8

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 25

Servicio de creación y puesta en marcha del servidor de contingencia

Tarea

Cliente

(horas)

Técnico

(horas)

PREPARATIVOS

Elaboración y envío de documento con los requisitos software y hardware

del servidor de contingencia 1

Configuración del servidor, electrónica de red y configuración de cabina

de almacenamiento (si procede) 8 1

Configuración del sistema operativo y parches en el servidor 0,5

Creación de grupos, usuarios y rutas para la instalación 0,5

INSTALACIÓN Y CONFIGURACIÓN DEL SOFTWARE DE BD Y ORACLE GOLDENGATE

Comprobación de requisitos de hardware y software y preparaciones

previas a la instalación 0,875

Instalación del software de base de datos Oracle 1,25

Descarga e instalación de parches al software de base de datos Oracle 1,375

Configuración de Oracle Net 0,625

Configuración de las rutas en disco para la ubicación de los archivos de

las tres instancias de BD 0,375

Creación, configuración y arranque de las tres instancias de BD 3

Instalación de GoldenGate: Despliegue de componentes Oracle

GoldenGate, configuración de Oracle GoldenGate, pruebas de

funcionamiento, documentación. 4

Configuración de Oracle GoldenGate en el RAC en modo lectura:

Despliegue de componentes de Oracle GoldenGate para la lectura de las

tres bases de datos, configuración para la entrega en el servidor de

contingencia, pruebas de funcionamiento, documentación. 4

Instanciación inicial de BD ROSS: Confirmación Captura GoldenGate,

exportación consistente de ROSS a un SCN/Punto del tiempo

determinado, importación en entorno de contingencia, documentación. 6

Activación de réplica de ROSS en nuevo entorno secundario: activación

de entrega con GoldenGate en destino a SCN/Punto en el tiempo

determinado, validación de resultados, documentación. 6

Instanciación inicial de BD APT-AE: Confirmación Captura GoldenGate,

exportación consistente de APT-AE a un SCN/Punto del tiempo

determinado, importación en entorno de contingencia, documentación. 6

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 26

Activación de réplica de BD APT-AE en nuevo entorno secundario:

activación de entrega con GoldenGate en destino a SCN/Punto en el

tiempo determinado, validación de resultados, documentación. 12

Instanciación inicial de BD DRAGO: Confirmación Captura GoldenGate,

exportación consistente de DRAGO a un SCN/Punto del tiempo

determinado, importación en entorno de contingencia, documentación. 12

Activación de réplica de BD DRAGO en nuevo entorno secundario:

activación de entrega con GoldenGate en destino a SCN/Punto en el

tiempo determinado, validación de resultados, documentación. 12

Total horas: 8 72,5

Aspectos que están fuera del alcance de esta propuesta

Este proyecto no incluye explícitamente:

Tareas no descritas en el apartado “Alcance del proyecto”.

El mantenimiento de hardware, sistema operativo, conectividad y electrónica de red y de cualquier software/hardware no mencionado explícitamente en la propuesta, que deberá ser contratado en cada caso con la empresa proveedora de estos elementos.

La tarea de habilitar y garantizar que se cumplan los requisitos técnicos previos necesarios para la realización del servicio descrito en esta propuesta, los cuales se reflejan en el apartado “Requisitos técnicos

Condiciones generales

La presente estimación ha sido realizada en función del grado de conocimiento

actual de las necesidades y los requisitos planteados por el cliente. Las

condiciones recogidas en este documento podrán ser modificadas si los

objetivos se amplían o concretan de forma diferente a los propuestos.

Esta oferta mantendrá su validez durante el plazo de 30 días.

Queda expresamente excluida de la cuantificación de esta propuesta cualquier

otra función o tarea no descrita en el apartado “Alcance del proyecto”. En el

caso de que se planteara a lo largo de la ejecución del Proyecto el desarrollo

de nuevos contenidos, éstos serían estudiados individualmente y objeto de

ofertas independientes.

Será responsabilidad del Cliente, la realización de las tareas de revisión y

aprobación del servicio una vez realizado. A todos los efectos, se dará por

aceptado el trabajo a plena conformidad pasada un mes de la fecha de revisión

pactada.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 27

Como forma de aceptación, se ruega remitir este documento, una vez firmado y

sellado en todas sus páginas y en el espacio indicado a continuación.

Condiciones económicas

De acuerdo con la composición del Equipo de Proyecto propuesto y el detalle de

la Descripción del Servicio a realizar, se detallan a continuación los importes de

los distintos servicios ofertados.

CONCEPTOS Horas

estimadas

Coste

hora (€)

Importe

Estimado (sin

IGIC)

Análisis genérico previo a la migración 25 63,62 1.590,50 €

Migración completa de las bases de datos

DRAGO, ROSS y APTAE a un RAC 11gR2 de 2

nodos Standard Edition de Oracle

170 63,62 10.815,40 €

Creación y puesta en marcha de un servidor de

contingencia para las bases de datos DRAGO,

ROSS y APTAE

70 63,62 4.453,40 €

Cualquier ampliación o modificación del Alcance del Proyecto será evaluada y

presupuestada de forma independiente a esta oferta, incluyendo los gastos de

desplazamiento que estos servicios ocasionen.

Los trabajos darán comienzo en la fecha acordada. Las tareas descritas en la

Planificación Temporal de los Trabajos se coordinarán con el cliente con una

antelación mínima de 7 días.

El Servicio se prestará como norma general en horario laboral de trabajo, de

lunes a viernes de 08:00 h a 15:00 h., salvo los casos en los que expresamente

se pacte lo contrario.

Condiciones legales

El técnico se compromete al cumplimiento de lo dispuesto en las leyes y

reglamentos en vigor sobre protección de datos.

Cuando de la ejecución del contrato se derive el tratamiento de datos de

carácter personal se respetará en su integridad la Ley Orgánica 15/1999, de 13

de diciembre, de Protección de Datos de Carácter Personal y su normativa de

desarrollo.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 28

Para el caso de que la contratación implique el acceso por parte del técnico a

datos de carácter personal de cuyo tratamiento sea responsable el cliente, el

técnico tendrá la consideración de encargado de tratamiento. Cuando finalice la

prestación contractual, los datos de carácter personal deberán ser destruidos o

devueltos a la entidad contratante responsable.

El técnico y el cliente formalizarán el contrato en los términos previstos en el

artículo 12.2 de la Ley Orgánica de Protección de Datos, la Ley Orgánica

15/1999 de 13 de diciembre.

CII18

Conocimiento de la normativa y la regulación de la informática en los ámbitos

nacional, europeo e internacional.

En el apartado “Normativa y legislación” se describe con detalle la normativa y

regulación que afecta a las tareas y resultados producidos por este Trabajo Fin de

Grado.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 29

Aportación al entorno socio-económico

Al tratarse de un trabajo orientado a un cliente específico, éste será el principal

beneficiario del resultado de este trabajo.

Podemos distinguir tres categorías en las que este trabajo ha aportado mejoras al

sistema existente: actualización y mejora del hardware, actualización del software y

reorganización y mejora de la infraestructura.

Actualización y mejora del hardware

En esta categoría, y debido a la actualización del hardware existente, en algunos

casos sustituyendo máquinas de casi una década de antigüedad, la aportación de este

trabajo se ha notado principalmente en el apartado del rendimiento y ahorro energético.

La incorporación de hardware de última generación al entorno de gestión de

bases de datos que, desde hace años persigue el aumento del rendimiento y la reducción

del consumo energético, tendrá un impacto directo en la velocidad a la que se realizarán

las consultas a la base de datos esperándose una substancial mejora en este último

apartado. En nuevo entorno posibilitará el incremento del número de accesos

simultáneos a la base de datos permitiendo la incorporación de nuevas aplicaciones o la

mejora de las existentes.

Tratándose de un proyecto de consolidación de bases de datos en el que se van a

integrar varias bases de datos que hasta ahora estaban alojadas en máquinas físicas

separadas y que quedarán consolidadas en tan sólo dos servidores, el proyecto

contribuye a la reducción de costes energéticos, de adquisición del hardware, de

soporte técnico y de gestión.

Actualización del software de gestión de bases de datos

La gran cantidad de mejoras que el software de gestión de bases de datos Oracle

en su versión 11g incorpora con respecto a las versiones 9i y 10g empleadas hasta ahora

en la organización justificarían por sí solas la migración. En ese sentido, el Trabajo

aporta al sistema existente de manera indirecta todas aquellas mejoras que se derivan

del cambio de versión del gestor de bases de datos.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 30

Como ventajas principales podemos destacar las siguientes:

Mejoras en el ajuste automático de memoria del gestor de bases de datos

incorporando la gestión automatizada de la PGA.

Introducción del Analizador de Rendimiento de SQL que permite crear

perfiles SQL cuyo objetivo es incrementar el rendimiento de las consultas.

Gestión de almacenamiento mediante Automatic Storage Management

(ASM) que posibilita el equilibrio de carga automatizado en el acceso al

almacenamiento.

Aumento del rendimiento del código PL/SQL en hasta un 100% y de un 10%

- 30% en el caso del lenguaje SQL al incorporar compilación nativa

automatizada.

Mejoras generalizadas en el rendimiento del CBO (Cost Based Optimizer), el

motor que determina la mejor ruta de acceso a los datos en la ejecución de

las consultas SQL.

Agrupación de conexiones del lado del servidor que permite una gestión más

eficiente de las mismas.

Repositorio de Diagnóstico Automático (ADR) en el que se centralizan todos

los errores de los distintos componentes del sistema y permiten una gestión

automatizada de los mismos.

Mejoras en la seguridad mediante la incorporación de nuevos mecanismos de

seguridad y reforzamiento de los existentes a varios niveles.

Mejoras en los algoritmos de ordenación.

Reorganización y mejora de la infraestructura

Con el objetivo de maximizar la inversión en hardware y software se ha

reorganizado la infraestructura para mejorar la seguridad y la alta disponibilidad de la

capa de acceso a la base de datos siendo esta la aportación más importante del Trabajo

al sistema existente.

Mediante la incorporación de Real Application Cluster (RAC) de Oracle, la alta

disponibilidad del sistema queda garantizada puesto que se dispone de dos nodos que

están constantemente sirviendo peticiones en paralelo. Si en algún momento alguna de

las máquinas cae, la máquina “superviviente” continúa dando soporte de base de datos

con la mínima interrupción. En este sentido el Trabajo aporta alta disponibilidad

“activo-activo” que permite maximizar el rendimiento del hardware adquirido y

contrasta con la solución de alta disponibilidad “activo-pasivo” existente hasta ahora.

Con el establecimiento de un mecanismo de contingencia totalmente

independiente del entorno principal, el trabajo aporta un nuevo nivel de protección

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 31

frente a caídas del sistema. No sólo se trata de disponer de una máquina física

independiente que soportará la carga de trabajo de la base de datos sino que el propio

almacenamiento de ésta está en una ubicación diferente. La sincronización entre las

bases de datos de producción y las de contingencia se realizará mediante el software

Oracle GoldenGate.

Finalmente, el trabajo aporta un esquema de copias de seguridad mejorado que

viene a sustituir al existente y que garantizará la recuperación completa del sistema en

caso de desastre (restauración física) y que permitirá también las restauraciones

parciales que sean necesarias (restauración lógica).

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 32

Normativa y legislación

Un análisis de las legislaciones que se han promulgado en diversos países arroja

que las normas jurídicas que se han puesto en vigor están dirigidas a proteger la

utilización abusiva de la información reunida y procesada mediante el uso de

computadoras, e incluso en algunas de ellas se ha previsto formar órganos

especializados que protejan los derechos de los ciudadanos amenazados por los

ordenadores.

Desde hace aproximadamente diez años la mayoría de los países europeos han

hecho todo lo posible para incluir dentro de la ley, la conducta punible penalmente,

como el acceso ilegal a sistemas de cómputo o el mantenimiento ilegal de tales accesos,

la difusión de virus o la interceptación de mensajes informáticos.

En la mayoría de las naciones occidentales existen normas similares a los países

europeos. Todos estos enfoques están inspirados por la misma de preocupación de

contar con comunicaciones electrónicas, transacciones e intercambios tan confiables y

seguros como sea posible.

Dar un concepto sobre delitos informáticos no una labor fácil y esto en razón de

que su misma denominación alude a una situación muy especial, ya que para hablar de

"delitos" en el sentido de acciones tipificadas o contempladas en textos jurídico-

penales, se requiere que la expresión "delitos informáticos" este consignada en los

códigos penales, lo cual en nuestro país, al igual que en muchos otros, no ha sido objeto

de tipificación aún; sin embargo, muchos especialistas en derecho informático emplean

esta alusión a los efectos de una mejor conceptualización.

Normativa y regulación de la información en el ámbito internacional

En el contexto internacional, son pocos los países que cuentan con una

legislación apropiada. Entre ellos, destacan, Estados Unidos, Alemania, Austria, Gran

Bretaña, Holanda, Francia, España, Argentina y Chile.

Por esta razón a continuación se mencionan algunos aspectos relacionados con la

ley en los diferentes países, así como con los delitos informáticos que persigue.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 33

Estados Unidos

Este país adoptó en 1994 el Acta Federal de Abuso Computacional que modificó

al Acta de Fraude y Abuso Computacional de 1986.

Con la finalidad de eliminar los argumentos hiper-técnicos acerca de qué es y

que no es un virus, un gusano, un caballo de Troya y en que difieren de los virus, la

nueva acta proscribe la transmisión de un programa, información, códigos o comandos

que causan daños a la computadora, a los sistemas informáticos, a las redes,

información, datos o programas. La nueva ley es un adelanto porque está directamente

en contra de los actos de transmisión de virus.

Asimismo, en materia de estafas electrónicas, defraudaciones y otros actos

dolorosos relacionados con los dispositivos de acceso a sistemas informáticos, la

legislación estadounidense sanciona con pena de prisión y multa, a la persona que

defraude a otro mediante la utilización de una computadora o red informática.

En el mes de Julio del año 2000, el Senado y la Cámara de Representantes de

este país, tras un año largo de deliberaciones, establece el Acta de Firmas Electrónicas

en el Comercio Global y Nacional. La ley sobre la firma digital responde a la necesidad

de dar validez a documentos informáticos, mensajes electrónicos y contratos

establecidos mediante Internet, entre empresas (para el B2B) y entre empresas y

consumidores (para el B2C).

Alemania

Este país sancionó en 1986 la Ley contra la Criminalidad Económica, que

contempla los siguientes delitos:

• Espionaje de datos.

• Estafa informática.

• Alteración de datos.

• Sabotaje informático.

Austria

La Ley de reforma del Código Penal, sancionada el 22 de Diciembre de 1987,

sanciona a aquellos que con dolo causen un perjuicio patrimonial a un tercero

influyendo en el resultado de una elaboración de datos automática a través de la

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 34

confección del programa, por la introducción, cancelación o alteración de datos o por

actuar sobre el curso del procesamiento de datos.

Además contempla sanciones para quienes cometen este hecho utilizando su

profesión de especialistas en sistemas.

Gran Bretaña

Debido a un caso de hacking en 1991, comenzó a regir en este país la Computer

Misuse Act (Ley de Abusos Informáticos). Mediante esta ley el intento, exitoso o no, de

alterar datos informáticos es penado con hasta cinco años de prisión o multas. Esta ley

tiene un apartado que específica la modificación de datos sin autorización.

Holanda

El 10 de Marzo de 1993 entró en vigencia la Ley de Delitos Informáticos, en la

cual se penaliza los siguientes delitos:

• El hacking.

• El preaking (utilización de servicios de telecomunicaciones evitando el

pago total o parcial de dicho servicio).

• La ingeniería social (arte de convencer a la gente de entregar información

que en circunstancias normales no entregaría).

La distribución de virus.

Francia

En enero de 1988, este país dictó la Ley relativa al fraude informático, en la que

se consideran aspectos como:

• Intromisión fraudulenta que suprima o modifique datos.

• Conducta intencional en la violación de derechos a terceros que haya

impedido o alterado el funcionamiento de un sistema de procesamiento

automatizado de datos.

• Conducta intencional en la violación de derechos a terceros, en forma directa

o indirecta, en la introducción de datos en un sistema de procesamiento

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 35

automatizado o la supresión o modificación de los datos que éste contiene, o

sus modos de procesamiento o de transmisión.

• Supresión o modificación de datos contenidos en el sistema, o bien en la

alteración del funcionamiento del sistema (sabotaje).

Chile

Chile fue el primer país latinoamericano en sancionar una Ley contra delitos

informáticos, la cual entró en vigencia el 7 de junio de 1993. Esta ley se refiere a los

siguientes delitos:

• La destrucción o inutilización de los de los datos contenidos dentro de una

computadora es castigada con penas de prisión. Asimismo, dentro de esas

consideraciones se encuentran los virus.

• Conducta maliciosa tendiente a la destrucción o inutilización de un sistema

de tratamiento de información o de sus partes componentes o que dicha

conducta impida, obstaculice o modifique su funcionamiento.

• Conducta maliciosa que altere, dañe o destruya los datos contenidos en un

sistema de tratamiento de información.

Normativa y regulación de la informática en el ámbito europeo

Hasta ahora, el principal esfuerzo europeo por regular el tema de los delitos

informáticos dio como resultado el “Convenio sobre la Ciberdelincuencia", de 21 de

noviembre de 2001. Este documento fue firmado por los representantes de cada país

miembro del Consejo de Europa, aunque su eficacia depende de su posterior refrendo

por los órganos nacionales de cada país firmante.

El “Convenio sobre la Ciber-delincuencia" permitió la definición de los delitos

informáticos y algunos elementos relacionados con éstos, tales como “sistemas

informáticos", “datos informáticos", o “proveedor de servicios".

Estos delitos informáticos fueron clasificados en cuatro grupos:

• Delitos contra la confidencialidad, la integridad y la disponibilidad de los

datos y sistemas informáticos.

o Acceso ilícito a sistemas informáticos.

o Interceptación ilícita de datos informáticos.

o Interferencia en el sistema mediante la introducción, transmisión,

provocación de daños, borrado, alteración o supresión e estos.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 36

o Abuso de dispositivos que faciliten la comisión de delitos

• Delitos informáticos.

o Falsificación informática que produzca la alteración, borrado o

supresión de datos informáticos que ocasionen datos no auténticos.

o Fraudes informáticos.

• Delitos relacionados con el contenido.

o Delitos relacionados con la pornografía infantil.

• Delitos relacionados con infracciones de la propiedad intelectual y derechos

afines.

Conviene destacar que en el “Convenio sobre la Ciberdelincuencia" se

encomienda a cada parte que tome las medidas necesarias para tipificar como delito en

su derecho interno cada uno de los apartados descritos en cada categoría.

En la Disposición 14221 del BOE núm. 226 de 2010, encontramos el

Instrumento de Ratificación del Convenio sobre la Ciberdelincuencia, hecho en

Budapest el 23 de noviembre de 2001.

Normativa y regulación de la informática en el ámbito nacional

Leyes y Decretos Ley.

Ley Orgánica de Protección de datos de carácter personal: régimen sancionador

aplicable (BOE no298 de 14/XII/99 que publicó la Ley Org. 15/1999 de 13 de Dic.)

Objeto: Proteger y garantizar las libertades públicas y derechos fundamentales

de las personas, especialmente su HONOR e INTIMIDAD personal y familiar.

Aspectos de interés: Serán responsables: “Los responsables de los ficheros o de

los tratamientos" y “los encargados de los tratamientos" .

Tipos de Infracciones:

• Leves (art.44.2): multas de 100.000 a 10M pts. Ejemplo: rectificar datos o no

comunicarlos a la Agencia de Protección Datos.

• Graves (art.43): multas de 10M a 50M pts. Ejemplo: no mantener sistemas

de seguridad, obstrucción a inspección, uso en provecho propio, ….

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 37

• Muy Graves (art.45): multas de 50M a 100M (“Conductas reprochables") Ej.

Vulnerar a propósito el secretismo, etcétera.

Ley 7/1998 de 13 de Abril que regula las condiciones generales de contratación.

R.D. 1906/1999 de 17/XII que regula la contratación telefónica.

R.D. Ley 14/1999 de 17/XII sobre Firma Electrónica (BOE No224 de 18/XII)

Firma electrónica: Dispositivo electrónico que permite la identificación del

signatario de las operaciones realizadas por Internet.

Identifica: El firmante (autentificación) y Evita el retracto (no repudio).

Código penal

Ley Orgánica 10/1995 de 23/XI .

Tipifica delitos y faltas por el uso de la informática, concretamente contra la

Intimidad, Patrimonio, Socioeconómicos y Propiedad Intelectual.

Título X: “Delitos contra la intimidad, derecho a la propia imagen y la

inviolabilidad del Domicilio".

• Apoderarse de papeles, e-mails, mensajes, otros, ….

• Cracks: delitos .

• Obtener datos de terceros, ….

Recomendaciones de la Agencia de Protección de Datos.

Información en la recogida de datos

• Cuando suministre datos personales a cualquier organización (proveedores de

acceso, proveedores de contenido, vendedores a través de comercio electrónico, etc.)

sea consciente de a quién se los facilita y con qué finalidad.

• Procure averiguar la política de sus proveedores y administradores de listas y

directorios en lo que se refiere a venta, intercambio o alquiler de los datos que les

suministra. Solicite que sus datos personales no vayan unidos a su identificación de

acceso a Internet.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 38

Finalidad para la que se recogen los datos

• Desconfíe si los datos que le solicitan son excesivos para la finalidad con la

que se recogen o innecesarios para el servicio que se le presta.

• Tenga en cuenta que cuando introduce su dirección de correo electrónico en un

directorio, lista de distribución o grupo de noticias, dicha dirección puede ser recogida

por terceros para ser utilizada con una finalidad diferente, como por ejemplo, remitirle

publicidad no deseada.

• Cuando navegue por Internet, sea consciente de que los servidores Web que

visita pueden registrar tanto las páginas a las que accede como la frecuencia y los temas

o materias por las que busca, aunque no le informen de ello.

• Asimismo, su pertenencia a determinados grupos de noticias y listas de

distribución puede contribuir a la elaboración de perfiles más o menos detallados sobre

su persona. En el caso de que no desee dejar constancia de sus actividades en la red,

utilice los mecanismos para preservar el anonimato que se describen en el cuerpo de

este documento.

Seguridad en el intercambio de datos

• Utilice, siempre que sea posible, las últimas versiones de los programas

navegadores, ya quecada vez suelen incorporar mejores medidas de seguridad.

• Considere la posibilidad de activar en dichos programas las opciones que

alerten sobre los intercambios de datos no deseados y no rellene aquellos datos que no

desee hacer públicos (por ejemplo, dirección de correo electrónico, nombre, apellidos,

etc.).

• No realice transacciones comerciales electrónicas a través de proveedores con

sistemas inseguros o no fiables. Consulte el manual de su navegador para averiguar

cómo informa de que se ha establecido una conexión con un servidor seguro.

• Recuerde que existen sistemas de dinero electrónico que preservan el

anonimato de sus compras en Internet.

• Utilice los mecanismos de seguridad que tenga a su alcance para proteger sus

datos de accesos no deseados. El medio más fiable para conseguirlo es el cifrado de los

mismos.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 39

• Salvo que se utilicen mecanismos de integridad, autenticación y certificación

(firma digital, notarios electrónicos, etc.) no confíe ciegamente en que la persona u

organización que le remite un mensaje es quien dice ser y en que el contenido del

mismo no se ha modificado, aunque esto sea así en la inmensa mayoría de las ocasiones.

• Siempre que se le soliciten datos personales que no esté obligado legalmente a

suministrar, sopese los beneficios que va a recibir de la organización que los recoge

frente a los posibles riesgos de utilización irregular de los mismos.

• Ante cualquier duda sobre la legalidad de la utilización de sus datos de carácter

personal, póngase en contacto con la Agencia de Protección de Datos.

Protección jurídica de programas de ordenador (piratería informática)

• El Real Decreto Legislativo 1/1996, por el que se aprueba el Texto Refundido

sobre Propiedad Intelectual, la protección jurídica de los programas de ordenador, antes

regulada por la Ley de Protección Jurídica de Programas de Ordenador y por la Ley de

Propiedad Intelectual, crea un marco jurídico en contra de la piratería informática.

• El Texto Refundido desarrolla una serie de medidas para combatir la piratería

informática, como la posibilidad de que los fabricantes de programas de ordenador

soliciten a la justicia española la realización de un registro sorpresa en empresas en las

que existan sospechas fundadas o evidencias de delito. España es uno de los países en

los que se puede acudir a esta medida cautelar. De esta manera se erradica la posibilidad

de que los presuntos infractores puedan destruir las pruebas existentes, lo cual,

indudablemente ocurrirá si se les notifica por adelantado la realización de un registro.

¿En qué casos se infringe la Ley?

• Al copiar o distribuir un programa de ordenador o la documentación que le

acompaña, incluidas aplicaciones, datos, códigos y manuales, sin permiso expreso o

licencia del propietario de los derechos de explotación.

• Al utilizar un programa sin la correspondiente licencia o autorización del

fabricante, con independencia de que se utilice en un solo ordenador o en varios de

forma simultánea.

• Al utilizar programas de ordenador en un número de copias superior al

autorizado por el fabricante en sus contratos o licencias de uso.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 40

• En empresas y demás organizaciones, al fomentar, consciente o

inconscientemente, permitir, obligar o presionar a los empleados a realizar o distribuir

copias no autorizadas del programa.

• Al efectuar copias no autorizadas porque alguien lo requiere u obliga a ello. Al

ceder o prestar el programa de forma que pueda ser copiado o al copiarlo mientras está

en su posesión en calidad de cedido o prestado.

• Al crear, importar, poseer o negociar con artículos destinados a burlar o

neutralizar cualquier medio técnico aplicado para proteger el programa de ordenador.

Medidas judiciales

Si finalmente existe evidencia de delito, las medidas judiciales que pueden

adoptarse son:

• Solicitar al Juez un registro sorpresa de las instalaciones del presunto infractor,

tanto por la vía civil, como por la penal.

• Solicitar al Juez la adopción urgente de medidas cautelares de protección.

• Exigir indemnizaciones acordes con los daños materiales y morales causados.

• El cierre del centro de actividad del infractor.

• El secuestro de todos aquellos medios destinados a suprimir los dispositivos

técnicos que protegen un programa desarrollado y comercializado por un

fabricante de programas.

Licencias de software

En el apartado de licenciamiento del software empleado para este Trabajo, cabe

distinguir dos categorías: el del licenciamiento de los productos de software de Oracle y

el del Sistema Operativo elegido para el entorno: Oracle Linux 6.

En el caso del licenciamiento del software de Oracle, se ha trabajado codo a

codo con el fabricante tanto en la elección de los productos Oracle a usar como en la

verificación del correcto licenciamiento de éstos. En este caso se ha tomado como guía

el documento proporcionado por el fabricante y que puede consultarse en la siguiente

URL: http://www.oracle.com/us/corporate/pricing/databaselicensing-070584.pdf

Oracle España ha estado informado en todo momento sobre las configuraciones

de software y hardware empleadas y ha validado su correcto licenciamiento. Este

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 41

software está sujeto a las leyes de propiedad intelectual descritas anteriormente en este

documento.

En el caso del Sistema Operativo, Oracle Linux 6 está distribuido gratuitamente

por Oracle bajo licencia GPL (GNU General Public License).

La licencia GNU declara que el software protegido por esta licencia es Software

Libre y está protegido de intentos de apropiación que restrinjan las libertades de los

usuarios. Éstos podrán usar, compartir y modificar el software a voluntad quedando el

software resultante cubierto también por la misma licencia GNU.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 42

Plan de trabajo

A continuación se describe el Plan de Trabajo a seguir para el desarrollo de este

Trabajo de Fin de Grado.

Fase 1. Estudio del entorno actual

Estudio del entorno hardware y software actual para la gestión de bases de datos

identificando deficiencias y necesidades.

Elaboración de un listado de requisitos básicos para la solución de la

problemática presentada.

Documentación.

Fase 2. Estudio de las soluciones existentes en el mercado

Identificación de las distintas soluciones hardware y software existentes en el

mercado que cumplan, como mínimo, con los requisitos básicos identificados en

la fase anterior.

Contraste de las distintas soluciones encontradas identificando la más apropiada

para el entorno.

Documentación.

Fase 3. Planificación de la instalación y migración

Elaboración de un plan de ejecución que detalle todas las tareas a realizar tanto

para la instalación del software y del hardware como para la posterior migración

al nuevo entorno.

Documentación.

Fase 4. Instalación y configuración del software y hardware

Instalación y configuración del hardware necesario para implantar la solución

elegida en la fase anterior. Posiblemente la instalación la realice el propio

vendedor.

Instalación y configuración del software necesario:

o Sistemas operativos

o Software del gestor de bases de datos

o Software de clúster

o Software para la migración inicial y sincronización con el entorno de

contingencia

o Software para la gestión de las copias de seguridad.

Documentación.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 43

Fase 5. Establecimiento y prueba del esquema de copias de seguridad

Creación y establecimiento del esquema de copias de seguridad.

Simulación de casos de desastre y pruebas de restauración.

Documentación.

Fase 6. Migración al nuevo entorno

Migración progresiva y escalonada de los distintos esquemas de las bases de

datos origen al entorno destino:

o Sincronización inicial entre la base de datos origen y el entorno destino

del esquema o esquemas de base de datos asociados a una determinada

aplicación.

o Pruebas de la aplicación accediendo al entorno destino.

o Sincronización definitiva de los esquemas origen y destino.

o Ejecución definitiva de las aplicaciones usando los esquemas del entorno

destino.

Seguimiento del proceso de migración identificando y corrigiendo los distintos

problemas que vayan surgiendo.

Documentación.

Fase 7. Establecimiento y pruebas del entorno de contingencia

Creación del entorno de contingencia.

Establecimiento de la sincronización del entorno de producción con el entorno

de contingencia.

Pruebas de desastre desviando el entorno de producción al de contingencia y

vuelta atrás.

Documentación.

Fase 8. Conclusiones

Elaboración de un informe de conclusiones.

Documentación.

Fase 9. Finalización del informe del TFG y preparación de la defensa

• Retoques finales del informe del TFG.

Elaboración del material para la defensa del TFG.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 44

Análisis

Las primeras tareas acordadas con el cliente fueron la realización de un estudio

de la situación actual y la concertación de una serie de entrevistas con ésta para conocer

de primera mano los requerimientos de la plataforma a corto y medio plazo.

A partir del estudio del entono actual, de los requisitos de productos Oracle de

las distintas aplicaciones en funcionamiento, de la estimación de crecimiento de la

actividad en las bases de datos existentes y de entrevistas con el Cliente, se determinó

la configuración de hardware y de software adecuados para las necesidades éste.

A continuación se detallan los requisitos mínimos de hardware necesarios para la

implantación de un entorno de bases de datos en RAC junto con una máquina que

actuará como servidor de contingencia.

Se describirá en primer lugar la arquitectura de software propuesta para

posteriormente ir detallando los componentes hardware mínimos necesarios para

implementar con éxito dicha arquitectura justificando en todo momento las

recomendaciones realizadas. Finalmente se mostrará una tabla resumen la configuración

mínima necesaria.

En el contexto de este documento se entiende por “requisitos mínimos” el

hardware y software necesario para implementar la solución de alta disponibilidad y

contingencia propuesta de tal forma que sea capaz de soportar la carga de trabajo

observada actualmente en las bases de datos a migrar y suponiendo un incremento

futuro de ésta en hasta un 25%. El Cliente podrá adquirir hardware o software de

prestaciones superiores a los mínimos recomendados si así lo estima necesario.

Requerimientos de software

En entrevistas previas, el Cliente nos expresó la necesidad de contar con un

entorno de base de datos Oracle en Alta Disponibilidad y con un mecanismo de

Contingencia.

Para la implementación de la Alta Disponibilidad de las bases de datos se

propone la tecnología Oracle RAC 11gR2. Una solución de base de datos Oracle en

clúster consolidada en el mercado y de probada eficacia.

Se propone instalar un RAC de dos nodos en el que se consolidarán las bases de

datos actualmente ubicadas en máquinas independientes. Siempre que al menos una de

las instancias esté arriba, se continuará dando servicio de esa base de datos. Es decir, si

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 45

la instancia APTORA1 está caída pero APTORA2 no, se continuará dando el servicio

para todas las bases de datos consolidadas.

El hecho de tener las instancias de cada base de datos distribuidas de esta forma

entre los dos nodos garantiza que si un servidor cae, el otro podrá seguir dando servicio

consiguiendo, por lo tanto, el objetivo de la alta disponibilidad.

Se estudiaron los requisitos de las tecnologías de bases de datos Oracle de las

aplicaciones existentes en el entorno actual y se pudo determinar que estaban en uso (o

se habían usado previamente) las siguientes opciones de la versión Enterprise en las

distintas bases de datos:

• Oracle Spatial (sólo en la base de datos DRAGO)

• Application Server Configuration Pack

• Application Server Diagnostics Pack

• Database Configuration Pack

• Database Diagnostics Pack

• Database Tuning Pack

En reuniones con el Cliente éste nos indicó que la opción “Spatial” estaba en uso

en una aplicación que ya prácticamente no se usa y no será necesario migrar. Así mismo

nos indicó que pueden prescindir del uso de los Packs del Enterprise Manager y que no

prevé a medio plazo el uso de características adiciones de la base de datos.

Dado que no existen requerimientos técnicos presentes y futuros por parte de las

aplicaciones para usar características de la versión Enterprise y que, tras analizar los

requisitos de procesamiento actuales y los esperados a medio plazo, es suficiente con

tener un RAC de dos nodos (siempre que la configuración del hardware sea la

adecuada), el estudio de requisitos mínimos asumirá la implantación de la versión

Standard Edition de base de datos Oracle en RAC.

Para la implementación de la Contingencia se propone disponer de un servidor

adicional, también con licencia Standard Edition Oracle, que estará sincronizada casi en

tiempo real con la base de datos de producción mediante el producto Oracle Goldengate.

Oracle dispone de otro producto robusto y suficientemente probado en el

mercado para realizar la sincronización entre el entorno de producción y el de

contingencia llamado Oracle DataGuard. Salvo la característica denominada “Active

DataGuard” empleada en circunstancias muy específicas, la tecnología DataGuard no

requiere licenciamiento adicional pero requiere disponer de licencias Enterprise de

Oracle.

En cualquier caso, por requerimientos de licenciamiento, e independientemente

del tipo de sincronización implementado entre Producción y Contingencia, será

necesario licenciar el software de base de datos Oracle en el servidor de contingencia.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 46

Requerimientos de hardware

Según lo descrito en el apartado de Requerimientos del Software se propone

disponer de 3 servidores, dos para formar el RAC y uno para la contingencia.

A continuación se irán exponiendo los requisitos mínimos de los componentes

principales de los servidores necesarios para implementar la solución propuesta.

Procesador

Para la estimación de los requisitos de potencia del procesador se ha tomado

como base la capacidad de procesamiento actual de las máquinas en las que están

corriendo las bases de datos actuales obteniendo el índice “Passmark” de los

procesadores (http://www.cpubenchmark.net) y buscando una configuración con

procesadores actuales que eleve la capacidad de procesamiento.

En la tabla siguiente se muestra la configuración de procesamiento de los

servidores que alojan las bases de datos actuales:

CPU (actual)

CORES

TOTALES

HILOS /

CORE

FRECUEN

CIA PROCESADOR

INDICE

PASSMARK

DRAGO 8 1 2 2 x E5335 5104

ROSS 4 1 2 1 x E5335 2576

APTAE (64

bits) Virt. 2 1 2,67

0,33 x X5650 (virt

2 cores) 2623,83

10303,83

En el caso de APTAE se ha elegido un factor de 0,33 debido a que, a pesar de

estar en una máquina con procesador de seis núcleos sólo dos de ellos están disponibles

para la máquina virtual que tiene la base de datos.

En el licenciamiento por procesador para la Standard Edition la suma total del

número de sockets (libres o no) de cada uno de los servidores que forman parte del RAC

no puede ser superior a 4 y se licencia por procesador ocupado.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 47

Para obtener los menores costes de licenciamiento, además de cumplir con los

requisitos de licenciamiento, se debe tender a usar el menor número de procesadores

que nos permita procesar holgadamente la carga de trabajo que las bases de datos vayan

a soportar.

Por lo expresado anteriormente se recomienda, como mínimo, disponer de tres

servidores con dos sockets cada uno y uno de ellos ocupado por un procesador multi-

núcleo. En la siguiente tabla se muestran, a modo de ejemplo, los índices “Passmark” de

cuatro posibles alternativas para la configuración de los dos nodos del RAC:

CPU (propuesta)

INDICE E5-2690

(2,90Ghz,

núcleos/16 hilos)

2.057$

INDICE E5-2670

(2,60Ghz, 8

núcleos/16 hilos)

1,552$

INDICE E5-2650

(2,0Ghz, 8

núcleos/16 hilos)

1107$

INDICE E5-2640

(2,50Ghz, 6

núcleos/12 hilos)

885$

SERVER 1 16538 15625 12927 10832

SERVER 2 16538 15625 12927 10832

33076 31250 25854 21664

Se ha resaltado la opción del procesador Intel Xeon E5-2670 como un buen

candidato de compra. En ese caso, el índice PassMark conjunto de los dos nodos del

RAC sería el triple del índice PassMark de los tres servidores actuales y cada nodo del

RAC tendría, por sí solo, un índice un 50% superior del conjunto estos tres servidores.

En cuanto al servidor de contingencia se propone una máquina con dos sockets y

un procesador de 8 núcleos. Una opción podría ser la mostrada en la siguiente tabla:

CPU (propuesto)

INDICE E5-2670

( 2,60Ghz, 8 núcleos/16 hilos)

1,552$

SERVER 3 (Contingencia) 15625

El servidor de contingencia que, llegado el caso de desastre, soportaría tres

instancias de base de datos, tiene un índice PassMark que es un 50% superior al índice

conjunto de los tres servidores actuales.

Nótese que al limitarnos a 1 procesador por servidor hemos limitado el número

de licencias Processor Standard Edition de Oracle a 3.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 48

Memoria RAM

Para la estimación de los requisitos de memoria se ha tomado como base las

recomendaciones de los asesores de memoria de las distintas instantáneas StatsPack

recogidas en las tres bases de datos a lo largo del período estudiado:

MEMORIA BD

(GB)

SGA

(advisor)

PGA

(advisor)

large pool

(advisor)

shared pool

(advisor)

DRAGO 3,6 1,5 0,5234375 0,75

ROSS 0,922851563 0,244140625 0 0,390625

APTAE (64 bits) 0,87890625 0,390625 0 0,25

En el caso de DRAGO y ROSS, y siguiendo las recomendaciones de Oracle, se

ha estimado la duplicación del tamaño de la área de memoria “shared pool” y “large

pool” al tratarse de una migración de 32 a 64 bits (APTAE ya está en 64 bits).

Así mismo se ha estimado un crecimiento del 25% de las necesidades de

memoria a medio plazo. De esta forma se han obtenido las necesidades de memoria

SGA y PGA totales para las tres instancias:

MEMORIA BD (GB)

SGA (corrigiendo shared) SGA (corrigiendo large) SGA (+25%) PGA (+25%)

DRAGO 4,35 4,8734375 6,091796875 1,875

ROSS 1,313476563 1,313476563 1,641845703 0,305175781

APTAE (64 bits) 0,87890625 0,87890625 1,098632813 0,48828125

8,832275391 2,668457031

Siguiendo las recomendaciones de Oracle, y disponiendo de un RAC de 2 nodos,

necesitaríamos la mitad del tamaño total de la SGA en cada nodo + 15% de “overhead”

del RAC y exactamente la mitad de la PGA total para cada nodo.

Reservamos un 20% de la capacidad de memoria empleada por Oracle para el

Sistema Operativo.

El RAC de la Standard Edition obliga a emplear el gestor de almacenamiento en

cluster de Oracle en vez de cualquier otro mecanismo de terceros: Oracle ASM

(Automatic Storage Management). ASM levanta una instancia especial de Oracle en

cada nodo (además de las instancias normales de las bases de datos que tengamos en el

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 49

RAC) que tiene mínimo impacto en los requisitos de procesamiento pero su peso si es

relativamente importante en cuanto al consumo de memoria. Esto, unido a que los

procesos de mantenimiento del Cluster de Oracle consumen bastante memoria

(especialmente desde la versión 11.2 en adelante), nos ha llevado a reservar 1,5 GB de

RAM para el “clusterware” en cada nodo del RAC.

Con todo esto, los requisitos mínimos de memoria para los dos nodos del RAC

serían los siguientes:

MEMORIA SRV

(SGA

TOTAL/2)

+15%

PGA TOTAL / 2 Sist.

Operativo

Clusterware (incl.

ASM) Memoria Total

NODO 1 RAC 5,07855835 1,334228516 1,282557373 1,5 9,195344238

NODO 2 RAC 5,07855835 1,334228516 1,282557373 1,5 9,195344238

CONTINGENCIA 8,832275391 2,668457031 2,300146484 0 13,80087891

Que podríamos redondear a 16GB por servidor insistiendo en que esta sería la cantidad

de memoria mínima requerida.

Si opcionalmente se decidiera prescindir (total o parcialmente) del mecanismo

de conexión mediante “shared server” por motivos de rendimiento y aprovechando la

infraestructura del RAC, podría ser preciso ampliar los requisitos de memoria a 32 o

incluso 48GB.

Almacenamiento

Nodos del RAC. Almacenamiento local

En el caso de los nodos del RAC la mayor parte del almacenamiento necesario

para la gestión de la base de datos va a ser externo y estará ubicado en una cabina de

almacenamiento.

El almacenamiento local estará dedicado principalmente al software de base de

datos, al software de clúster, al sistema operativo y a los ficheros de logs y de

configuración local de cada instancia de base de datos Oracle y de la instancia ASM de

cada nodo. Para este tipo de almacenamiento, en cada nodo del RAC, bastaría con 2

discos duros locales dispuestos en RAID 1 dando una capacidad neta de como mínimo

256GB.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 50

Nodos del RAC. Almacenamiento externo

En un RAC de Oracle casi todo el almacenamiento necesario es externo a la

máquina, está compartido entre todos los nodos del RAC y su gestión se lleva a cabo

obligatoriamente en el RAC Standard Edition mediante Oracle ASM.

Comenzamos por obtener los requisitos de almacenamiento de los ficheros de

datos actuales distinguiendo entre el almacenamiento propio de la base de datos

(tablespaces SYSTEM, SYSAUX, UNDO y temporales) y el de los distintos esquemas

de la misma (resto). Un resumen de los datos recopilados se muestra en la siguiente

tabla:

DATAFILES (GB)

TEMP

UNDO

(x2) SYSTEM SYSAUX RESTO

DRAGO 21,1416016 47,1347656 1,20507813 1,5 411

ROSS 1 11,3867188 0,56640625 1,234375 23,9921875

APTAE (64 bits) 19,1142578 7,55859375 0,48828125 0,52734375 92,4501953

En el caso de la base de datos DRAGO, al ser 9i, no existe el tablespace

SYSAUX por lo que se ha estimado de manera “ficticia” el tamaño que ocuparía su

tablespace SYSAUX.

En el caso del tablespace de UNDO se ha duplicado el valor recogido de las

bases de datos actuales porque en RAC cada una de las dos instancias tiene su propio

tablespace de UNDO.

Si estimamos un crecimiento de los requerimientos de espacio de un 15% para

los ficheros de datos del sistema y un 25% para los ficheros de datos de los esquemas de

usuario podemos tener los totales estimados para el almacenamiento:

DATAFILES (GB)

TOTAL SISTEMA (+15%) RESTO (+25%) TOTAL

DRAGO 70,98144531 513,75 584,731445

ROSS 14,1875 29,99023438 44,1777344

APTAE (64 bits) 27,68847656 115,5627441 143,251221

772,1604

Por otra parte, y a partir de la observación de la cantidad de información de

REDO generada por las bases de datos actualmente, se ha estimado la cantidad de

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 51

archivelogs generados a diario. Suponiendo que se vayan a mantener en disco los

archivelogs de una semana y estimando un crecimiento a medio plazo de un 10% de la

cantidad de REDO generada, obtenemos los requisitos de almacenamiento para la

información de REDO que se muestran en la siguiente tabla:

REDO (GB)

DIARIO SEMANAL SEMANAL (+10%)

DRAGO 1,2 8,4 9,24

ROSS 0,146484375 1,025390625 1,127929688

APTAE (64 bits) 2,5 17,5 19,25

29,61792969

Finalmente se ha supuesto que se almacenará en disco al menos una copia de

seguridad lógica y otra física (con RMAN).

Se han tomado los tamaños actuales de los exports parciales de los esquemas

para los que se están haciendo copias actualmente y se ha estimado un crecimiento del

volumen de datos generado de un 25% a medio plazo.

Para el caso de la estimación del tamaño de las copias RMAN se ha tomado el

tamaño estimado de la base de datos a medio plazo (actual + 25%), se le ha añadido el

tamaño de la información de REDO acumulado de 1 semana y se le ha aplicado un

coeficiente del 35% de reducción. El valor del 35% se ha obtenido empíricamente

basándonos en la relación entre tamaño de la base de datos y tamaño de la copia

completa con RMAN que el técnico ha observado por experiencia en su trabajo con

otros clientes.

BACKUP (GB)

Export actual

RMAN

(estimado 35% datafiles y

redo)

Export + 25% TOTAL

(estimado)

DRAGO 60 200,4904453 75 275,4904453

ROSS 17 15,50698242 21,25 36,75698242

APTAE (64 bits) 25 50,18543701 31,25 81,43543701

393,6828647

El resto de ficheros de la base de datos a ubicar en almacenamiento compartido

no tiene un tamaño significativo y, por lo tanto, no se tiene en cuenta para estas

estimaciones.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 52

Se estima, por lo tanto, que el almacenamiento externo necesario para los dos

nodos del RAC y las copias de seguridad será de como mínimo unos 1,2 TB.

Nótese que la cantidad de 1,2 TB está expresada como almacenamiento neto. Se

ha supuesto, como recomienda Oracle, que la redundancia del almacenamiento (nivel de

RAID) se realiza en la cabina de discos (y no a nivel de ASM).

Servidor de contingencia. Almacenamiento local

En el caso del servidor de contingencia no es posible usar el mismo

almacenamiento externo común que las máquinas del RAC pues la cabina de

almacenamiento se convertiría en un punto único de fallo. Vamos a suponer que no se

dispone de almacenamiento externo alternativo y que, por lo tanto, todos los ficheros de

la base de datos estarán en almacenamiento local en el servidor de contingencia.

Al igual que sucedía con los nodos del RAC, el almacenamiento local estará

dedicado al software de base de datos, al sistema operativo y a los ficheros de logs y de

configuración de cada instancia de base de datos Oracle (en este caso no es necesario

implementar ASM). Para este tipo de almacenamiento bastaría con 2 discos duros

locales dispuestos en RAID 1 dando una capacidad neta de como mínimo 256GB.

Como hemos supuesto que el servidor de contingencia no tendrá acceso a

almacenamiento externo necesitamos almacenamiento local para los ficheros de datos

de las tres instancias de base de datos actuales.

Como se indicó en el apartado anterior, se estima que los ficheros de la base de

datos ocupen unos 772GB que, dadas las capacidades de los discos duros de hoy en día

podríamos redondear a 1TB. Oracle recomienda que este tipo de ficheros se almacene

en RAID 10. Como mínimo, y dado que se va a tratar de un servidor de contingencia

que se usará para producción en circunstancias excepcionales, se recomienda

implementar un RAID 5 de 3 discos con capacidad neta de 1TB.

Conectividad

En este apartado se describirán las necesidades de conectividad de las distintas

máquinas que componen el entorno propuesto a efectos de Oracle. No se incluye en esta

descripción el hardware necesario para la conectividad de los nodos del RAC (y

opcionalmente del servidor de contingencia) al sistema de almacenamiento externo

como, por ejemplo, interfaces de red adicionales para iSCSI o tarjetas de fibra.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 53

Nodos del RAC

La infraestructura del RAC requiere que cada nodo disponga de, al menos dos

interfaces de red. Uno de ellos estará conectado a la red pública (la red por la que

acceden los clientes de la base de datos) y el otro estará conectado a la red privada que

interconecta a los nodos del RAC.

En este contexto se entiende por “red pública” la red por la que los clientes de la

base de datos acceden a ésta y, por lo tanto, no tiene que ser necesariamente una red

externa. De hecho, lo normal es que no lo sea. Sólo es una forma de diferenciar la red de

interconexión entre los nodos y la red por la que se conectan los clientes a la base de

datos.

Se requiere que los interfaces de la red privada estén conectados a un switch

dedicado en exclusiva para este fin y que todo el conjunto funcione a velocidades

Gigabit. Así mismo, los interfaces de red de la red privada sólo deben usarse para la

interconexión entre nodos.

Por seguridad se recomienda tener redundados los dos interfaces de red bien en

activo-pasivo o activo-activo tanto para la red pública como la red privada.

Si es posible, y para evitar que el switch de interconexión se convierta también

en un punto único de fallo puede optarse por una configuración con dos switches

(siempre que soporten trunk).

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 54

Por lo visto anteriormente se recomienda que cada nodo del RAC disponga de

dos tarjetas de red duales (4 bocas en total) con velocidad mínima de 1 Gigabit.

Servidor de contingencia

Los requisitos de conectividad para el servidor de contingencia son menores al

no estar en RAC. Recomendamos dos interfaces de red con velocidad mínima de 1

Gigabit dispuestos en “bonding” para garantizar la conectividad.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 55

Despliegue usando VLANs

Tradicionalmente se han usado switches y NICs dedicados para la red de

interconexión y Oracle siempre ha sido conservadora en este aspecto pues las

consecuencias de la degradación del rendimiento o fallos en la red de interconexión

pueden ocasionar altos costes:

Los principales requisitos que debe cumplir la red de interconexión entre nodos

son:

• Fiabilidad.

• Baja latencia.

• Alto ancho de banda.

Oracle es consciente de que en muchos despliegues, por distintos motivos, no es

posible dedicar electrónica de red exclusiva a la red de interconexión y soporta el uso de

redes Ethernet compartidas particionadas mediante el uso de Virtual Local Area

Networks (VLANs). De esta forma es posible consolidar distintos tipos de tráfico

(público, interconexión, almacenamiento) en un mismo dispositivo (switch) siempre que

cada uno de ellos esté en VLANs distintas.

Las topologías de red implementadas con VLANs pueden cumplir con los

requisitos citados anteriormente y son soportadas por Oracle siempre y cuando la red de

interconexión sea no-enrutable, esté aislada de todo tráfico distinto al de la

interconexión entre nodos, los valores de latencia y ancho de banda satisfagan los

“Service Level Agreements” (SLA) de las aplicaciones a las que da soporte el clúster y

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 56

dichos valores no superen los valores de “timeout” del propio clúster o de la base de

datos.

Todo ello es factible pues los switches de última generación:

• Soportan mayor ancho de banda

• Son multicapa y soportan VLANs

• Permiten MTU variable

• Bonding

• QoS

Si bien los valores de latencia requeridos para la interconexión son relativamente

predecibles, el ancho de banda requerido es difícil de calcular antes del despliegue

definitivo pues depende de gran cantidad de componentes software y hardware (número

de CPUs, pila de red, etc.).

A modo de ejemplo se muestran las latencias mínimas para distintos tamaños de

bloques UDP en una red 1GbE:

Los valores de latencia máximos vienen marcados por los SLA de las distintas

aplicaciones que soporta el Clúster teniendo un valor tope bastante generoso de 30

segundos. Superados los 30 segundos se activa el mecanismo “Split-brain prevention

node fencing” (los nodos del RAC pierden contacto entre sí actuando como instancias

únicas intentando reiniciar el otro nodo) y producen una degradación notable del

rendimiento debido a las retransmisiones de paquetes (los enlaces 1GbE se saturan al

llegar al 80%-90% de su capacidad).

La mejor forma de determinar si se cumplen los requisitos de latencia y ancho de

banda consiste en realizar simulaciones en un entorno de pre-producción.

Siempre que se cumplan los requisitos de latencia y ancho de banda es posible

usar VLANs en la red de interconexión de nodos. Adicionalmente, deben cumplirse los

siguientes requisitos:

• Todos los nodos del RAC deben estar en el mismo dominio de “broadcast” y la

comunicación de un nodo a cualquier otro debe hacerse con un solo salto. Esto

es, cada nodo debe estar conectado directamente al mismo switch (principal y

redundante, si lo hubiere).

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 57

• El protocolo STP (Spaning Tree Protocol) debe deshabilitarse en la VLAN de

interconexión de los nodos del RAC para evitar que los avisos de cambios de la

topología de la red inunden la red e interfieran con el tráfico de interconexión.

En su defecto, deben habilitarse soluciones de optimización de convergencia

STP propietarias como Port Fast definitions, RootGuard o BPDU filtering. En

todo caso, los eventos de convergencia STP deben durar menos que el umbral de

“heartbeat” del Clusterware de Oracle o que los requisitos SLA de las

aplicaciones.

• Oracle soporta VLAN trunking para la red de interconexión. Los trunks manejan

tráfico de todos los switches pues, por defecto, en un puerto “trunk” todas las

VLANs están habilitadas y, por lo tanto, deben soportar el ancho de banda

necesario para todo el tráfico que pasa por ellos. Las VLANs usan protocolos

multicast y broadcast para la comunicación y, para facilitar la configuración de

VLANs algunos vendedores habilitan la propagación de las definiciones de

VLANs por defecto. Si bien esto tiene sentido para el tráfico de la red pública,

es muy desaconsejado para el tráfico de interconexión de Oracle Clusterware.

Es por esto que es necesario habilitar VLAN pruning o deshabilitar la VLAN de

interconexión en el puerto trunk de tal forma que el tráfico multicast y broadcast

no se propague más allá de la capa de acceso.

Es importante indicar que la consolidación de distintos tipos de tráfico

(interconexión, almacenamiento, público) en una misma VLAN está especialmente

desaconsejado por Oracle.

La implementación de la redundancia de conexiones mediante el uso de dos

switches también está soportada cuando se usa una configuración con VLANs. Para ello

la electrónica de red debe permitir la extensión de VLANs entre switches mediante

protocolos de trunking propietarios (como VTP de Cisco) o mediante protocolos de

“tagging” (como ISL de Cisco o el estándar IEEE 802.1). Ambos switches deben

detectar las VLANs de los segmentos de red a los que están conectados y deben

soportar el protocolo apropiado.

Una característica altamente deseable y que tiene gran impacto en el rendimiento

de la red de interconexión es el soporte de “jumbo frames” en los switches. Esto es

debido a que los tamaños de bloque de datos de la base de datos (normalmente 8KB) no

son apropiados para el tamaño estándar de trama red de 1500 bytes y se incurre en un

“overead” adicional en la división del bloque en varias tramas.

A continuación se muestra un ejemplo de despliegue que resume los requisitos

expuestos anteriormente:

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 58

La topología del ejemplo muestra un RAC de cuatro nodos en el que la alta

disponibilidad se implementa mediante switches redundantes con interfaces de red

dispuestos en “bonding” activo-pasivo. Los puertos de los switches están configurados

con “tagged” VLANs. Las VLANs están “trunked” a un switch en standby y la VLAN

pública está “trunked” a un switch superior. Nótese que en este ejemplo la red de

interconexión VLAN11 (en rojo) está “tagged” entre los dos switches pero no participa

en el trunk al switch superior.

Red de almacenamiento y red pública

Dado que Oracle no proporciona un documento de “best practices” específico

para la conectividad del almacenamiento y/o la conectividad con la red pública,

podemos exigir los requisitos vistos para la red de interconexión: fiabilidad, baja

latencia y alto ancho de banda. Siendo éstos tres aspectos especialmente críticos para la

red de almacenamiento.

Para ambas redes se aconseja implementar la redundancia a través de conexiones

en “bonding” y electrónica de red redundada. Y, en el caso ideal, separar físicamente

la red de almacenamiento de la red pública.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 59

En el caso concreto de la red de almacenamiento implementada con VLANs,

serían de aplicación las restricciones vistas para la red de interconexión (separación del

tráfico, cumplimiento de los SLA, adyacencia a nivel de capa 2, neutralización de STP,

VLAN trunking, consolidación de cada tipo de tráfico en VLANs separadas, etc.)

El escenario ideal por el que ha apostado Oracle siempre es el de disponer de

electrónica de red dedicada para la red de interconexión del Clusterware. En cuanto al

almacenamiento también parece lógico disponer de una red física distinta a la red

pública. En todo caso, se recomienda implementar conexiones y electrónica de red

redundantes para cada tipo de red.

Si no es posible implementar las distintas redes con electrónica de red

independiente, Oracle soporta el uso de VLANs siempre que se cumplan los requisitos

descritos en este documento.

No hay una fórmula eficaz para determinar el ancho de banda necesario para

cada tipo de tráfico si no se dispone de un entorno de pre-producción en el que realizar

las pruebas correspondientes. En todo caso, y si se opta por concentrar distintos tipos de

tráfico en un mismo switch, será necesario que éste cuente con un mecanismo de control

QoS para garantizar un mínimo de ancho de banda para cada tipo de tráfico.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 60

Hardware. Resumen de la configuración mínima recomendada

En la siguiente tabla se resumen las características mínimas recomendadas para

la solución de contingencia y alta disponibilidad propuesta.

Nodo 1 del RAC Nodo 2 del RAC Servidor de contingencia

Máquina Servidor con dos zócalos para

procesador (máx.)

Servidor con dos zócalos para

procesador (máx.)

Servidor con dos zócalos para

procesador (máx.)

CPU 1x CPU 8 cores / 16 hilos a 2,6Ghz

(por ejemplo Intel Xeon E5-2670)

1x CPU 8 cores / 16 hilos a 2,6Ghz

(por ejemplo Intel Xeon E5-2670)

1x CPU 8 cores / 16 hilos a 2,6Ghz

(por ejemplo Intel Xeon E5-2670)

Memoria RAM 16 GB 16 GB 16 GB

Almacenamient

o local

256 GB netos en RAID 1 256 GB netos en RAID 1 256 GB netos en RAID 1

1 TB neto en RAID 5 de tres discos

(ideal RAID 10)

Disco de 512 GB

Almacenamient

o externo

compartido

1,2 TB redundado por la cabina de almacenamiento

Interfaces de red 2 tarjetas dual port (mínimo 1

Gigabit)

2 tarjetas dual port (mínimo 1

Gigabit)

2 tarjetas single port (mínimo 1

Gigabit)

NOTAS:

1. La versión Standard Edition de Oracle requiere que la suma total de zócalos de

procesador (vacíos o no) de todos los nodos del RAC sea como máximo 4.

2. Si por motivos de rendimiento se desea prescindir del mecanismo de conexión

por “shared server” (o complementarlo con conexiones dedicadas para algunos

servicios) será necesario ampliar la memoria RAM a 32GB o incluso 48GB

dependiendo del número de sesiones simultáneas esperadas.

3. El Terabyte reservado como almacenamiento local en el servidor de

contingencia supone que éste no tiene acceso almacenamiento externo distinto al

que tienen los nodos del RAC. Si no fuese así, los requisitos de espacio en disco

se trasladarían a la cabina de almacenamiento alternativa.

4. El RAC Standard Edition requiere que se use obligatoriamente ASM (Automatic

Storage Management) de Oracle. Si bien el almacenamiento puede ser

redundado a nivel del propio ASM, por motivos de rendimiento Oracle

recomienda que la redundancia la lleve a cabo la propia cabina de

almacenamiento.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 61

5. En la configuración de los servidores no se ha contemplado el hardware

necesario para el acceso a la cabina de almacenamiento. Será necesario añadir a

la configuración las tarjetas HBA (en el caso de fibra) o las tarjetas Ethernet (en

el caso de iSCSI) necesarias para lograr la conectividad fiable y redundante con

el almacenamiento externo.

Configuración definitiva adquirida por el cliente

En el apartado de software el gestor de bases de datos a emplear y el sistema de

clúster elegido estaban decididos desde las etapas más tempranas del proyecto. El

cliente había optado por la última versión de Oracle Database en el momento de la toma

de decisión, esto es Oracle 11g (11.2.0.3). Se descartó cualquier otro gestor de base de

datos dado que la mayoría del software usado por la organización, tanto propio como de

terceros, depende de código PL/SQL incluido en la base de datos. Debido gran volumen

de aplicaciones a migrar hubiese sido inviable migrar a otro gestor. Por otra parte,

muchas aplicaciones de terceros sólo funcionan con bases de datos Oracle.

Se optó finalmente por Oracle RAC como software de alta disponibilidad para el

gestor de bases de datos dado que es una solución “activo-activo” proporcionada por

Oracle de probada robustez y fiabilidad. El hecho de no incurrir en costes adicionales de

licenciamiento ajustándose a las limitaciones impuestas por la edición estándar de

Oracle Database también contribuyó a que el cliente se decantara por Oracle RAC.

Estaba previsto que en esta fase del proyecto se le presentaran al cliente distintas

ofertas de hardware compatibles con los requisitos mínimos resultantes del estudio

realizado previamente. Sin embargo, en este caso particular, el cliente estaba en medio

de un proceso de regularización de licencias de distintos productos Oracle y llegó a un

acuerdo global con el vendedor para la adquisición conjunta de una solución integral de

hardware y software que hizo innecesario dicho estudio.

La solución integral acordada con Oracle incluye el sistema operativo Oracle

Linux 6 y el software de replicación Oracle GoldenGate. Cabía la posibilidad de optar

por Solaris pero se descartó dado que hay mucha más bibliografía, soporte, e

instalaciones de Linux que de Solaris. Este hecho facilita enormemente la resolución de

posibles problemas que pudieran darse en el futuro. En todo caso, y debido a la

adquisición de hardware Sun-Oracle, el vendedor incluye soporte Premium tanto para

Linux como para Solaris.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 62

Éstas son las características principales de los servidores adquiridos por el cliente:

• 2x Servidor Sun Oracle X3-2 (clúster de Oracle)

o 1x Intel Xeon E5-2640 6-core 2.5Ghz

o 32 GB DDR-1600 DIMM

o 2x 300 GB SAS 10000rpm HDD dispuesto en RAID1

o 1x Sun Quad-Port GbE 2.0

o 2x 10GbE onboard

• 1x Servidor Sun Oracle X3-2 (Máquina de contingencia)

o 2x Intel Xeon E5-2640 6-core 2.5Ghz

o 32 GB DDR-1600 DIMM

o 2x 300 GB SAS 10000rpm HDD dispuesto en RAID1

o 4x 600 GB SAS 10000rpm HDD dispuesto en RAID5

o 1x Sun Quad-Port GbE 2.0

o 2x 10GbE onboard

En cuanto a la cabina de almacenamiento:

• Sun ZFS-7120 appliance

o 1x Intel Xeon E5620 4-core 2.4Ghz

o 11x 600GB 15000rpm

o 1x write accelerator 74GB SSD drive

Distribución del almacenamiento

Una vez conocida la configuración definitiva del hardware, y concretamente del

almacenamiento, se procedió a diseñar la distribución del mismo, especialmente en lo

concerniente a la cabina de discos.

A grandes rasgos, el almacenamiento quedó distribuido de la siguiente forma:

Almacenamiento local

APT-ORA1 Uso Capac.

Neta Ocupado

RAID 1 (2 x HDD 300GB) Sist.

Operativo 300 GB 37 GB

APT-ORA2 Uso Capac.

Neta Ocupado

RAID 1 (2 x HDD 300GB) Sist.

Operativo 300 GB 29 GB

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 63

APT-ORA3 Uso Capac.

Neta Ocupado

RAID 1 (2 x HDD 300GB) Sist.

Operativo 300 GB 17 GB

RAID 5 (4 x HDD 600GB) BD 1800 GB 2,7 GB

Almacenamiento externo

ZFS 7120 Uso Capac.

Neta Ocupado

RAID 10 (6 x HDD 600GB) BD y GG 1,58 TB 29GB

RAID 6 (5 x HDD 600GB) Backup y BD 1,57TB 4,2GB

NOTA: El almacenamiento de la cabina está actualmente compartido por ambos

nodos del RAC.

En la tabla anterior se puede apreciar que se han reservado 1800GB de

almacenamiento local para albergar la base de datos de contingencia. No se ubica en la

cabina dado que en ese caso ésta se convertiría en punto único de fallo.

Así mismo, se han creado dos “pools” de almacenamiento en la cabina de discos

particionando todo su espacio en dos. Uno “rápido” organizado en forma de RAID 10

que albergará los ficheros principales de la base de datos y los archivos temporales de

GoldenGate y otro “lento” destinado a las copias de seguridad de las bases de datos del

clúster.

Cada uno de los “pools” de almacenamiento se organiza, a su vez, en LUNs.

En el caso del “pool” rápido, llamado “pool_db”, tenemos varias LUNs

asignadas a cada uno de los grupos de discos ASM que van a emplearse en el clúster de

Oracle. Así, tendremos dos grupos de discos ASM llamados DATA y FRA que

contendrán los ficheros de datos de las bases de datos y los logs de éstas,

respectivamente.

Se reservará un grupo de discos adicional llamado CRS necesario para la gestión

del clúster.

Finalmente se creará un grupo de discos ACFS que contendrá el almacenamiento

necesario para el volumen compartido ADVM donde se almacenarán los archivos

temporales del software de replicación Oracle GoldenGate.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 64

Desglose almacenamiento ZFS

pool_db

Nº de discos 6

logzilla (SSD) 1

Spare disks 0

Perfil Mirrored

Espacio neto 1,58 TB

ASM Diskgroups

DATA 800

FRA 125

ACFS (GG) 50

CRS 2

Total ocupado (+25%)(GB) 977

Espacio libre en el pool (GB) 715,92

Todo este almacenamiento será visible simultáneamente desde ambos nodos del

clúster, que llamaremos APT-ORA1 y APT-ORA2 a través de conexiones redundadas

iSCSI:

iSCSI LUNs (pool_db) Visibilidad ASM

Diskgroup

8 x LUN de 100 GB APT-ORA1, APT-ORA2 DATA

2 x LUN de 25 GB APT-ORA1, APT-ORA2 FRA

3 x LUN de 25 GB APT-ORA1, APT-ORA2 FRA

2 x LUN de 25 GB APT-ORA1, APT-ORA2 ACFS (GG)

1 x LUN de 2 GB APT-ORA1, APT-ORA2 CRS

En la tabla anterior se detallan también el número y tamaño de las LUNs que

componen cada uno de los grupos de discos ASM a crear.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 65

En el caso del “pool” lento, que llamaremos “pool_backup”, tenemos la

siguiente distribución del almacenamiento:

pool_backup

Nº de discos 5

logzilla (SSD) 0

Spare disks 0

Perfil RAIDZ 2

Espacio Neto 1,57 TB

ASM Diskgroups

ACFS

(BACKUP) 500

Total ocupado

(+25%)(GB) 500

Espacio libre en el pool

(GB) 1107,68

iSCSI LUNs

(pool_backup) Visibilidad

5 x LUN de 100 GB APT-ORA1, APT-ORA2

En este caso se han reservado 5 LUNs de 100GB para un grupo de discos ASM

llamado BACKUP que será visible a ambos nodos del RAC mediante ADVM y que

contendrá los archivos de backup de las distintas bases de datos antes de que el software

de backup los envíe a cinta.

Con esta distribución, tendremos un almacenamiento neto de unos 3TB en la

cabina de almacenamiento.

Éstas serían las estimaciones de los requisitos de almacenamiento de la base de

datos, suponiendo un incremento futuro de las necesidades de espacio del 25%:

Estimación Almacenamiento

ASM DISK GROUPS

"+DATA" "+FRA" ACFS (GG) ACFS (ORCL)

Datafiles BD (+25%) 773

Redo (+25%) 40

RMAN (+25%) 270,55

Export (+25%) 160

GG (origen y destino) 52,5

Total (GB) 773 40 52,5 430,55

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 66

Seguidamente se muestra la estimación de ocupación de los archivos de log

generados por la base de datos suponiendo un incremento futuro total del 25%:

Redo Semanal (GB) total + 10%

DRAGO ROSS APTAE total Sup Log total + 25%

11 4 14 29 31,9 39,875

En cuanto a los requerimientos de espacio estimados para las copias lógicas de la

base de datos:

Export (GB) DRAGO ROSS APTAE total Sup Log total + 25%

60 7 60 127 158,75

Finalmente, se muestran las estimaciones de espacio temporal ocupado por el

software de replicación Oracle GoldenGate:

GoldenGate (GB) soft temp trails (1 semana) total

RAC como destino 0,25 10 16 26,25

RAC como origen 0,25 10 16 26,25

52,5

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 67

Desarrollo

Instalación del hardware y configuración de la cabina de discos

La instalación del hardware corrió a cargo del personal de Sun-Oracle bajo mi

supervisión. En concreto instalaron, subieron el firmware a la última versión y

realizaron pruebas de verificación de los tres servidores y de la cabina de discos.

Siguiendo los requisitos de almacenamiento especificados en el apartado

anterior, el personal de Oracle configuró el almacenamiento disponible en la cabina de

discos.

El conexionado de red corrió a cargo del cliente. Todas las conexiones de red

están redundadas aunque existe un punto único de fallo pues el cliente consideró que

sólo era necesario un switch en vez de dos recomendados por Oracle. El switch está

configurado mediante VLANs para separar el tráfico de la red de almacenamiento, el

tráfico de la red de interconexión de los nodos del clúster y el tráfico de la red pública.

La conexión de los servidores con la cabina se realiza a través de iSCSI.

La configuración de red de la cabina corrió de mi cuenta. Se definió un

“datalink” compuesto de dos interfaces de red agregados por LACP y con MTU de

9000

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 68

que quedó asociado al siguiente interface para la red de almacenamiento:

El otro “datalink” lo compone un único interfaz de red y se destinará a la red de

administración quedando un último interfaz de red libre para usos futuros:

Finalmente, se procedió a configurar la visibilidad de las LUNs a los distintos

“initiator groups”:

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 69

Instalación de Oracle Linux

Para la instalación del RAC, Oracle recomienda realizar una instalación de Linux

con el conjunto de paquetes estándar con algún interfaz gráfico instalado. Así se hizo en

los tres servidores. Tras configurar los repositorios para conectarlo a ULN (Unbreakable

Linux Network) se procedió a actualizar los paquetes, incluyendo el kernel, a su última

versión.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 70

La configuración de los interfaces de red quedó de la siguiente manera:

Nodo 1 del RAC (apt-ora1):

[root@apt-ora1 ~]# cat /etc/resolv.conf

nameserver 10.5.10.10

nameserver 10.5.10.11

search example.local

[root@apt-ora1 ~]# cat /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=apt-ora1

GATEWAY=10.5.10.1

NOZEROCONF=yes

[root@apt-ora1 ~]# cat /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

#Red publica

10.5.10.31 apt-ora1 apt-ora1.example.local

10.5.10.32 apt-ora2 apt-ora2.example.local

#Red privada

10.5.11.31 apt-ora1-priv

10.5.11.32 apt-ora2-priv

#IPs virtuales en la red publica

10.5.10.39 apt-ora1-vip

10.5.10.40 apt-ora2-vip

[root@apt-ora1 ~]# cat /etc/modprobe.d/bonding.conf

alias bond0 bonding

alias bond1 bonding

alias bond2 bonding

[root@apt-ora1 network-scripts]# cat ifcfg-*

DEVICE="bond0"

BOOTPROTO="none"

IPV6INIT="no"

NM_CONTROLLED="no"

ONBOOT="yes"

IPADDR=10.5.10.31

NETMASK=255.255.255.0

BONDING_OPTS="miimon=100 mode=4"

MTU=1500

DEVICE="bond1"

BOOTPROTO="none"

IPV6INIT="no"

NM_CONTROLLED="no"

ONBOOT="yes"

IPADDR=10.5.12.31

NETMASK=255.255.255.0

#GATEWAY=10.5.12.1

MTU=9000

BONDING_OPTS="miimon=100 mode=4"

DEVICE="bond2"

BOOTPROTO="none"

IPV6INIT="no"

NM_CONTROLLED="no"

ONBOOT="yes"

IPADDR=10.5.11.31

NETMASK=255.255.255.0

MTU=9000

BONDING_OPTS="miimon=100 mode=4"

DEVICE="eth0"

BOOTPROTO="none"

HWADDR="00:00:00:00:00:00"

IPV6INIT="no"

NM_CONTROLLED="no"

ONBOOT="yes"

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 71

MASTER="bond0"

SLAVE=yes

DEVICE="eth1"

BOOTPROTO="none"

HWADDR="00:00:00:00:00:00"

IPV6INIT="no"

NM_CONTROLLED="no"

ONBOOT="yes"

MASTER="bond1"

SLAVE=yes

DEVICE="eth2"

BOOTPROTO="none"

HWADDR="00:00:00:00:00:00"

IPV6INIT="no"

NM_CONTROLLED="no"

ONBOOT="yes"

MASTER="bond2"

SLAVE=yes

DEVICE="eth3"

BOOTPROTO="none"

HWADDR="00:00:00:00:00:00"

IPV6INIT="no"

NM_CONTROLLED="no"

ONBOOT="yes"

MASTER="bond2"

SLAVE=yes

DEVICE="eth4"

BOOTPROTO="none"

HWADDR="00:00:00:00:00:00"

IPV6INIT="no"

NM_CONTROLLED="no"

ONBOOT="yes"

MASTER="bond1"

SLAVE=yes

DEVICE="eth5"

BOOTPROTO="none"

HWADDR="00:00:00:00:00:00"

IPV6INIT="no"

NM_CONTROLLED="no"

ONBOOT="yes"

MASTER="bond0"

SLAVE=yes

Nodo 2 del RAC (apt-ora2):

[root@apt-ora2 ~]# cat /etc/resolv.conf

nameserver 10.5.10.10

nameserver 10.5.10.11

search example.local

[root@apt-ora2 ~]# cat /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

#Red publica

10.5.10.31 apt-ora1 apt-ora1.example.local

10.5.10.32 apt-ora2 apt-ora2.example.local

#Red privada

10.5.11.31 apt-ora1-priv

10.5.11.32 apt-ora2-priv

#IPs virtuales en la red publica

10.5.10.39 apt-ora1-vip

10.5.10.40 apt-ora2-vip

[root@apt-ora2 ~]# cat /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=apt-ora2

GATEWAY=10.5.10.1

NOZEROCONF=yes

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 72

[root@apt-ora2 ~]# cat /etc/modprobe.d/bonding.conf

alias bond0 bonding

alias bond1 bonding

alias bond2 bonding

[root@apt-ora2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-*

DEVICE="bond0"

BOOTPROTO="none"

IPV6INIT="no"

NM_CONTROLLED="no"

ONBOOT="yes"

IPADDR=10.5.10.32

NETMASK=255.255.255.0

BONDING_OPTS="miimon=100 mode=4"

MTU=1500

DEVICE="bond1"

BOOTPROTO="none"

IPV6INIT="no"

NM_CONTROLLED="no"

ONBOOT="yes"

IPADDR=10.5.12.32

NETMASK=255.255.255.0

#GATEWAY=10.5.12.1

MTU=9000

BONDING_OPTS="miimon=100 mode=4"

DEVICE="bond2"

BOOTPROTO="none"

IPV6INIT="no"

NM_CONTROLLED="no"

ONBOOT="yes"

IPADDR=10.5.11.32

NETMASK=255.255.255.0

MTU=9000

BONDING_OPTS="miimon=100 mode=4"

DEVICE="eth0"

BOOTPROTO="none"

HWADDR="00:00:00:00:00:00"

IPV6INIT="no"

NM_CONTROLLED="no"

ONBOOT="yes"

MASTER="bond0"

SLAVE=yes

DEVICE="eth1"

BOOTPROTO="none"

HWADDR="00:00:00:00:00:00"

IPV6INIT="no"

NM_CONTROLLED="no"

ONBOOT="yes"

MASTER="bond1"

SLAVE=yes

DEVICE="eth2"

BOOTPROTO="none"

HWADDR="00:00:00:00:00:00"

IPV6INIT="no"

NM_CONTROLLED="no"

ONBOOT="yes"

MASTER="bond2"

SLAVE=yes

DEVICE="eth3"

BOOTPROTO="none"

HWADDR="00:00:00:00:00:00"

IPV6INIT="no"

NM_CONTROLLED="no"

ONBOOT="yes"

MASTER="bond2"

SLAVE=yes

DEVICE="eth4"

BOOTPROTO="none"

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 73

HWADDR="00:00:00:00:00:00"

IPV6INIT="no"

NM_CONTROLLED="no"

ONBOOT="yes"

MASTER="bond1"

SLAVE=yes

DEVICE="eth5"

BOOTPROTO="none"

HWADDR="00:00:00:00:00:00"

IPV6INIT="no"

NM_CONTROLLED="no"

ONBOOT="yes"

MASTER="bond0"

SLAVE=yes

Contingencia (apt-ora3):

[root@apt-ora2 ~]# cat /etc/modprobe.d/bonding.conf

alias bond0 bonding

alias bond1 bonding

[root@apt-ora3 network-scripts]# cat /etc/resolv.conf

nameserver 10.5.10.10

nameserver 10.5.10.11

search example.local

[root@apt-ora3 network-scripts]# cat /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

[root@apt-ora3 network-scripts]# cat /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=apt-ora3

GATEWAY=10.5.10.1

[root@apt-ora3 ~]# cat /etc/sysconfig/network-scripts/ifcfg-*

DEVICE="bond0"

BOOTPROTO="none"

IPV6INIT="no"

NM_CONTROLLED="no"

ONBOOT="yes"

IPADDR=10.5.10.33

NETMASK=255.255.255.0

BONDING_OPTS="miimon=100 mode=4"

MTU=1500

DEVICE="bond1"

BOOTPROTO="none"

IPV6INIT="no"

NM_CONTROLLED="no"

ONBOOT="yes"

IPADDR=10.5.12.33

NETMASK=255.255.255.0

#GATEWAY=10.5.12.1

MTU=9000

BONDING_OPTS="miimon=100 mode=4"

DEVICE="eth0"

BOOTPROTO="none"

HWADDR="00:00:00:00:00:00"

IPV6INIT="no"

NM_CONTROLLED="no"

ONBOOT="yes"

MASTER="bond0"

SLAVE=yes

DEVICE="eth1"

BOOTPROTO="none"

HWADDR="00:00:00:00:00:00"

IPV6INIT="no"

NM_CONTROLLED="no"

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 74

ONBOOT="yes"

MASTER="bond1"

SLAVE=yes

DEVICE="eth4"

BOOTPROTO="none"

HWADDR="00:00:00:00:00:00"

IPV6INIT="no"

NM_CONTROLLED="no"

ONBOOT="yes"

MASTER="bond1"

SLAVE=yes

DEVICE="eth5"

BOOTPROTO="none"

HWADDR="00:00:00:00:00:00"

IPV6INIT="no"

NM_CONTROLLED="no"

ONBOOT="yes"

MASTER="bond0"

SLAVE=yes

Nótese que en el caso de los nodos del RAC, existen tres emparejamientos de

interfaces de red mediante “bonding” en modo “activo-activo”:

• bond0: Interfaz pública de red

• bond1: Interfaz de la red de almacenamiento

• bond2: Interfaz de la red inteconexión entre los nodos del RAC

En el caso de la máquina de contingencia, sólo existirán dos emparejamientos de

interfaces, “bond0” y “bond1” con las mismas finalidades que en el caso de los nodos

del RAC.

A continuación se procedió a instalar y configurar el cliente iSCSI, incialmente en

las máquinas del RAC:

En ambos nodos

[root@apt-ora1 ~]# yum install iscsi-initiator-utils

[root@apt-ora1 ~]# service iscsid start

[root@apt-ora2 ~]# iscsiadm -m discovery -t sendtargets -p 10.5.12.34

10.5.12.34:3260,2 iqn.1986-03.com.sun:apt.zfs01

En el nodo1

[root@apt-ora1 ~]# cat /etc/iscsi/initiatorname.iscsi

InitiatorName=iqn.1988-12.com.oracle:a1774ed91bd

En el nodo2

[root@apt-ora2 ~]# cat /etc/iscsi/initiatorname.iscsi

InitiatorName=iqn.1988-12.com.oracle:2044933722ec

En ambos nodos

iscsiadm -m node -T iqn.1986-03.com.sun:apt.zfs01 -p 10.5.12.34 --login

iscsiadm -m node -T iqn.1986-03.com.sun:apt.zfs01 -p 10.5.12.34

--op update -n node.startup -v automatic

[root@apt-ora2 by-path]# ls -l /dev/disk/by-path/

total 0

lrwxrwxrwx 1 root root 9 mar 14 19:19

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 75

ip-10.5.12.34:3260-iscsi-iqn.1986-03.com.sun:apt.zfs01-lun-0 -> ../../sdc

lrwxrwxrwx 1 root root 9 mar 14 19:19

ip-10.5.12.34:3260-iscsi-iqn.1986-03.com.sun:apt.zfs01-lun-1 -> ../../sdd

lrwxrwxrwx 1 root root 9 mar 14 19:19

ip-10.5.12.34:3260-iscsi-iqn.1986-03.com.sun:apt.zfs01-lun-10 -> ../../sdm

lrwxrwxrwx 1 root root 9 mar 14 19:19

ip-10.5.12.34:3260-iscsi-iqn.1986-03.com.sun:apt.zfs01-lun-11 -> ../../sdn

lrwxrwxrwx 1 root root 9 mar 14 19:19

ip-10.5.12.34:3260-iscsi-iqn.1986-03.com.sun:apt.zfs01-lun-12 -> ../../sdo

lrwxrwxrwx 1 root root 10 mar 14 19:19

ip-10.5.12.34:3260-iscsi-iqn.1986-03.com.sun:apt.zfs01-lun-12-part1 -> ../../sdo1

lrwxrwxrwx 1 root root 9 mar 14 19:19

ip-10.5.12.34:3260-iscsi-iqn.1986-03.com.sun:apt.zfs01-lun-13 -> ../../sdp

lrwxrwxrwx 1 root root 9 mar 14 19:19

ip-10.5.12.34:3260-iscsi-iqn.1986-03.com.sun:apt.zfs01-lun-14 -> ../../sdq

lrwxrwxrwx 1 root root 9 mar 14 19:19

ip-10.5.12.34:3260-iscsi-iqn.1986-03.com.sun:apt.zfs01-lun-15 -> ../../sdr

lrwxrwxrwx 1 root root 9 mar 14 19:19

ip-10.5.12.34:3260-iscsi-iqn.1986-03.com.sun:apt.zfs01-lun-16 -> ../../sds

lrwxrwxrwx 1 root root 9 mar 14 19:19

ip-10.5.12.34:3260-iscsi-iqn.1986-03.com.sun:apt.zfs01-lun-17 -> ../../sdt

lrwxrwxrwx 1 root root 9 mar 14 19:19

ip-10.5.12.34:3260-iscsi-iqn.1986-03.com.sun:apt.zfs01-lun-2 -> ../../sde

lrwxrwxrwx 1 root root 9 mar 14 19:19

ip-10.5.12.34:3260-iscsi-iqn.1986-03.com.sun:apt.zfs01-lun-3 -> ../../sdf

lrwxrwxrwx 1 root root 9 mar 14 19:19

ip-10.5.12.34:3260-iscsi-iqn.1986-03.com.sun:apt.zfs01-lun-4 -> ../../sdg

lrwxrwxrwx 1 root root 9 mar 14 19:19

ip-10.5.12.34:3260-iscsi-iqn.1986-03.com.sun:apt.zfs01-lun-5 -> ../../sdh

lrwxrwxrwx 1 root root 9 mar 14 19:19

ip-10.5.12.34:3260-iscsi-iqn.1986-03.com.sun:apt.zfs01-lun-6 -> ../../sdi

lrwxrwxrwx 1 root root 9 mar 14 19:19

ip-10.5.12.34:3260-iscsi-iqn.1986-03.com.sun:apt.zfs01-lun-7 -> ../../sdj

lrwxrwxrwx 1 root root 9 mar 14 19:19

ip-10.5.12.34:3260-iscsi-iqn.1986-03.com.sun:apt.zfs01-lun-8 -> ../../sdk

lrwxrwxrwx 1 root root 9 mar 14 19:19

ip-10.5.12.34:3260-iscsi-iqn.1986-03.com.sun:apt.zfs01-lun-9 -> ../../sdl

NAME LUN SIZE GUID

DATA1 0 100G 600144F0F40EAEE20000513DDBBC0002

DATA2 1 100G 600144F0F40EAEE20000513DDBC80003

DATA3 2 100G 600144F0F40EAEE20000513DDBD40004

DATA4 3 100G 600144F0F40EAEE20000513DDBDF0005

DATA5 4 100G 600144F0F40EAEE20000513DDC5E0006

DATA6 5 100G 600144F0F40EAEE20000513DDC720007

DATA7 6 100G 600144F0F40EAEE20000513DDC7D0008

DATA8 7 100G 600144F0F40EAEE20000513DDC880009

FRA1 8 25G 600144F0F40EAEE20000513DDC9A000A

FRA2 9 25G 600144F0F40EAEE20000513DDCAB000B

GG1 10 25G 600144F0F40EAEE20000513DDCBD000C

GG2 11 25G 600144F0F40EAEE20000513DDCC9000D

CRS 12 2G 600144F0F40EAEE20000513DDCDB000E

NAME LUN SIZE GUID

BCK1 13 100G 600144F0F40EAEE20000513DDD21000F

BCK2 14 100G 600144F0F40EAEE20000513DDD2B0010

BCK3 15 100G 600144F0F40EAEE20000513DDD330011

BCK4 16 100G 600144F0F40EAEE20000513DDD400012

BCK5 17 100G 600144F0F40EAEE20000513DDD4B0013

Creamos las particiones en los volúmenes visibles por iSCSI:

Disco /dev/sdo: 2147 MB, 2147483648 bytes

181 heads, 48 sectors/track, 482 cylinders, 4194304 sectores en total

Units = sectores of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x395830f7

Disposit. Inicio Comienzo Fin Bloques Id Sistema

Orden (m para obtener ayuda): n

Acción de la orden

e Partición extendida

p Partición primaria (1-4)

p

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 76

Número de partición (1-4): 1

Primer sector (48-4194303, valor predeterminado 48): 256

Last sector, +sectores or +size{K,M,G} (256-4194303, valor predeterminado 4194303):

Se está utilizando el valor predeterminado 4194303

Orden (m para obtener ayuda): p

Disco /dev/sdo: 2147 MB, 2147483648 bytes

181 heads, 48 sectors/track, 482 cylinders, 4194304 sectores en total

Units = sectores of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x395830f7

Disposit. Inicio Comienzo Fin Bloques Id Sistema

/dev/sdo1 256 4194303 2097024 83 Linux

La partición 1 no termina en un límite de cilindro.

Orden (m para obtener ayuda): w

¡Se ha modificado la tabla de particiones!

Llamando a ioctl() para volver a leer la tabla de particiones.

Se están sincronizando los discos.

Así sucesivamente para el resto de volúmenes de tal forma que existirá una partición

por volumen.

Seguidamente instalamos la capa ASMLib. Una libería de Oracle que, entre otras

funciones, garantiza que todos los nombres de volumen asociados a dispositivos iSCSI

se mantegan constantes en cada reinicio del servidor:

[root@apt-ora1 ~]# yum install oracleasm-support.x86_64

[root@apt-ora1 ~]# rpm -Uvh oracleasmlib-2.0.4-1.el6.x86_64.rpm

groupadd -g 1000 oinstall

groupadd -g 1200 asmadmin

groupadd -g 1201 asmdba

groupadd -g 1202 asmoper

useradd -m -u 1100 -g oinstall -G asmadmin,asmdba,asmoper

-d /home/grid -s /bin/bash -c "Grid Infrastructure Owner" grid

id grid

passwd grid

groupadd -g 1300 dba

groupadd -g 1301 oper

useradd -m -u 1101 -g oinstall -G dba,oper,asmdba

-d /home/oracle -s /bin/bash -c "Oracle Software Owner" oracle

id oracle

passwd oracle

[root@apt-ora1 ~]# /usr/sbin/oracleasm configure -i

Configuring the Oracle ASM library driver.

This will configure the on-boot properties of the Oracle ASM library

driver. The following questions will determine whether the driver is

loaded on boot and what permissions it will have. The current values

will be shown in brackets ('[]'). Hitting <ENTER> without typing an

answer will keep that current value. Ctrl-C will abort.

Default user to own the driver interface []: grid

Default group to own the driver interface []: asmadmin

Start Oracle ASM library driver on boot (y/n) [n]: y

Scan for Oracle ASM disks on boot (y/n) [y]: y

Writing Oracle ASM library driver configuration: done

[root@apt-ora1 ~]# /usr/sbin/oracleasm init

Creating /dev/oracleasm mount point: /dev/oracleasm

Loading module "oracleasm": oracleasm

Configuring "oracleasm" to use device physical block size

Mounting ASMlib driver filesystem: /dev/oracleasm

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 77

NAME LUN SIZE GUID

DATA1 0 100G 600144F0F40EAEE20000513DDBBC0002

DATA2 1 100G 600144F0F40EAEE20000513DDBC80003

DATA3 2 100G 600144F0F40EAEE20000513DDBD40004

DATA4 3 100G 600144F0F40EAEE20000513DDBDF0005

DATA5 4 100G 600144F0F40EAEE20000513DDC5E0006

DATA6 5 100G 600144F0F40EAEE20000513DDC720007

DATA7 6 100G 600144F0F40EAEE20000513DDC7D0008

DATA8 7 100G 600144F0F40EAEE20000513DDC880009

FRA1 8 25G 600144F0F40EAEE20000513DDC9A000A

FRA2 9 25G 600144F0F40EAEE20000513DDCAB000B

GG1 10 25G 600144F0F40EAEE20000513DDCBD000C

GG2 11 25G 600144F0F40EAEE20000513DDCC9000D

CRS 12 2G 600144F0F40EAEE20000513DDCDB000E

BCK1 13 100G 600144F0F40EAEE20000513DDD21000F

BCK2 14 100G 600144F0F40EAEE20000513DDD2B0010

BCK3 15 100G 600144F0F40EAEE20000513DDD330011

BCK4 16 100G 600144F0F40EAEE20000513DDD400012

BCK5 17 100G 600144F0F40EAEE20000513DDD4B0013

iqn.1986-03.com.sun:apt.zfs01-lun-0-part1 -> ../../sdc1

iqn.1986-03.com.sun:apt.zfs01-lun-1-part1 -> ../../sdd1

iqn.1986-03.com.sun:apt.zfs01-lun-2-part1 -> ../../sde1

iqn.1986-03.com.sun:apt.zfs01-lun-3-part1 -> ../../sdf1

iqn.1986-03.com.sun:apt.zfs01-lun-4-part1 -> ../../sdg1

iqn.1986-03.com.sun:apt.zfs01-lun-5-part1 -> ../../sdh1

iqn.1986-03.com.sun:apt.zfs01-lun-6-part1 -> ../../sdi1

iqn.1986-03.com.sun:apt.zfs01-lun-7-part1 -> ../../sdj1

iqn.1986-03.com.sun:apt.zfs01-lun-8-part1 -> ../../sdk1

iqn.1986-03.com.sun:apt.zfs01-lun-9-part1 -> ../../sdl1

iqn.1986-03.com.sun:apt.zfs01-lun-10-part1 -> ../../sdm1

iqn.1986-03.com.sun:apt.zfs01-lun-11-part1 -> ../../sdn1

iqn.1986-03.com.sun:apt.zfs01-lun-12-part1 -> ../../sdo1

iqn.1986-03.com.sun:apt.zfs01-lun-13-part1 -> ../../sdp1

iqn.1986-03.com.sun:apt.zfs01-lun-14-part1 -> ../../sdq1

iqn.1986-03.com.sun:apt.zfs01-lun-15-part1 -> ../../sdr1

iqn.1986-03.com.sun:apt.zfs01-lun-16-part1 -> ../../sds1

iqn.1986-03.com.sun:apt.zfs01-lun-17-part1 -> ../../sdt1

/usr/sbin/oracleasm createdisk DATA1 /dev/sdc1

/usr/sbin/oracleasm createdisk DATA2 /dev/sdd1

/usr/sbin/oracleasm createdisk DATA3 /dev/sde1

/usr/sbin/oracleasm createdisk DATA4 /dev/sdf1

/usr/sbin/oracleasm createdisk DATA5 /dev/sdg1

/usr/sbin/oracleasm createdisk DATA6 /dev/sdh1

/usr/sbin/oracleasm createdisk DATA7 /dev/sdi1

/usr/sbin/oracleasm createdisk DATA8 /dev/sdj1

/usr/sbin/oracleasm createdisk FRA1 /dev/sdk1

/usr/sbin/oracleasm createdisk FRA2 /dev/sdl1

/usr/sbin/oracleasm createdisk GG1 /dev/sdm1

/usr/sbin/oracleasm createdisk GG2 /dev/sdn1

/usr/sbin/oracleasm createdisk CRS /dev/sdo1

/usr/sbin/oracleasm createdisk BCK1 /dev/sdp1

/usr/sbin/oracleasm createdisk BCK2 /dev/sdq1

/usr/sbin/oracleasm createdisk BCK3 /dev/sdr1

/usr/sbin/oracleasm createdisk BCK4 /dev/sds1

/usr/sbin/oracleasm createdisk BCK5 /dev/sdt1

En el nodo 1:

[root@apt-ora1 ~]# /usr/sbin/oracleasm scandisks

Reloading disk partitions: done

Cleaning any stale ASM disks...

Scanning system for ASM disks...

[root@apt-ora1 ~]# /usr/sbin/oracleasm listdisks

BCK1

BCK2

BCK3

BCK4

BCK5

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 78

CRS

DATA1

DATA2

DATA3

DATA4

DATA5

DATA6

DATA7

DATA8

FRA1

FRA2

GG1

GG2

En el nodo 2:

[root@apt-ora2 ~]# /usr/sbin/oracleasm scandisks

Reloading disk partitions: done

Cleaning any stale ASM disks...

Scanning system for ASM disks...

Instantiating disk "DATA1"

Instantiating disk "DATA2"

Instantiating disk "DATA3"

Instantiating disk "DATA4"

Instantiating disk "DATA7"

Instantiating disk "DATA6"

Instantiating disk "DATA5"

Instantiating disk "FRA2"

Instantiating disk "DATA8"

Instantiating disk "GG1"

Instantiating disk "FRA1"

Instantiating disk "GG2"

Instantiating disk "CRS"

Instantiating disk "BCK1"

Instantiating disk "BCK2"

Instantiating disk "BCK3"

Instantiating disk "BCK4"

[root@apt-ora2 ~]# /usr/sbin/oracleasm listdisks

BCK1

BCK2

BCK3

BCK4

BCK5

CRS

DATA1

DATA2

DATA3

DATA4

DATA5

DATA6

DATA7

DATA8

FRA1

FRA2

GG1

GG2

Una vez configurado el almacenamiento remoto, configuramos el almacenamiento

local:

En cada nodo del RAC

[root@apt-ora1 software]# lvcreate -nlv_u01 VolGroup -L32G

[root@apt-ora1 software]# mkfs -t ext4 /dev/VolGroup/lv_u01

En contingencia

[root@apt-ora3 ~]# lvcreate -nlv_u01 LVMSYS -L32G

[root@apt-ora3 ~]# mkfs -t ext4 /dev/VolGroup/lv_u01

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 79

En ambos nodos del RAC

#

# /etc/fstab

# Created by anaconda on Wed Mar 13 10:36:47 2013

#

# Accessible filesystems, by reference, are maintained under '/dev/disk'

# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

#

/dev/mapper/VolGroup-lv_root / ext4 defaults 1 1

UUID=ce694db2-e8da-4377-926c-43178c55226c /boot ext4 defaults 1 2

/dev/mapper/VolGroup-lv_usr /usr ext4 defaults 1 2

/dev/mapper/VolGroup-lv_var /var ext4 defaults 1 2

/dev/mapper/VolGroup-lv_swap swap swap defaults 0 0

/dev/mapper/VolGroup-lv_u01 /u01 ext4 defaults 1 2

tmpfs /dev/shm tmpfs size=26G 0 0

devpts /dev/pts devpts gid=5,mode=620 0 0

sysfs /sys sysfs defaults 0 0

proc /proc proc defaults 0 0

[root@apt-ora2 ~]# mkdir /u01

En contingencia:

[root@apt-ora3 ~]# cat /etc/fstab

#

# /etc/fstab

# Created by anaconda on Wed Mar 13 09:37:52 2013

#

# Accessible filesystems, by reference, are maintained under '/dev/disk'

# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

#

/dev/mapper/LVMSYS-lv_root / ext4 defaults 1 1

UUID=6f0d5901-086e-43fa-ab76-acd819ee5adc /boot ext4 defaults 1 2

/dev/mapper/LVMSYS-lv_usr /usr ext4 defaults 1 2

/dev/mapper/LVMSYS-lv_var /var ext4 defaults 1 2

/dev/mapper/LVMSYS-lv_swap swap swap defaults 0 0

/dev/mapper/LVMSYS-lv_u01 /u01 ext4 defaults 1 2

tmpfs /dev/shm tmpfs size=26G 0 0

devpts /dev/pts devpts gid=5,mode=620 0 0

sysfs /sys sysfs defaults 0 0

proc /proc proc defaults 0 0

En ambos nodos del RAC creamos los directorios de instalación:

mkdir -p /u01/app/11.2.0/grid

mkdir -p /u01/app/grid

mkdir -p /u01/app/oracle

chown grid:oinstall /u01/app/11.2.0/grid

chown grid:oinstall /u01/app/grid

chown oracle:oinstall /u01/app/oracle

chmod -R 775 /u01/

chown -R grid:oinstall /u01

Instalamos el paquete de pre-instalación de Oracle Database:

yum install oracle-rdbms-server-11gR2-preinstall.x86_64

Añadimos las 2 líneas siguientes a /etc/sysctl.conf

net.ipv4.conf.eth2.rp_filter = 2

net.ipv4.conf.eth1.rp_filter = 2

Instalamos nscd:

chkconfig --list | grep -i nscd

chkconfig --list | grep -i sssd

yum install nscd

chkconfig --list | grep -i nscd

chkconfig --level 35 nscd on

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 80

service nscd start

En los tres servidores configuramos el NTP:

[root@apt-ora1 ~]# cat /etc/sysconfig/ntpd

# Drop root to id 'ntp:ntp' by default.

OPTIONS="-u ntp:ntp -x -p /var/run/ntpd.pid -g"

[root@apt-ora1 ~]# chkconfig --level 35 ntpd on

[root@apt-ora1 ~]# cat /etc/ntp.conf

server 10.5.10.11

#server 0.rhel.pool.ntp.org

#server 1.rhel.pool.ntp.org

#server 2.rhel.pool.ntp.org

[root@apt-ora1 ~]# service ntpd start

En los dos nodos del RAC:

CVUQDISK_GRP=oinstall; export CVUQDISK_GRP

[root@apt-ora1 rpm]# rpm -iv /u01/source/grid/rpm/cvuqdisk-1.0.9-1.rpm

Añadimos “umask 022” al “bash_profile” de los usuarios grid y oracle en ambos

nodos y añadimos a /etc/security/limits.conf las siguientes líneas:

grid soft nofile 1024

grid hard nofile 65536

grid soft nproc 2047

grid hard nproc 16384

grid soft stack 10240

grid hard stack 32768

Instalación de Oracle Clusterware

Comenzamos la instalación de Oracle Clusterware, el software de clúster de Oracle

en el nodo 1:

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 81

Seleccionamos el disco CRS presentado por ASMlib para los archivos de gestión

del clúster:

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 82

Elegimos una contraseña común para todas las cuentas:

Podemos ignorar el error que indica que no es posible determinar “la posibilidad de

compartir” los discos indicados. Según la nota de My Oracle Support 372358.1, se debe

a que iSCSI no entrega un número de serie en su identificación. Si comprobamos que

todos los discos ASM son visibles desde ambos nodos, como así ocurre, podemos

ignorar la advertencia.

La advertencia del tamaño de la partición de swap puede también ignorarse. En

realidad tenemos 16G sólo se diferencia en unos KBs.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 83

Ejecutamos los comandos indicados como root en ambos nodos:

Comprobamos el estado del clúster:

[root@apt-ora1 grid]# /u01/app/11.2.0/grid/bin/crsctl check crs

CRS-4638: Oracle High Availability Services is online

CRS-4537: Cluster Ready Services is online

CRS-4529: Cluster Synchronization Services is online

CRS-4533: Event Manager is online

[root@apt-ora2 source]# /u01/app/11.2.0/grid/bin/crsctl check crs

CRS-4638: Oracle High Availability Services is online

CRS-4537: Cluster Ready Services is online

CRS-4529: Cluster Synchronization Services is online

CRS-4533: Event Manager is online

[root@apt-ora1 grid]# /u01/app/11.2.0/grid/bin/srvctl status asm

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 84

ASM se está ejecutando en apt-ora1,apt-ora2

[root@apt-ora1 ~]# /u01/app/11.2.0/grid/bin/crsctl stat res –t

--------------------------------------------------------------------------------

NAME TARGET STATE SERVER STATE_DETAILS

--------------------------------------------------------------------------------

Local Resources

--------------------------------------------------------------------------------

ora.CRS.dg

ONLINE ONLINE apt-ora1

ONLINE ONLINE apt-ora2

ora.LISTENER.lsnr

ONLINE ONLINE apt-ora1

ONLINE ONLINE apt-ora2

ora.asm

ONLINE ONLINE apt-ora1 Started

ONLINE ONLINE apt-ora2 Started

ora.gsd

OFFLINE OFFLINE apt-ora1

OFFLINE OFFLINE apt-ora2

ora.net1.network

ONLINE ONLINE apt-ora1

ONLINE ONLINE apt-ora2

ora.ons

ONLINE ONLINE apt-ora1

ONLINE ONLINE apt-ora2

--------------------------------------------------------------------------------

Cluster Resources

--------------------------------------------------------------------------------

ora.LISTENER_SCAN1.lsnr

1 ONLINE ONLINE apt-ora2

ora.LISTENER_SCAN2.lsnr

1 ONLINE ONLINE apt-ora1

ora.LISTENER_SCAN3.lsnr

1 ONLINE ONLINE apt-ora1

ora.apt-ora1.vip

1 ONLINE ONLINE apt-ora1

ora.apt-ora2.vip

1 ONLINE ONLINE apt-ora2

ora.cvu

1 ONLINE ONLINE apt-ora1

ora.oc4j

1 ONLINE ONLINE apt-ora1

ora.scan1.vip

1 ONLINE ONLINE apt-ora2

ora.scan2.vip

1 ONLINE ONLINE apt-ora1

ora.scan3.vip

1 ONLINE ONLINE apt-ora1

[root@apt-ora1 ~]# /u01/app/11.2.0/grid/bin/crsctl stat res -t

--------------------------------------------------------------------------------

NAME TARGET STATE SERVER STATE_DETAILS

--------------------------------------------------------------------------------

Local Resources

--------------------------------------------------------------------------------

ora.CRS.dg

ONLINE ONLINE apt-ora1

ONLINE ONLINE apt-ora2

ora.LISTENER.lsnr

ONLINE ONLINE apt-ora1

ONLINE ONLINE apt-ora2

ora.asm

ONLINE ONLINE apt-ora1 Started

ONLINE ONLINE apt-ora2 Started

ora.gsd

OFFLINE OFFLINE apt-ora1

OFFLINE OFFLINE apt-ora2

ora.net1.network

ONLINE ONLINE apt-ora1

ONLINE ONLINE apt-ora2

ora.ons

ONLINE ONLINE apt-ora1

ONLINE ONLINE apt-ora2

--------------------------------------------------------------------------------

Cluster Resources

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 85

--------------------------------------------------------------------------------

ora.LISTENER_SCAN1.lsnr

1 ONLINE ONLINE apt-ora2

ora.LISTENER_SCAN2.lsnr

1 ONLINE ONLINE apt-ora1

ora.LISTENER_SCAN3.lsnr

1 ONLINE ONLINE apt-ora1

ora.apt-ora1.vip

1 ONLINE ONLINE apt-ora1

ora.apt-ora2.vip

1 ONLINE ONLINE apt-ora2

ora.cvu

1 ONLINE ONLINE apt-ora1

ora.oc4j

1 ONLINE ONLINE apt-ora1

ora.scan1.vip

1 ONLINE ONLINE apt-ora2

ora.scan2.vip

1 ONLINE ONLINE apt-ora1

ora.scan3.vip

1 ONLINE ONLINE apt-ora1

[root@apt-ora1 ~]# /u01/app/11.2.0/grid/bin/olsnodes -n

apt-ora1 1

apt-ora2 2

[root@apt-ora1 ~]# /u01/app/11.2.0/grid/bin/srvctl status asm -a

ASM se está ejecutando en apt-ora1,apt-ora2

ASM está activada.

[root@apt-ora1 ~]# /u01/app/11.2.0/grid/bin/ocrcheck

Status of Oracle Cluster Registry is as follows :

Version : 3

Total space (kbytes) : 262120

Used space (kbytes) : 2592

Available space (kbytes) : 259528

ID : 1119624359

Device/File Name : +CRS

Device/File integrity check succeeded

Device/File not configured

Device/File not configured

Device/File not configured

Device/File not configured

Cluster registry integrity check succeeded

Logical corruption check succeeded

[root@apt-ora1 ~]# /u01/app/11.2.0/grid/bin/crsctl query css votedisk

## STATE File Universal Id File Name Disk group

-- ----- ----------------- --------- ---------

1. ONLINE 4d572d1f49574fdabf15c52652c34c22 (ORCL:CRS) [CRS]

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 86

Instalación del software de Oracle RAC

Instalamos el software de RAC en los dos nodos con la opción de sólo software. De

momento no instalamos la base de datos.

Instalamos la versión Estándar de la BD:

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 87

Tal y como comentamos en la instalación del software de clúster, podemos ignorar

con seguridad estos dos “problemas”.

Ejecutamos el script “root.sh” y finalizamos la instalación.

A continuación instalamos la nueva versión del Opatch en el “Oracle Home” de la

base de datos tal y como hicimos con el home de la infraestructura en ambos nodos.

Aplicamos el PSU de enero de 2013 tanto al home del Grid como al de la BD. En

realidad deberemos aplicar el parche “p12983005_112035_Linux-x86-64.zip” que

incluye el PSU de Enero y corrige el bug que impide usar ACFS con kernels de la serie

“2.6.39-400.*”

Generamos el fichero de response que nos pedirá el software del parche (hay que

hacerlo en los 2 OH y en los dos nodos Y una vez que hayamos actualizado OPatch a la

última versión):

[grid@apt-ora1 ~]$ cd /u01/app/11.2.0/grid/OPatch/ocm/bin/

[grid@apt-ora1 bin]$ ./emocmrsp -no_banner

Provide your email address to be informed of security issues, install and

initiate Oracle Configuration Manager. Easier for you if you use your My

Oracle Support Email address/User Name.

Visit http://www.oracle.com/support/policies.html for details.

Email address/User Name:

You have not provided an email address for notification of security issues.

Do you wish to remain uninformed of security issues ([Y]es, [N]o) [N]: Y

The OCM configuration response file (ocm.rsp) was successfully created.

Repetimos la operación con el Opatch del OH de la base de datos.

Aplicamos el parche primero al home de la infraestructura:

Y luego al home de la BD (nótese que hemos especificado explícitamente el OH):

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 88

Repetimos los pasos anteriores para el NODO2.

Creamos los volúmenes +DATA , +FRA y +GG usando “asmca”. Para +DATA

seleccionamos los discos ORCL:DATA1 a ORCL:DATA8, con redundancia externa y

fijamos la AU a 4MB:

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 89

Para +FRA seleccionamos los discos ORCL:FRA1 y ORCL:FRA2, redundancia

externa y AU de 4MB:

Creamos el grupo de discos +GG con los discos ORCL:GG1 y ORCL:GG2. Nótese

la compatibilidad ADVM 11.2 para permitir volúmenes ADVM:

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 90

Finalmente creamos el grupo de discos de BACKUP con AU=8 y ADVM

Compatibility a 11.2.0.0:

Quedando el almacenamiento ASM de la siguiente forma:

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 91

Creamos los volúmenes BACKUP y GG:

En ambos nodos:

[root@apt-ora1 patch2]# mkdir /u01/backup

[root@apt-ora1 patch2]# mkdir /u01/gg

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 92

Creamos los sistemas de ficheros para GG y BACKUP:

Y los montamos en ambos nodos:

[root@apt-ora1 patch2]# mount.acfs -o all

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 93

Preparamos el almacenamiento local.

[root@apt-ora3 u01]# mkdir -p /u01/app/oracle/product/11.2.0/dbhome_1

[root@apt-ora3 u01]# chown –R oracle.oinstall /u01/app

Instalamos el software de BD en el servidor de contingencia. Elegimos la opción de

instalación de sólo software, software de base de datos de instancia única y edición

Estándar:

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 94

Podemos ignorar la siguiente advertencia ya que sólo nos faltan unos KBs para

llegar al requerimiento de Oracle:

Ejecutamos los comandos indicados como usuario “root”:

Actualizamos el OPatch y generamos el fichero “response”:

cd /u01/app/oracle/product/11.2.0/dbhome_1/

mv OPatch/ OPatch-old

unzip /software/p6880880_112000_Linux-x86-64.zip

cd OPatch/ocm/bin/

./emocmrsp -no_banner

[oracle@apt-ora3 bin]$ ./emocmrsp -no_banner

Aplicamos el parche “14727310” al OH:

[oracle@apt-ora3 patch]$ cd /u01/source/patch/14727310

[oracle@apt-ora3 14727310]$ opatch apply

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 95

Creación de la instancia de base de datos en RAC

Comenzamos la creación de una instancia de base de datos en el RAC arrancando el

asistente de creación de bases de datos en RAC:

Elegimos una contraseña común para todas las cuentas:

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 96

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 97

En principio, evitaremos usar Shared Server:

Creamos 3 grupos de redologs para cada una de los dos threads de redo:

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 98

Ejecutamos el postpatch del PSU de Enero:

cd $ORACLE_HOME/rdbms/admin

sqlplus /nolog

SQL> CONNECT / AS SYSDBA

SQL> STARTUP

SQL> @catbundle.sql psu apply

SQL> QUIT

SQL> select count(0) from dba_objects where status <> 'VALID';

COUNT(0)

----------

0

select comp_name, version, status from dba_registry

COMP_NAME VERSION STATUS

------------------------------------------------------------ ------------------------------ -----------

OWB 11.2.0.3.0 VALID

Oracle Application Express 3.2.1.00.12 VALID

Oracle Enterprise Manager 11.2.0.3.0 VALID

OLAP Catalog 11.2.0.3.0 VALID

Spatial 11.2.0.3.0 VALID

Oracle Multimedia 11.2.0.3.0 VALID

Oracle XML Database 11.2.0.3.0 VALID

Oracle Text 11.2.0.3.0 VALID

Oracle Expression Filter 11.2.0.3.0 VALID

Oracle Rules Manager 11.2.0.3.0 VALID

Oracle Workspace Manager 11.2.0.3.0 VALID

Oracle Database Catalog Views 11.2.0.3.0 VALID

Oracle Database Packages and Types 11.2.0.3.0 VALID

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 99

JServer JAVA Virtual Machine 11.2.0.3.0 VALID

Oracle XDK 11.2.0.3.0 VALID

Oracle Database Java Packages 11.2.0.3.0 VALID

OLAP Analytic Workspace 11.2.0.3.0 VALID

Oracle OLAP API 11.2.0.3.0 VALID

Oracle Real Application Clusters 11.2.0.3.0 VALID

Comprobamos que está deshabilitado el acceso a los Management Packs:

SQL> r

1* select inst_id, name, value from gv$parameter where name like '%management_pack%'

INST_ID NAME VALUE

---------- ---------------------------------------- -------------------------

1 control_management_pack_access NONE

2 control_management_pack_access NONE

SQL> alter system set control_management_pack_access=NONE scope=SPFILE SID='*';

Sistema modificado.

SQL> select inst_id, name, value from gv$spparameter where name like '%management_pack%';

INST_ID NAME VALUE

---------- ---------------------------------------- -------------------------

1 control_management_pack_access NONE

2 control_management_pack_access NONE

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 100

Creamos el listener de la máquina de contingencia con la utilidad “netca”:

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 101

Creación de la base de datos de contingencia

Creamos la instancia de base de datos de contingencia con los mismos parámetros

vistos para la base de datos RAC usando la herramienta “dbca”. Las diferencias con ésa

se muestran a continuación:

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 102

Al igual que con la base de datos del RAC, aplicamos el script post-patch PSU de

Enero y nos aseguramos que está deshabilitado el acceso a los Management Packs.

Habilitamos el recurso ‘ora.registry.acfs’ en el cluster que nunca llegó a habilitarse

por realizarse la instalación de ACFS antes de aplicar el PSU que proporciona la

compatibilidad con las últimas versiones de kernel de Linux:

[root@apt-ora1 ~]# acfsroot enable

Seguidamente configuramos la base de datos del RAC en modo archivelog:

SQL> archive log list

Modo log de la base de datos Modo de No Archivado

Archivado automatico Desactivado

Destino del archivo USE_DB_RECOVERY_FILE_DEST

Secuencia de log en linea mas antigua 67

Secuencia de log actual 69

SQL> select name, log_mode from v$database;

NAME LOG_MODE

--------- ------------

APTORA NOARCHIVELOG

SQL> alter system set cluster_database=false scope=spfile sid='APTORA1';

[oracle@apt-ora1 ~]$ srvctl stop database -d APTORA

SQL> startup mount

SQL> alter database archivelog;

SQL> alter system set cluster_database=true scope=spfile sid='APTORA1';

SQL> shutdown immediate

[oracle@apt-ora1 ~]$ srvctl start database -d APTORA

[oracle@apt-ora1 ~]$ srvctl status database -d APTORA

La instancia APTORA1 se está ejecutando en el nodo apt-ora1

La instancia APTORA2 se está ejecutando en el nodo apt-ora2

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 103

SQL> archive log list

Modo log de la base de datos Modo de Archivado

Archivado automatico Activado

Destino del archivo USE_DB_RECOVERY_FILE_DEST

Secuencia de log en linea mas antigua 67

Siguiente secuencia de log para archivar 69

Secuencia de log actual 69

SQL> alter system switch logfile;

SQL> select name from v$archived_log;

NAME

--------------------------------------------------------------------------------

+FRA/aptora/archivelog/2013_04_18/thread_1_seq_69.263.813085249

SQL> show parameter recover

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

db_recovery_file_dest string +FRA

db_recovery_file_dest_size big integer 51000M

db_unrecoverable_scn_tracking boolean TRUE

recovery_parallelism integer 0

Cambiamos el parámetro de inicio de la base de datos “db_files” a 1024 en el RAC:

SQL> alter system set db_files = 1024 scope = spfile sid = '*';

@apt-ora1 ~]$ /u01/app/grid/xag_home/bin/agctl stop goldengate gg_1

oracle@apt-ora1 ~]$ /u01/app/grid/xag_home/bin/agctl status goldengate gg_1

oldengate instance 'gg_1' is not running

oracle@apt-ora1 ~]$ srvctl stop database -d APTORA

oracle@apt-ora1 ~]$ srvctl start database -d APTORA

oracle@apt-ora1 ~]$ /u01/app/grid/xag_home/bin/agctl start goldengate gg_1

[oracle@apt-ora1 ~]$ /u01/app/grid/xag_home/bin/agctl status goldengate gg_1

Goldengate instance 'gg_1' is running on apt-ora2

[oracle@apt-ora1 ~]$ /u01/app/grid/xag_home/bin/agctl relocate goldengate gg_1

--node apt-ora1

[oracle@apt-ora1 ~]$ /u01/app/grid/xag_home/bin/agctl status goldengate gg_1

Goldengate instance 'gg_1' is running on apt-ora1

Y en contingencia:

SQL> alter system set db_files = 1024 scope = spfile sid = '*';

Sistema modificado.

[oracle@apt-ora3 app]$ cd /u01/gg/

[oracle@apt-ora3 gg]$ ./ggsci

GGSCI (apt-ora3) 3> stop mgr

Manager process is required by other GGS processes.

Are you sure you want to stop it (y/n)? y

Sending STOP request to MANAGER ...

Request processed.

Manager stopped.

SQL> shutdown immediate

Base de datos cerrada.

Base de datos desmontada.

Instancia ORACLE cerrada.

SQL> startup

Instancia ORACLE iniciada.

Total System Global Area 1,0122E+10 bytes

Fixed Size 2237088 bytes

Variable Size 1677725024 bytes

Database Buffers 8422162432 bytes

Redo Buffers 19468288 bytes

Base de datos montada.

Base de datos abierta.

SQL> show parameter db_files

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 104

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

db_files integer 1024

GGSCI (apt-ora3) 1> start mgr

Manager started.

Instalación de Oracle GoldenGate en el RAC

Creamos la IP virtual (VIP) para GG:

[root@apt-ora1 ~]# /u01/app/11.2.0/grid/bin/appvipcfg create

-network=1 -ip=10.5.10.26 -vipname=apt-ggate-vip -user=root

[root@apt-ora1 ~]# crsctl setperm resource apt-ggate-vip -u user:grid:r-x

[root@apt-ora1 ~]# crsctl start resource apt-ggate-vip

Descargamos e instalamos los “bundled agents de GoldenGate para custerware” de

http://www.oracle.com/goto/clusterware

[grid@apt-ora1 xag]$ sh xagsetup.sh --install --directory /u01/app/grid/xag_home

--all_nodes

Añadimos la siguiente entrada al tnsnames.ora del home del grid del nodo 1:

ASM =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = BEQ)

(PROGRAM = /u01/app/11.2.0/grid/bin/oracle)

(ARGV0 = oracle+ASM1)

(ARGS = '(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=BEQ)))')

(ENVS = 'ORACLE_HOME=/u01/app/11.2.0/grid,ORACLE_SID=+ASM1')

)

(CONNECT_DATA =

(SERVICE_NAME = +ASM)

(INSTANCE_NAME = +ASM1)

)

)

Añadimos la siguiente entrada al tnsnames.ora del home del grid del nodo 2:

ASM =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = BEQ)

(PROGRAM = /u01/app/11.2.0/grid/bin/oracle)

(ARGV0 = oracle+ASM2)

(ARGS = '(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=BEQ)))')

(ENVS = 'ORACLE_HOME=/u01/app/11.2.0/grid,ORACLE_SID=+ASM2')

)

(CONNECT_DATA =

(SERVICE_NAME = +ASM)

(INSTANCE_NAME = +ASM2)

)

)

SQL> select * from gv$pwfile_users order by inst_id;

INST_ID USERNAME SYSDB SYSOP SYSAS

---------- ------------------------------ ----- ----- -----

1 SYS TRUE TRUE TRUE

1 ASMSNMP TRUE FALSE FALSE

2 SYS TRUE TRUE TRUE

2 ASMSNMP TRUE FALSE FALSE

alter system set remote_login_passwordfile = shared scope=spfile sid='*';

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 105

Reiniciamos los nodos del cluster secuencialmente.

Seguidamente instalamos GG en almacenamiento compartido y realizamos la

configuración inicial:

cd /u01/gg

unzip /u01/source/p16582701_112105_Linux-x86-64.zip

tar -xvf fbo_ggs_Linux_x64_ora11g_64bit.tar

[oracle@apt-ora1 gg]$ ln -s /u01/app/oracle/product/11.2.0/dbhome_1/lib/libnnz11.so

[oracle@apt-ora1 gg]$ ln -s /u01/app/oracle/product/11.2.0/dbhome_1/lib/libclntsh.so.11.1

[oracle@apt-ora1 gg]$ ./ggsci

GGSCI (apt-ora1) 1> create subdirs

GGSCI (apt-ora1) 2> edit params ./GLOBALS

GGSCHEMA GGUSER

CHECKPOINTTABLE gguser.chkpt

GGSCI (apt-ora1) 1> edit param mgr

port 7840

--AutoStart REPLICAT RRFIN1

--AutoRestart REPLICAT RRFIN1, retries 4, WaitMinutes 4

-- Alfresco y Administracion Electronica

--AutoStart REPLICAT RALFOC31

--AutoRestart REPLICAT RALFOC31, retries 4, WaitMinutes 4

-- Mensajeria

--AutoStart REPLICAT RSIME1

--AutoRestart REPLICAT RSIME1, retries 4, WaitMinutes 4

StartupValidationDelay 5

userid gguser@APTORA, password xxxxx, ENCRYPTKEY default

PURGEDDLHISTORY MINKEEPDAYS 14 MAXKEEPDAYS 30

PURGEMARKERHISTORY MINKEEPDAYS 14 MAXKEEPDAYS 30

PurgeOldExtracts dirdat/*, UseCheckpoints, MinKeepDays 7

GGSCI (apt-ora1) 1> start mgr

Creamos en la base de datos del RAC las estructuras de datos necesarias para el

soporte de GoldenGate:

create tablespace DATOS_GGS;

CREATE USER GGUSER

IDENTIFIED BY "xxxxx"

DEFAULT TABLESPACE DATOS_GGS

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

GRANT RESOURCE TO GGUSER;

GRANT CONNECT TO GGUSER;

ALTER USER GGUSER DEFAULT ROLE ALL;

GRANT UNLIMITED TABLESPACE TO GGUSER;

GRANT SELECT ANY DICTIONARY TO GGUSER;

GRANT SELECT ANY TABLE TO GGUSER;

GRANT CREATE TABLE TO GGUSER;

GRANT ALTER SESSION TO GGUSER;

GRANT CREATE SESSION TO GGUSER;

GRANT FLASHBACK ANY TABLE TO GGUSER;

GRANT LOCK ANY TABLE TO GGUSER;

grant dba to gguser;

SQL> alter database add supplemental log data;

SQL> select supplemental_log_data_min from v$database;

SUPPLEME

--------

YES

GGSCI (apt-ora1) 1> encrypt password Xxxxx1 encryptkey default

Using default key...

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 106

Encrypted password: xxxxx

Algorithm used: BLOWFISH

Instalación de GoldenGate en la máquina de contingencia

Instalamos GoldenGate en la máquina de contingencia siguiendo un procedimiento

similar al realizado para el RAC:

unzip /software/p16582701_112105_Linux-x86-64.zip

tar -xvf fbo_ggs_Linux_x64_ora11g_64bit.tar

GGSCI (apt-ora3) 1> create subdirs

GGSCI (apt-ora1) 2> edit params ./GLOBALS

GGSCHEMA GGUSER

CHECKPOINTTABLE gguser.chkpt

GGSCI (apt-ora1) 1> edit param mgr

port 7840

dynamicportlist 7841-7900

AutoStart ER *

AutoRestart ER *, retries 4, WaitMinutes 4

StartupValidationDelay 5

PurgeOldExtracts dirdat/*, UseCheckpoints, MinKeepDays 2

GGSCI (apt-ora1) 1> start mgr

SQL> create tablespace DATOS_GGS;

Tablespace creado.

CREATE USER GGUSER

IDENTIFIED BY "xxxx"

DEFAULT TABLESPACE DATOS_GGS

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

GRANT RESOURCE TO GGUSER;

GRANT CONNECT TO GGUSER;

ALTER USER GGUSER DEFAULT ROLE ALL;

GRANT UNLIMITED TABLESPACE TO GGUSER;

GRANT SELECT ANY DICTIONARY TO GGUSER;

GRANT SELECT ANY TABLE TO GGUSER;

GRANT CREATE TABLE TO GGUSER;

GRANT ALTER SESSION TO GGUSER;

GRANT CREATE SESSION TO GGUSER;

GRANT FLASHBACK ANY TABLE TO GGUSER;

GRANT LOCK ANY TABLE TO GGUSER;

grant dba to gguser;

SQL> alter database add supplemental log data;

SQL> select supplemental_log_data_min from v$database;

SUPPLEME

--------

YES

GGSCI (apt-ora3) 1> encrypt password Xxxxx1 encryptkey default

Using default key...

Encrypted password: xxxxxx

Algorithm used: BLOWFISH

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 107

Instalación de GoldenGate en el servidor ROSS

GoldenGate debe instalarse también en los servidores origen para poder capturar los

cambios de las bases de datos a replicar y enviarlos a la base de datos destino. En este

caso, la instalación difiere ligeramente porque se trata de una máquina Windows:

Descomprimimos en e:\ross\gg el archivo “p16367356_112105_WINNT.zip”.

E:\ross\gg>ggsci.exe

GGSCI (ecofin) 1> create subdirs

GGSCI (ecofin) 2> edit param ./GLOBALS

MGRSERVNAME GG_MGR_ROSS

GGSCHEMA GGUSER

CHECKPOINTTABLE gguser.chkpt

E:\ross\gg> install.exe ADDSERVICE

CREATE TABLESPACE DATOS_GGS DATAFILE

'E:\ROSS\DATA\ROSS\GGS01.DBF' SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M

LOGGING

ONLINE

PERMANENT

EXTENT MANAGEMENT LOCAL AUTOALLOCATE

BLOCKSIZE 8K

SEGMENT SPACE MANAGEMENT AUTO

FLASHBACK ON;

CREATE USER GGUSER

IDENTIFIED BY "xxxxx"

DEFAULT TABLESPACE DATOS_GGS

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

GRANT RESOURCE TO GGUSER;

GRANT CONNECT TO GGUSER;

ALTER USER GGUSER DEFAULT ROLE ALL;

GRANT UNLIMITED TABLESPACE TO GGUSER;

GRANT SELECT ANY DICTIONARY TO GGUSER;

GRANT SELECT ANY TABLE TO GGUSER;

GRANT CREATE TABLE TO GGUSER;

GRANT ALTER SESSION TO GGUSER;

GRANT CREATE SESSION TO GGUSER;

GRANT FLASHBACK ANY TABLE TO GGUSER;

GRANT LOCK ANY TABLE TO GGUSER;

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 108

grant dba to gguser;

GGSCI (ecofin) 1> edit param mgr

GGSCI (ecofin) 2> start mgr

SQL> alter database add supplemental log data;

SQL> select supplemental_log_data_min from v$database;

SUPPLEME

--------

YES

GGSCI (ecofin) 5> encrypt password Xxxxx1 encryptkey default

Using default key...

Encrypted password: xxxxx

Algorithm used: BLOWFISH

En el modo “classic capture” de GoldenGate, el proceso de captura obtiene los

cambios realizados a la base de datos a partir de la lectura de los logs generados por

ésta. Para tener más tiempo para capturar los logs, es conveniente que la base de datos

esté en modo “archivelog”. De esta forma, si el proceso de captura de GoldenGate no

puede obtener los cambios a partir de los redologs online, puede acudir a los archivelogs

generados para obtener la información requerida. Ponemos la base de datos ROSS en

modo archivelog :

SQL> select name from v$database;

NAME

---------

ROSS

SQL> shutdown immediate

SQL> startup mount

SQL> alter system set log_archive_dest_1='LOCATION=E:\ross\log' scope=spfile;

SQL> alter database archivelog;

SQL> shutdown immediate

SQL> startup mount

SQL> archive log list;

Modo log de la base de datos Modo de Archivado

Archivado automßtico Activado

Destino del archivo E:\ross\log

Secuencia de log en lÝnea mßs antigua 8389

Siguiente secuencia de log para archivar 8391

Secuencia de log actual 8391

SQL> alter database open;

SQL> alter system switch logfile;

Sistema modificado.

Usando exactamente el mismo procedimiento, configuramos el modo archivado en

otra de la bases de datos origen: APTAE.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 109

Replicación del esquema FIN

Una de las primeras tareas a la hora de replicar un esquema con GoldenGate es

comprobar que los objetos del esquema a migrar cumplen con los requisitos para la

replicación con GoldenGate. Para ello, Oracle suministra un script SQL que realiza esta

comprobación llamado “full-schemaCheckOracle_12072011.sql”.

Este fue el resultado del análisis de compatibilidad para el esquema FIN:

• Todos los tipos de datos implicados en las tablas están soportados

(incluyendo las tres columnas LONG y las tres columnas RAW).

• No hay tablas con NOLOGGING

• No hay "deferred constaints"

• No hay tablas con tamaño de fila > 2MB

• No hay tablas con datos comprimidos (COMPRESSED DATA)

• No hay tablas con índices de contexto o de dominio

• Las constraints definidas están soportadas

• No existen constraints de tipo "on delete cascade"

• Existen 138 triggers que habrá que deshabilitar en destino durante la

replicación

• No hay secuencias definidas

Sin embargo, de las 2014 tablas definidas, 201 no tenían definidos ningún tipo de

clave primaria y/o única. A falta de clave primaria/única GoldenGate necesita que

identifiquemos un subconjunto de campos cuyos valores permitan identificar de manera

unívoca cada registro de esas tablas.

Si no se identifican los campos que pueden actuar como clave primaria Oracle usa

TODOS los campos compatibles con GG como clave primaria. Esto tiene, entre otros,

dos inconvenientes principales:

• Pérdida de rendimiento tanto en la captura de cambios en origen como en la

aplicación de cambios en destino (al aplicar un cambio tipo DELETE o

UPDATE, GoldenGate añade una cláusula WHERE con todos los campos

compatibles con GG en la tabla)

• Puede que la combinación de valores de todos los campos no permita

identificar unívocamente a un registro con lo que, por ejemplo un DELETE

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 110

que afecta a una sola fila en origen puede afectar a muchas en destino si

todas ellas tienen los mismos valores en los campos que Oracle seleccionó

como clave (se puede limitar el impacto con la cláusula LIMITROWS pero

es una solución artificial que no garantiza el 100% de efectividad).

En este caso, el cliente se puso en contacto con los proveedores de la aplicación,

identificó a que tablas de las indicadas era preciso añadir PK o UK. El resto no sufrían

variación por lo que no eran problema para la replicación.

Uno de los requisitos para replicar esquemas con GoldenGate es que todos los

cambios a todos los campos de una fila queden registrados en el log de transacciones de

la base de datos. Por defecto esta característica no está habilitada por lo que es necesario

indicarlo explícitamente:

set echo off

set verify off

set pagesize 2000

set linesize 250

set trim on

set heading off

set feedback off

spool &&SCHEMA..add_trandata.obey

select 'add trandata &SCHEMA..'||table_name

from dba_tables where owner = '&SCHEMA' ;

spool off

add trandata FIN.AP_BATCH_TRAN_LINES

...

Comprobamos con scripts SQL que no nos hemos dejado ninguna tabla atrás:

select * from dba_objects

where owner='FIN'

and object_type = 'TABLE'

and object_name not like 'BIN$%'

and object_name not in (select table_name from dba_log_groups where owner = 'FIN');

Configuramos el proceso “extract” que capturará los cambios en la base de datos

ROSS y lo arrancamos:

GGSCI (ecofin) 4> edit param LRFIN1

extract LRFIN1

-- Local Extract para el esquema FIN

SETENV (ORACLE_HOME = "E:\oracle\product\10.2.0\db_1")

SETENV (ORACLE_SID = "ROSS")

SETENV (NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252)

userid gguser@ROSS, password xxxx, ENCRYPTKEY default

ExtTrail dirdat/L1

Table FIN.*;

ReportCount Every 30 minutes, Rate

Report at 01:00

ReportRollover at 01:15

--DDL Include Mapped

DiscardFile dirrpt/LRFIN1.dsc, Append

GGSCI (ecofin) 11> add extract LRFIN1, TRANLOG, BEGIN NOW

EXTRACT added.

GGSCI (ecofin) 12> add exttrail dirdat/L1, extract LRFIN1, MEGABYTES 100

EXTTRAIL added.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 111

GGSCI (ecofin) 20> start extract LRFIN1

Sending START request to MANAGER ('GG_MGR_ROSS') ...

EXTRACT LRFIN1 starting

GGSCI (ecofin) 22> info extract LRFIN1, detail

EXTRACT LRFIN1 Last Started 2013-04-23 11:34 Status RUNNING

Checkpoint Lag 00:00:00 (updated 00:00:09 ago)

Log Read Checkpoint Oracle Redo Logs

2013-04-23 11:35:23 Seqno 8516, RBA 34011136

SCN 0.3361681790 (3361681790)

Seguidamente configuramos el proceso “pump” que llevará los cambios desde el

servidor donde se ubica la base de datos ROSS hasta el RAC, su ubicación definitiva:

GGSCI (ecofin) 30> edit param PRFIN1

Extract PRFIN1

-- Extract tipo DataPump del esquema ROSS.FIN

SETENV (ORACLE_HOME = "E:\oracle\product\10.2.0\db_1")

SETENV (ORACLE_SID = "ROSS")

SETENV (NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252)

PassThru

RmtHost apt-ggate-vip, MgrPort 7840, TCPBUFSIZE 100000, COMPRESS

RmtTrail dirdat/R1

Table FIN.*;

ReportCount Every 30 minutes, Rate

Report at 01:00

ReportRollover at 01:15

DiscardFile dirrpt/PRFIN1.dsc, Append

DiscardRollover at 02:00 ON SUNDAY

GGSCI (ecofin) 32> add extract PRFIN1, EXTTRAILSOURCE dirdat/L1

EXTRACT added.

GGSCI (ecofin) 33> add rmttrail dirdat/R1, extract PRFIN1, MEGABYTES 100

RMTTRAIL added.

Y lo arrancamos:

GGSCI (ecofin) 38> start ext PRFIN1

Sending START request to MANAGER ('GG_MGR_ROSS') ...

EXTRACT PRFIN1 starting

GGSCI (ecofin) 39> info all

Program Status Group Lag at Chkpt Time Since Chkpt

MANAGER RUNNING

EXTRACT RUNNING LRFIN1 00:00:00 00:00:02

EXTRACT RUNNING PRFIN1 00:00:00 00:00:04

GGSCI (ecofin) 40> info ext PRFIN1

EXTRACT PRFIN1 Last Started 2013-04-23 12:38 Status RUNNING

Checkpoint Lag 00:00:00 (updated 00:00:05 ago)

Log Read Checkpoint File dirdat/L1000000

2013-04-23 12:39:15.000000 RBA 1541143

En este monmento, y ya capturando los cambios en origen, realizamos un “export”

consistente en el tiempo (a un SCN concreto):

E:\ross\log\EMPR>exp 'system@ross' owner=FIN file=expFIN.dmp log=expFIN.log statistics=none

consistent=y flashback_scn=3361941110

Export: Release 10.2.0.3.0 - Production on Mar Abr 23 14:11:44 2013

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

Contrase±a:

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 112

Conectado a: Oracle Database 10g Release 10.2.0.3.0 - Production

Exportaci¾n realizada en el juego de caracteres WE8DEC

y el juego de caracteres NCHAR AL16UTF16

el servidor utiliza el juego de caracteres WE8MSWIN1252 (posible conversión de

juego de caracteres)

Exportando los usuarios especificados ...

. exportando acciones y objetos de procedimiento pre-esquema

. exportando nombres de biblioteca de funciones ajenas para el usuario FIN

...

La exportación ha terminado correctamente y sin advertencias.

Antes de importar en destino, es necesario crear los esquemas, tablespaces y roles

referenciados:

CREATE ROLE GEM_USER NOT IDENTIFIED;

GRANT SELECT ON SYS.COL$ TO GEM_USER;

GRANT SELECT ON SYS.DBA_CLU_COLUMNS TO GEM_USER;

GRANT SELECT ON SYS.DEPENDENCY$ TO GEM_USER;

GRANT SELECT ON SYS.ICOL$ TO GEM_USER;

GRANT SELECT ON SYS.IND$ TO GEM_USER;

GRANT SELECT ON SYS.OBJ$ TO GEM_USER;

GRANT SELECT ON SYS.USER$ TO GEM_USER;

GRANT SELECT ON SYS.V_$PARAMETER TO GEM_USER;

GRANT SELECT ON SYS.V_$SESSION TO GEM_USER;

GRANT CREATE SESSION TO GEM_USER;

GRANT CREATE TRIGGER TO GEM_USER;

GRANT CREATE PROCEDURE TO GEM_USER;

CREATE ROLE GEM_DEV NOT IDENTIFIED;

GRANT CREATE VIEW TO GEM_DEV;

GRANT CREATE TABLE TO GEM_DEV;

GRANT ALTER SESSION TO GEM_DEV;

GRANT CREATE CLUSTER TO GEM_DEV;

GRANT CREATE DATABASE LINK TO GEM_DEV;

GRANT GEM_USER TO GEM_DEV;

CREATE ROLE GEM_DBA NOT IDENTIFIED;

GRANT SELECT ON SYS.DBA_ROLE_PRIVS TO GEM_DBA;

GRANT SELECT ON SYS.DBA_ROLES TO GEM_DBA;

GRANT SELECT ON SYS.DBA_TABLESPACES TO GEM_DBA;

GRANT SELECT ON SYS.DBA_USERS TO GEM_DBA;

GRANT DROP USER TO GEM_DBA WITH ADMIN OPTION;

GRANT ALTER USER TO GEM_DBA WITH ADMIN OPTION;

GRANT CREATE USER TO GEM_DBA WITH ADMIN OPTION;

GRANT DROP PUBLIC DATABASE LINK TO GEM_DBA WITH ADMIN OPTION;

GRANT CREATE PUBLIC DATABASE LINK TO GEM_DBA WITH ADMIN OPTION;

GRANT GEM_DEV TO GEM_DBA WITH ADMIN OPTION;

GRANT GEM_USER TO GEM_DBA WITH ADMIN OPTION;

SQL> CREATE ROLE APT_CONSULTOR_FACTURACION NOT IDENTIFIED;

Role created.

CREATE USER FIN

IDENTIFIED BY VALUES 'xxxxx'

DEFAULT TABLESPACE DATOS_FIN

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

-- 1 Role for FIN

GRANT GEM_DBA TO FIN WITH ADMIN OPTION;

ALTER USER FIN DEFAULT ROLE ALL;

-- 2 System Privileges for FIN

GRANT CREATE VIEW TO FIN WITH ADMIN OPTION;

GRANT CREATE TRIGGER TO FIN WITH ADMIN OPTION;

-- 1 Tablespace Quota for FIN

ALTER USER FIN QUOTA UNLIMITED ON DATOS_FIN;

-- 10 Object Privileges for FIN

GRANT SELECT ON SYS.CCOL$ TO FIN WITH GRANT OPTION;

GRANT SELECT ON SYS.CDEF$ TO FIN WITH GRANT OPTION;

GRANT SELECT ON SYS.COL$ TO FIN WITH GRANT OPTION;

GRANT SELECT ON SYS.CON$ TO FIN WITH GRANT OPTION;

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 113

GRANT SELECT ON SYS.ICOL$ TO FIN WITH GRANT OPTION;

GRANT SELECT ON SYS.IND$ TO FIN WITH GRANT OPTION;

GRANT SELECT ON SYS.OBJ$ TO FIN WITH GRANT OPTION;

GRANT SELECT ON SYS.SEG$ TO FIN WITH GRANT OPTION;

GRANT SELECT ON SYS.TS$ TO FIN WITH GRANT OPTION;

GRANT SELECT ON SYS.USER$ TO FIN WITH GRANT OPTION;

Comprobamos los sinónimos públicos en origen y los jobs definidos:

select * from dba_synonyms

where table_owner not in ('SYS', 'SYSTEM', 'WMSYS', 'EXFSYS', 'DMSYS',

'CTXSYS','XDB','ORDSYS','MDSYS', 'OLAPSYS','PERFSTAT','SYSMAN');

no rows selected.

select * from dba_jobs;

Sólo están definidos los jobs de STATSPACK y el del sistema con SYSMAN que

invoca EMD_MAINTENANCE.EXECUTE_EM_DBMS_JOB_PROCS();

Sólo existen objetos directorios del sistema por lo que no es preciso crear objetos

directorio de usuarios:

column directory_name format a30

column directory_path format a50

column owner format a25

set linesize 2000

select * from dba_directories;

Realizamos la importación inicial en destino:

[oracle@apt-ora1 backup]$ export NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252

[oracle@apt-ora1 backup]$ imp system file=expFIN.dmp log=impFIN.log fromuser=FIN

touser=FIN ignore=y

Import: Release 11.2.0.3.0 - Production on Tue Apr 23 17:39:39 2013

Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

Password:

Connected to: Oracle Database 11g Release 11.2.0.3.0 - 64bit Production

With the Real Application Clusters and Automatic Storage Management options

Export file created by EXPORT:V10.02.01 via conventional path

import done in WE8MSWIN1252 character set and AL16UTF16 NCHAR character set

export client uses WE8DEC character set (possible charset conversion)

. importing FIN's objects into FIN

. . importing table "ACCOUNT_TYPES" 6 rows imported

...

La importación fue correcta aunque fue necesario recompilar manualmente 12

vistas.

Deshabilitamos los triggers en destino:

select 'alter trigger '||owner||'.'||trigger_name||

' disable ;'

from all_triggers

where owner = '&SCHEMA';

alter trigger FIN.SALES_ORDER_LINE_DETAIL_QTYS disable ;

...

alter trigger FIN.AR_TRANSACTIONS disable ;

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 114

Ahora configuramos en el RAC el proceso replicador que aplicará los cambios a la

base de datos en RAC:

GGSCI (apt-ora1) 1> edit param RRFIN1

Replicat RRFIN1

-- Replicat para el esquema ROSS.FIN

SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1")

SETENV (ORACLE_SID = "APTORA")

SETENV (NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252)

userid gguser@APTORA, password xxxx, ENCRYPTKEY default

HandleCollisions

AssumeTargetDefs

Map FIN.*, Target FIN.* ;

GGSCI (apt-ora1) 10> dblogin userid gguser password Xxxxx1

GGSCI (apt-ora1) 11> add checkpointtable GGUSER.CHKPNT

GGSCI (apt-ora1) 3> add replicat RRFIN1, exttrail dirdat/R1

REPLICAT added.

GGSCI (apt-ora1) 19> edit param mgr

port 7840

AutoStart REPLICAT RRFIN1

AutoRestart REPLICAT RRFIN1, retries 4, WaitMinutes 4

-- Alfresco y Administracion Electronica

--AutoStart REPLICAT RALFOC31

--AutoRestart REPLICAT RALFOC31, retries 4, WaitMinutes 4

-- Mensajeria

--AutoStart REPLICAT RSIME1

--AutoRestart REPLICAT RSIME1, retries 4, WaitMinutes 4

StartupValidationDelay 5

userid gguser@APTORA, password xxx, ENCRYPTKEY default

PURGEDDLHISTORY MINKEEPDAYS 14 MAXKEEPDAYS 30

PURGEMARKERHISTORY MINKEEPDAYS 14 MAXKEEPDAYS 30

PurgeOldExtracts dirdat/*, UseCheckpoints, MinKeepDays 7

Y lo arrancamos:

GGSCI (apt-ora1) 20> stop mgr

GGSCI (apt-ora1) 21> start mgr

GGSCI (apt-ora1) 27> info all, detail

Program Status Group Lag at Chkpt Time Since Chkpt

MANAGER RUNNING

REPLICAT RUNNING RRFIN1 00:00:00 00:00:07

GGSCI (apt-ora1) 30> info replicat RRFIN1, detail

REPLICAT RRFIN1 Last Started 2013-04-23 23:50 Status RUNNING

Checkpoint Lag 00:00:00 (updated 00:00:00 ago)

Log Read Checkpoint File dirdat/R1000000

2013-04-23 14:36:56.081558 RBA 3225944

Extract Source Begin End

dirdat/R1000000 * Initialized * 2013-04-23 14:36

dirdat/R1000000 * Initialized * First Record

Current directory /u01/gg

Report file /u01/gg/dirrpt/RRFIN1.rpt

Parameter file /u01/gg/dirprm/rrfin1.prm

Checkpoint file /u01/gg/dirchk/RRFIN1.cpr

Checkpoint table GGUSER.CHKPNT

Process file /u01/gg/dirpcs/RRFIN1.pcr

Stdout file /u01/gg/dirout/RRFIN1.out

Error log /u01/gg/ggserr.log

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 115

Alternativamente podríamos haber arrancado el “replicat” con

GGSCI (apt-ora1) 8> start rep RRFIN1 , aftercsn 3361941110

Sending START request to MANAGER ...

REPLICAT RRFIN1 starting

Una vez sincronizado el esquema comentamos la línea del “handle collisions”:

GGSCI (apt-ora1) 37> stop replicat RRFIN1

Sending STOP request to REPLICAT RRFIN1 ...

Request processed.

GGSCI (apt-ora1) 38> start replicat RRFIN1

Sending START request to MANAGER ...

REPLICAT RRFIN1 starting

Comprobamos en una tabla con campos que contengan caracteres no estándar

(acentos, etc..) que tanto en origen como en destino, los caracteres “extraños” se

codifican correctamente:

select dump(code_description, 16), code_description from fin.GL_TRANSACTION_TYPES;

En este momento los dos esquemas, origen y destino quedaron sincronizados. En un

momento posterior, cuando el cliente lo indicó, se detuvo la aplicación que usa el

esquema, se canceló la replicación entre ROSS y el RAC, se redirigió la aplicación a la

base de datos en el RAC, y ya quedó esta base de datos como base de datos en

producción.

Aplicación del Patch Set Update al software de Oracle en el RAC

Los “patchsets updates” son parches de seguridad y rendimiento que libera Oracle

periódicamente para sus productos y para los que recomienda encarecidamente su

aplicación. Aplicaremos el PSU de abril al software de Oracle instalado en el RAC:

Actualizamos OPatch a la versión: 11.2.0.3.4 en los ORACLE_HOME y

GRID_HOME de los dos nodos:

[oracle@apt-ora1 dbhome_1]$ rm -rf OPatch-old/

[oracle@apt-ora1 dbhome_1]$ mv OPatch OPatch-old

[oracle@apt-ora1 dbhome_1]$ unzip /software/p6880880_112000_Linux-x86-64.zip

Creamos el fichero de recpuesta automatic para OCM desde el HOME del Grid:

[grid@apt-ora1 grid]$ cd OPatch/ocm/bin/

[grid@apt-ora1 bin]$ ./emocmrsp -no_banner

Detenemos el EM en ambos nodos:

[oracle@apt-ora1 ~]$ emctl stop dbconsole

[oracle@apt-ora1 ~]$ ssh apt-ora2

[oracle@apt-ora2 ~]$ emctl stop dbconsole

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 116

Detenemos la base de datos

[oracle@apt-ora1 ~]$ srvctl stop database -d APTORA

Detenemos GoldenGatr (sólo el proceso MGR ya que no tenemos ningún otro

proceso tipo captura, replicación, etc. Por este mismo motivo no tenemos procesos

“pump” de GoldenGate en origen):

[oracle@apt-ora1 ~]$ cd /u01/gg/

[oracle@apt-ora1 gg]$ ./ggsci

GGSCI (apt-ora1) 2> info all

Program Status Group Lag at Chkpt Time Since Chkpt

MANAGER RUNNING

REPLICAT STOPPED RRFIN1 00:00:00 67:41:17

GGSCI (apt-ora1) 3> stop mgr

Manager process is required by other GGS processes.

Are you sure you want to stop it (y/n)? y

Sending STOP request to MANAGER ...

Request processed.

Manager stopped.

Desmontamos los filesystems ACFS (en ambos nodos):

[root@apt-ora1 ~]# umount /u01/gg

[root@apt-ora1 ~]# umount /u01/backup

[root@apt-ora1 ~]# umount /u01/gg

[root@apt-ora1 ~]# umount /u01/backup

[root@apt-ora2 11.2.0]# acfsutil info fs

acfsutil info fs: ACFS-03036: no mounted ACFS file systems

[root@apt-ora1 ~]# acfsutil info fs

acfsutil info fs: ACFS-03036: no mounted ACFS file systems

Detenemos la instalación del PSU hasta que Oracle de indicaciones de que hacer

con el conflicto entre el parche 16083653 (PSU April) y el parche 12983005 (2.6.39

(UEK) support for ACFS que incluye el PSU de Enero).

Volvemos a arrancar la base de datos, montar los sistemas de ficheros ACFS,

arrancar EM y arrancar GoldenGate:

[oracle@apt-ora1 ~]$ srvctl start database -d APTORA

En ambos nodos:

mount -t acfs /dev/asm/gg-220 /u01/gg

mount –t acfs /dev/asm/backup-328 /u01/backup

En el nodo en el que tengamos la VIP de GoldenGate:

[oracle@apt-ora1 ~]$ cd /u01/gg/

[oracle@apt-ora1 gg]$ ./ggsci

GGSCI (apt-ora1) 1> start mgr

Manager started.

Arrancamos la DB Console en ambos nodos:

[oracle@apt-ora1 gg]$ export ORACLE_UNQNAME=APTORA

[oracle@apt-ora1 gg]$ emctl start dbconsole

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 117

Configuración de GoldenGate en Alta Disponibilidad en el RAC

Realizamos la configuración de GoldenGate en HA y aprovechamos para instalar la

nueva versión de los “bundle agents”. Comenzamos deteniendo GoldenGate:

GGSCI (apt-ora1) 2> stop mgr

El filesystem compartido para GoldenGate se creó en su momento como de tipo

“General Purpouse ACFS” y debe ser del tipo “CRS Managed ACFS”, cambiamos de

tipo.:

[root@apt-ora1 ~]# /bin/umount -t acfs /u01/gg

[root@apt-ora2 ~]# /bin/umount -t acfs /u01/gg

[root@apt-ora1 ~]# acfsutil registry

Mount Object:

Device: /dev/asm/gg-220

Mount Point: /u01/gg

Disk Group: GG

Volume: GG

Options: none

Nodes: all

Mount Object:

Device: /dev/asm/backup-328

Mount Point: /u01/backup

Disk Group: BACKUP

Volume: BACKUP

Options: none

Nodes: all

[root@apt-ora1 ~]# acfsutil registry -d /dev/asm/gg-220

acfsutil registry: successfully removed ACFS volume /dev/asm/gg-220 from Oracle Registry

[root@apt-ora1 ~]# srvctl add filesystem -d /dev/asm/gg-220 -m /u01/gg -v GG -g GG -u grid

[root@apt-ora1 ~]# srvctl start filesystem -d /dev/asm/gg-220

Re-creamos la VIP de GoldenGate con permisos para el usuario “oracle” (la

habíamos creado con permisos para el usuario “root”:

[root@apt-ora1 apt-ora1]# crsctl stop res apt-ggate-vip

[root@apt-ora1 apt-ora1]# appvipcfg delete -vipname apt-ggate-vip

[root@apt-ora1 apt-ora1]# /u01/app/11.2.0/grid/bin/appvipcfg create

-network=1 -ip=10.5.10.26 -vipname=apt-ggate-vip -user=oracle

Desinstalamos la versión anterior de los bundle agents e instalamos la nueva:

[grid@apt-ora1 ~]$ cd /u01/app/grid/xag_home/

[grid@apt-ora1 xag_home]$ ./xagsetup.sh --deinstall --force --all_nodes

[grid@apt-ora1 grid]$ unzip /software/xagpack_130320.zip

[grid@apt-ora1 grid]$ cd xag/

[grid@apt-ora1 xag]$ ./xagsetup.sh --install --directory /u01/app/grid/xag_home --all_nodes

[oracle@apt-ora1 xag_home]$ cd /u01/app/grid/xag_home

[oracle @apt-ora1 xag_home]$ export CRS_HOME=/u01/app/11.2.0/grid

[oracle @apt-ora1 xag_home]$ ./agctl.pl add goldengate gg_1 --gg_home /u01/gg

--instance_type both --nodes apt-ora1,apt-ora2 --filesystems ora.gg.gg.acfs

--oracle_home /u01/app/oracle/product/11.2.0/dbhome_1 --databases ora.aptora.db

--monitor_extracts --monitor_replicats --vip_name apt-ggate-vip

[oracle@apt-ora1 xag_home]$ ./agctl.pl start goldengate gg_1 --node apt-ora1

[oracle@apt-ora1 xag_home]$ ./agctl.pl status goldengate gg_1

Goldengate instance 'gg_1' is running on apt-ora1

[root@apt-ora1 apt-ora1]# crsctl stat res -t

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 118

--------------------------------------------------------------------------------

NAME TARGET STATE SERVER STATE_DETAILS

--------------------------------------------------------------------------------

Local Resources

--------------------------------------------------------------------------------

ora.BACKUP.dg

ONLINE ONLINE apt-ora1

ONLINE ONLINE apt-ora2

ora.CRS.dg

ONLINE ONLINE apt-ora1

ONLINE ONLINE apt-ora2

ora.DATA.dg

ONLINE ONLINE apt-ora1

ONLINE ONLINE apt-ora2

ora.FRA.dg

ONLINE ONLINE apt-ora1

ONLINE ONLINE apt-ora2

ora.GG.dg

ONLINE ONLINE apt-ora1

ONLINE ONLINE apt-ora2

ora.LISTENER.lsnr

ONLINE ONLINE apt-ora1

ONLINE ONLINE apt-ora2

ora.asm

ONLINE ONLINE apt-ora1 Started

ONLINE ONLINE apt-ora2 Started

ora.gg.gg.acfs

ONLINE ONLINE apt-ora1 mounted on /u01/gg

ONLINE ONLINE apt-ora2 mounted on /u01/gg

ora.gsd

OFFLINE OFFLINE apt-ora1

OFFLINE OFFLINE apt-ora2

ora.net1.network

ONLINE ONLINE apt-ora1

ONLINE ONLINE apt-ora2

ora.ons

ONLINE ONLINE apt-ora1

ONLINE ONLINE apt-ora2

ora.registry.acfs

ONLINE ONLINE apt-ora1

ONLINE ONLINE apt-ora2

--------------------------------------------------------------------------------

Cluster Resources

--------------------------------------------------------------------------------

apt-ggate-vip

1 ONLINE ONLINE apt-ora1

ora.LISTENER_SCAN1.lsnr

1 ONLINE ONLINE apt-ora1

ora.LISTENER_SCAN2.lsnr

1 ONLINE ONLINE apt-ora2

ora.LISTENER_SCAN3.lsnr

1 ONLINE ONLINE apt-ora2

ora.apt-ora1.vip

1 ONLINE ONLINE apt-ora1

ora.apt-ora2.vip

1 ONLINE ONLINE apt-ora2

ora.aptora.db

1 ONLINE ONLINE apt-ora1 Open

2 ONLINE ONLINE apt-ora2 Open

ora.cvu

1 ONLINE ONLINE apt-ora2

ora.oc4j

1 ONLINE ONLINE apt-ora2

ora.scan1.vip

1 ONLINE ONLINE apt-ora1

ora.scan2.vip

1 ONLINE ONLINE apt-ora2

ora.scan3.vip

1 ONLINE ONLINE apt-ora2

xag.gg_1.goldengate

1 ONLINE ONLINE apt-ora1

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 119

Probamos el failover:

[oracle@apt-ora1 xag_home]$ ./agctl.pl relocate goldengate gg_1 --node apt-ora2

[root@apt-ora1 apt-ora1]# crsctl stat res xag.gg_1.goldengate

NAME=xag.gg_1.goldengate

TYPE=xag.goldengate.type

TARGET=ONLINE

STATE=ONLINE on apt-ora2

[root@apt-ora1 apt-ora1]# crsctl stat res apt-ggate-vip

NAME=apt-ggate-vip

TYPE=app.appvip_net1.type

TARGET=ONLINE

STATE=ONLINE on apt-ora2

[oracle@apt-ora1 xag_home]$ ./agctl.pl relocate goldengate gg_1 --node apt-ora1

[root@apt-ora1 apt-ora1]# crsctl stat res xag.gg_1.goldengate

NAME=xag.gg_1.goldengate

TYPE=xag.goldengate.type

TARGET=ONLINE

STATE=ONLINE on apt-ora1

[root@apt-ora1 apt-ora1]# crsctl stat res apt-ggate-vip

NAME=apt-ggate-vip

TYPE=app.appvip_net1.type

TARGET=ONLINE

STATE=ONLINE on apt-ora1

Preparamos el script de autoarranque de la base de datos, listener, EM y GG en el

servidor de contingencia:

[root@apt-ora3 ~]# cd /etc/init.d/

[root@apt-ora3 init.d]# vi dbora

#!/bin/bash

# chkconfig: 345 99 10

# description: Oracle auto start-stop script.

# Set ORA_OWNER to the user id of the owner of the

# Oracle database in ORA_HOME.

ORA_OWNER=oracle

RETVAL=0

case "$1" in

'start')

# Start the Oracle databases:

# The following command assumes that the oracle login

# will not prompt the user for any values

su - $ORA_OWNER -c "/home/oracle/EMPR/ora_start.sh"

touch /var/lock/subsys/oracle

;;

'stop')

# Stop the Oracle databases:

# The following command assumes that the oracle login

# will not prompt the user for any values

su - $ORA_OWNER -c "/home/oracle/EMPR/ora_stop.sh"

rm -f /var/lock/subsys/oracle

;;

*)

echo $"Usage: $0 {start|stop}"

RETVAL=1

esac

exit $RETVAL

[root@apt-ora3 init.d]# chmod 750 dbora

[root@apt-ora3 init.d]# chkconfig --add dbora

[oracle@apt-ora3 ~]$ cat /etc/oratab

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 120

# This file is used by ORACLE utilities. It is created by root.sh

# and updated by either Database Configuration Assistant while creating

# a database or ASM Configuration Assistant while creating ASM instance.

# A colon, ':', is used as the field terminator. A new line terminates

# the entry. Lines beginning with a pound sign, '#', are comments.

#

# Entries are of the form:

# $ORACLE_SID:$ORACLE_HOME:<N|Y>:

#

# The first and second fields are the system identifier and home

# directory of the database respectively. The third filed indicates

# to the dbstart utility that the database should , "Y", or should not,

# "N", be brought up at system boot time.

#

# Multiple entries with the same $ORACLE_SID are not allowed.

#

#

APTORA2:/u01/app/oracle/product/11.2.0/dbhome_1:Y

[oracle@apt-ora3 ~]$ cd /home/oracle/EMPR/

[oracle@apt-ora3 EMPR]$ cat ora_start.sh

#!/bin/bash

# script to start the Oracle database, listener, dbconsole and GoldenGate

export ORACLE_SID=APTORA2

export ORACLE_UNQNAME=APTORA2

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1

export GG_HOME=/u01/gg

# start the listener and the database

$ORACLE_HOME/bin/dbstart $ORACLE_HOME

# start the Enterprise Manager db console

$ORACLE_HOME/bin/emctl start dbconsole

# start GoldenGate

$GG_HOME/ggsci PARAMFILE /home/oracle/EMPR/startGG

exit 0

[oracle@apt-ora3 EMPR]$ cat ora_stop.sh

#!/bin/bash

# script to stop the Oracle database, listener, dbconsole and GoldenGate

export ORACLE_SID=APTORA2

export ORACLE_UNQNAME=APTORA2

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1

export GG_HOME=/u01/gg

# stop GoldenGate

$GG_HOME/ggsci PARAMFILE /home/oracle/EMPR/stopGG

# stop the Enterprise Manager db console

$ORACLE_HOME/bin/emctl stop dbconsole

# stop the listener and the database

$ORACLE_HOME/bin/dbshut $ORACLE_HOME

exit 0

[oracle@apt-ora3 EMPR]$ cat startGG

start manager

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 121

exit

[oracle@apt-ora3 EMPR]$ cat stopGG

stop extract *

stop replicat *

stop manager !

exit

Instalación de GoldenGate en la máquina APTAE

Descomprimimos el fichero “p14768905_112104_MSWIN-x86-64.zip” en el

directorio raíz de GG (E:\DATAFILE\GG).

E:\DATAFILE\GG>ggsci.exe

GGSCI (Apt-AE-Ora) 1> create subdirs

Creating subdirectories under current directory E:\DATAFILE\GG

Parameter files E:\DATAFILE\GG\dirprm: already exists

Report files E:\DATAFILE\GG\dirrpt: created

Checkpoint files E:\DATAFILE\GG\dirchk: created

Process status files E:\DATAFILE\GG\dirpcs: created

SQL script files E:\DATAFILE\GG\dirsql: created

Database definitions files E:\DATAFILE\GG\dirdef: created

Extract data files E:\DATAFILE\GG\dirdat: created

Temporary files E:\DATAFILE\GG\dirtmp: created

Stdout files E:\DATAFILE\GG\dirout: created

GGSCI (Apt-AE-Ora) 2> edit param ./GLOBALS

MGRSERVNAME GG_MGR_APTAE

GGSCHEMA GGUSER

CHECKPOINTTABLE gguser.chkpt

E:\DATAFILE\GG>install.exe ADDSERVICE

CREATE TABLESPACE DATOS_GGS DATAFILE

'E:\DATAFILE\APTAE\GGS01.DBF' SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M

LOGGING

ONLINE

PERMANENT

EXTENT MANAGEMENT LOCAL AUTOALLOCATE

BLOCKSIZE 8K

SEGMENT SPACE MANAGEMENT AUTO

FLASHBACK ON;

CREATE USER GGUSER

IDENTIFIED BY "Xxxxx1"

DEFAULT TABLESPACE DATOS_GGS

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

GRANT RESOURCE TO GGUSER;

GRANT CONNECT TO GGUSER;

ALTER USER GGUSER DEFAULT ROLE ALL;

GRANT UNLIMITED TABLESPACE TO GGUSER;

GRANT SELECT ANY DICTIONARY TO GGUSER;

GRANT SELECT ANY TABLE TO GGUSER;

GRANT CREATE TABLE TO GGUSER;

GRANT ALTER SESSION TO GGUSER;

GRANT CREATE SESSION TO GGUSER;

GRANT FLASHBACK ANY TABLE TO GGUSER;

GRANT LOCK ANY TABLE TO GGUSER;

grant dba to gguser;

GGSCI (Apt-AE-Ora) 1> edit param mgr

port 7840

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 122

--AutoStart ER *

--AutoRestart ER *, retries 4, WaitMinutes 4

--AutoStart extract LALFOC31

--AutoRestart extract LALFOC31, retries 4, WaitMinutes 4

--AutoStart extract PALFOC31

--AutoRestart extract PALFOC31, retries 4, WaitMinutes 4

--AutoStart extract LSIME1

--AutoRestart extract LSIME1, retries 4, WaitMinutes 4

--AutoStart extract PSIME1

--AutoRestart extract PSIME1, retries 4, WaitMinutes 4

StartupValidationDelay 5

PurgeOldExtracts dirdat/*, UseCheckpoints, MinKeepDays 2

GGSCI (Apt-AE-Ora) 2> start mgr

GGSCI (Apt-AE-Ora) 3> info mgr

alter database add supplemental log data;

Database altered.

select supplemental_log_data_min from v$database;

SUPPLEME

--------

YES

GGSCI (Apt-AE-Ora) 4> encrypt password xxxxx1 encryptkey default

Using default key...

Encrypted password: xxxxxx

Algorithm used: BLOWFISH

Migración de los esquemas de Alfresco y Administración Electrónica

El estudio preliminar de compatibilidad con GoldenGate del esquema ALF

mediante el script de chequeo fue satisfactorio por lo que podemos migrarlo sin

problemas. Comenzamos creando el usuario y objetos dependientes en la base de datos

del RAC.

Todos los objetos de ALF están contenidos en un único tablespace: ALF_PRO_TS

CREATE TABLESPACE ALF_PRO_TS DATAFILE SIZE 2048M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

Creamos el usuario:

CREATE USER ALF

IDENTIFIED BY VALUES 'xxxxxxx'

DEFAULT TABLESPACE ALF_PRO_TS

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

-- 1 Role for ALF

GRANT CONNECT TO ALF;

ALTER USER ALF DEFAULT ROLE ALL;

-- 8 System Privileges for ALF

GRANT CREATE SEQUENCE TO ALF;

GRANT CREATE SYNONYM TO ALF;

GRANT CREATE SESSION TO ALF;

GRANT UNLIMITED TABLESPACE TO ALF;

GRANT CREATE TRIGGER TO ALF;

GRANT CREATE PROCEDURE TO ALF;

GRANT CREATE VIEW TO ALF;

GRANT CREATE TABLE TO ALF;

Tiene secuencias. Hay que instalar soporte para secuencias de GoldenGate tanto en

origen como en destino:

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 123

SQL> select name from v$database;

NAME

---------

APTAE

SQL> spool sequence.txt

SQL> @sequence

Ahora en destino:

[oracle@apt-ora1 gg]$ sqlplus "/as sysdba"

SQL*Plus: Release 11.2.0.3.0 Production on Thu May 2 17:40:42 2013

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

SQL> @sequence

Please enter the name of a schema for the GoldenGate database objects:

GGUSER

Setting schema name to GGUSER

Aprovechamos para instalarlo también en contingencia:

[oracle@apt-ora3 gg]$ sqlplus "/ as sysdba"

SQL*Plus: Release 11.2.0.3.0 Production on Thu May 2 17:42:35 2013

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

Conectado a:

Oracle Database 11g Release 11.2.0.3.0 - 64bit Production

SQL> @sequence

Preparamos el script de configuración del proceso “extract” de los esquemas de

Alfresco y de Administración Electrónica en APTAE:

GGSCI (Apt-AE-Ora) 1> edit param LALF_OC31

extract LALFOC31

-- Local Extract para los esquemas de Alfresco y Administración Electrónica

SETENV (ORACLE_HOME = "C:\oracle\product\10.2.0\db_1")

SETENV (ORACLE_SID = "APTAE")

SETENV (NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252)

userid gguser@APTAE, password xxxx, ENCRYPTKEY default

ExtTrail dirdat/L1

Table ALF.*;

Table OC3B.*;

Table OC3C.*;

Table OC3EC.*;

Table OC3ES.*;

Table OC3F.*;

Table OC3RC.*;

Table OC3RS.*;

Table EAREGISTRO.*;

Sequence ALF.*;

Sequence OC3B.*;

Sequence OC3C.*;

Sequence OC3EC.*;

Sequence OC3ES.*;

Sequence OC3F.*;

Sequence OC3RC.*;

Sequence OC3RS.*;

Sequence EAREGISTRO.*;

ReportCount Every 30 minutes, Rate

Report at 01:00

ReportRollover at 01:15

--DDL Include Mapped

DiscardFile dirrpt/LALFOC31.dsc, Append

DiscardRollover at 02:00

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 124

Preparamos el Pump de los esquemas de Alfresco y de Administración Electrónica

en APTAE:

GGSCI (Apt-AE-Ora) 1> edit param PALFOC31

Extract PALFOC31

-- Extract tipo DataPump para los esquemas de Alfresco y Administración Electrónica

SETENV (ORACLE_HOME = "C:\oracle\product\10.2.0\db_1")

SETENV (ORACLE_SID = "APTAE")

SETENV (NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252)

PassThru

RmtHost apt-ggate-vip, MgrPort 7840, TCPBUFSIZE 100000, COMPRESS

RmtTrail dirdat/R2

Table ALF.*;

Table OC3B.*;

Table OC3C.*;

Table OC3EC.*;

Table OC3ES.*;

Table OC3F.*;

Table OC3RC.*;

Table OC3RS.*;

Table EAREGISTRO.*;

Sequence ALF.*;

Sequence OC3B.*;

Sequence OC3C.*;

Sequence OC3EC.*;

Sequence OC3ES.*;

Sequence OC3F.*;

Sequence OC3RC.*;

Sequence OC3RS.*;

Sequence EAREGISTRO.*;

ReportCount Every 30 minutes, Rate

Report at 01:00

ReportRollover at 01:15

DiscardFile dirrpt/PALFOC31.dsc, Append

DiscardRollover at 02:00

Añadimos el extract y el fichero “trail”:

GGSCI (Apt-AE-Ora) 2> add extract LALFOC31, TRANLOG, BEGIN NOW

EXTRACT added.

GGSCI (Apt-AE-Ora) 3> add exttrail dirdat/L1, extract LALFOC31, MEGABYTES 100

EXTTRAIL added.

y el “pump” y el “remote trail”:

GGSCI (Apt-AE-Ora) 244> add extract PALFOC31, EXTTRAILSOURCE dirdat/L1

EXTRACT added.

GGSCI (Apt-AE-Ora) 245> add rmttrail dirdat/R2, extract PALFOC31, MEGABYTES 100

RMTTRAIL added.

Habilitamos “supplemental log data” para las tablas de los esquemas a replicar:

GGSCI (Apt-AE-Ora) 4> dblogin userid gguser password xxx;

GGSCI (ecofin) 2> add schematrandata FIN;

2013-04-22 11:18:56 ERROR OGG-01783 Cannot verify existence of table function

that is required to enable schema level supplemental logging, failed to find function.

Nos encontramos con el mismo bug. Lo hacemos de forma manual:

set feedback off

spool &&SCHEMA..add_trandata.obey

select 'add trandata &SCHEMA..'||table_name

from dba_tables where owner = '&SCHEMA' ;

spool off

GGSCI (Apt-AE-Ora) 6> add trandata ALF.ALF_APPLIED_PATCH

Logging of supplemental redo data enabled for table ALF.ALF_APPLIED_PATCH.

...

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 125

Sincronización inicial de las secuencias:

GGSCI (Apt-AE-Ora) 253> flush sequence alf.*

Successfully flushed 45 sequence(s) alf.*

GGSCI (Apt-AE-Ora) 254> flush sequence OC3B.*

Successfully flushed 1 sequence(s) OC3B.*

GGSCI (Apt-AE-Ora) 255> flush sequence OC3C.*

Successfully flushed 1 sequence(s) OC3C.*

GGSCI (Apt-AE-Ora) 256> flush sequence OC3EC.*

Successfully flushed 1 sequence(s) OC3EC.*

GGSCI (Apt-AE-Ora) 257> flush sequence OC3ES.*

Successfully flushed 1 sequence(s) OC3ES.*

GGSCI (Apt-AE-Ora) 258> flush sequence OC3F.*

Successfully flushed 20 sequence(s) OC3F.*

GGSCI (Apt-AE-Ora) 259> flush sequence OC3RC.*

Successfully flushed 1 sequence(s) OC3RC.*

GGSCI (Apt-AE-Ora) 260> flush sequence OC3RS.*

Successfully flushed 2 sequence(s) OC3RS.*

GGSCI (Apt-AE-Ora) 261> flush sequence EAREGISTRO.*

Successfully flushed 2 sequence(s) EAREGISTRO.*

Lanzamos el export consistente y lo llevamos a destino (ocupa 520MB):

select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER

------------------------

3371802643

E:\DATAFILE>exp system owner=ALF,OC3B,OC3C,OC3EC,OC3ES,OC3F,OC3RC,OC3RS,EAREGISTRO

file=expAPTAE1.dmp log=expAPTAE1.log statistics=none consistent=y flashback_scn=3371802643

Export: Release 10.2.0.1.0 - Production on Vie May 3 00:37:51 2013

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

Contrase±a:

Conectado a: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production

With the Partitioning, OLAP and Data Mining options

Exportaci¾n realizada en el juego de caracteres WE8MSWIN1252

y el juego de caracteres NCHAR AL16UTF16

Exportando los usuarios especificados ...

. exportando acciones y objetos de procedimiento pre-esquema

. exportando nombres de biblioteca de funciones ajenas para el usuario ALF

. . .

. exportando vistas materializadas

. exportando logs de instantßneas

. exportando colas de trabajo

. exportando grupos de refrescamiento y secundarios

. exportando dimensiones

. exportando acciones y objetos de procedimiento post-esquema

. exportando estadÝsticas

La exportaci¾n ha terminado correctamente y sin advertencias.

Creamos en destino los esquemas y objetos dependientes restantes:

CREATE TABLESPACE OC3B_PRO_INDEX_TS DATAFILE SIZE 1050M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE OC3B_PRO_TS DATAFILE SIZE 368M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE OC3C_PRO_INDEX_TS DATAFILE SIZE 5M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE OC3C_PRO_TS DATAFILE SIZE 5M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE OC3EC_PRO_TS DATAFILE SIZE 5M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE OC3ES_PRO_INDEX_TS DATAFILE SIZE 5M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE OC3ES_PRO_TS DATAFILE SIZE 5M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE OC3F_PRO_INDEX_TS DATAFILE AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE OC3F_PRO_TS DATAFILE SIZE 1505M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE OC3RC_PRO_INDEX_TS DATAFILE SIZE 5M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE OC3RC_PRO_TS DATAFILE SIZE 5M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE OC3RS_PRO_INDEX_TS DATAFILE SIZE 5M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE OC3RS_PRO_TS DATAFILE SIZE 5M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 126

CREATE TABLESPACE EAREGISTRO_PRO_TS DATAFILE SIZE 10M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

-- DROP USER OC3B CASCADE;

CREATE USER OC3B

IDENTIFIED BY VALUES 'xxx'

DEFAULT TABLESPACE OC3B_PRO_TS

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

-- 1 Role for OC3B

GRANT CONNECT TO OC3B;

ALTER USER OC3B DEFAULT ROLE ALL;

-- 8 System Privileges for OC3B

GRANT CREATE TRIGGER TO OC3B;

GRANT CREATE VIEW TO OC3B;

GRANT UNLIMITED TABLESPACE TO OC3B;

GRANT CREATE SESSION TO OC3B;

GRANT CREATE PROCEDURE TO OC3B;

GRANT CREATE SYNONYM TO OC3B;

GRANT CREATE SEQUENCE TO OC3B;

GRANT CREATE TABLE TO OC3B;

-- DROP USER OC3C CASCADE;

CREATE USER OC3C

IDENTIFIED BY VALUES 'xxxx'

DEFAULT TABLESPACE OC3C_PRO_TS

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

-- 1 Role for OC3C

GRANT CONNECT TO OC3C;

ALTER USER OC3C DEFAULT ROLE ALL;

-- 8 System Privileges for OC3C

GRANT UNLIMITED TABLESPACE TO OC3C;

GRANT CREATE TRIGGER TO OC3C;

GRANT CREATE VIEW TO OC3C;

GRANT CREATE TABLE TO OC3C;

GRANT CREATE PROCEDURE TO OC3C;

GRANT CREATE SEQUENCE TO OC3C;

GRANT CREATE SYNONYM TO OC3C;

GRANT CREATE SESSION TO OC3C;

-- DROP USER OC3EC CASCADE;

CREATE USER OC3EC

IDENTIFIED BY VALUES 'xxxxx'

DEFAULT TABLESPACE OC3EC_PRO_TS

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

-- 1 Role for OC3EC

GRANT CONNECT TO OC3EC;

ALTER USER OC3EC DEFAULT ROLE ALL;

-- 8 System Privileges for OC3EC

GRANT CREATE SEQUENCE TO OC3EC;

GRANT UNLIMITED TABLESPACE TO OC3EC;

GRANT CREATE SESSION TO OC3EC;

GRANT CREATE TRIGGER TO OC3EC;

GRANT CREATE PROCEDURE TO OC3EC;

GRANT CREATE SYNONYM TO OC3EC;

GRANT CREATE TABLE TO OC3EC;

GRANT CREATE VIEW TO OC3EC;

-- DROP USER OC3ES CASCADE;

CREATE USER OC3ES

IDENTIFIED BY VALUES 'xxxx'

DEFAULT TABLESPACE OC3ES_PRO_TS

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

-- 1 Role for OC3ES

GRANT CONNECT TO OC3ES;

ALTER USER OC3ES DEFAULT ROLE ALL;

-- 8 System Privileges for OC3ES

GRANT UNLIMITED TABLESPACE TO OC3ES;

GRANT CREATE TRIGGER TO OC3ES;

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 127

GRANT CREATE PROCEDURE TO OC3ES;

GRANT CREATE SYNONYM TO OC3ES;

GRANT CREATE SEQUENCE TO OC3ES;

GRANT CREATE VIEW TO OC3ES;

GRANT CREATE TABLE TO OC3ES;

GRANT CREATE SESSION TO OC3ES;

-- DROP USER OC3F CASCADE;

CREATE USER OC3F

IDENTIFIED BY VALUES 'xxxx'

DEFAULT TABLESPACE OC3F_PRO_TS

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

-- 1 Role for OC3F

GRANT CONNECT TO OC3F;

ALTER USER OC3F DEFAULT ROLE ALL;

-- 8 System Privileges for OC3F

GRANT CREATE VIEW TO OC3F;

GRANT CREATE SESSION TO OC3F;

GRANT CREATE TRIGGER TO OC3F;

GRANT CREATE PROCEDURE TO OC3F;

GRANT CREATE TABLE TO OC3F;

GRANT CREATE SYNONYM TO OC3F;

GRANT CREATE SEQUENCE TO OC3F;

GRANT UNLIMITED TABLESPACE TO OC3F;

-- DROP USER OC3RC CASCADE;

CREATE USER OC3RC

IDENTIFIED BY VALUES 'xxxxx'

DEFAULT TABLESPACE OC3RC_PRO_TS

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

-- 1 Role for OC3RC

GRANT CONNECT TO OC3RC;

ALTER USER OC3RC DEFAULT ROLE ALL;

-- 8 System Privileges for OC3RC

GRANT CREATE SYNONYM TO OC3RC;

GRANT CREATE TRIGGER TO OC3RC;

GRANT CREATE TABLE TO OC3RC;

GRANT CREATE SESSION TO OC3RC;

GRANT CREATE PROCEDURE TO OC3RC;

GRANT CREATE SEQUENCE TO OC3RC;

GRANT CREATE VIEW TO OC3RC;

GRANT UNLIMITED TABLESPACE TO OC3RC;

-- DROP USER OC3RS CASCADE;

CREATE USER OC3RS

IDENTIFIED BY VALUES 'xxxxx'

DEFAULT TABLESPACE OC3RS_PRO_TS

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

-- 1 Role for OC3RS

GRANT CONNECT TO OC3RS;

ALTER USER OC3RS DEFAULT ROLE ALL;

-- 8 System Privileges for OC3RS

GRANT CREATE SESSION TO OC3RS;

GRANT UNLIMITED TABLESPACE TO OC3RS;

GRANT CREATE VIEW TO OC3RS;

GRANT CREATE SYNONYM TO OC3RS;

GRANT CREATE PROCEDURE TO OC3RS;

GRANT CREATE SEQUENCE TO OC3RS;

GRANT CREATE TRIGGER TO OC3RS;

GRANT CREATE TABLE TO OC3RS;

-- DROP USER EAREGISTRO CASCADE;

CREATE USER EAREGISTRO

IDENTIFIED BY VALUES 'xxxxx'

DEFAULT TABLESPACE EAREGISTRO_PRO_TS

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

-- 1 Role for EAREGISTRO

GRANT CONNECT TO EAREGISTRO;

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 128

ALTER USER EAREGISTRO DEFAULT ROLE ALL;

-- 8 System Privileges for EAREGISTRO

GRANT CREATE SESSION TO EAREGISTRO;

GRANT CREATE TABLE TO EAREGISTRO;

GRANT CREATE PROCEDURE TO EAREGISTRO;

GRANT CREATE TRIGGER TO EAREGISTRO;

GRANT UNLIMITED TABLESPACE TO EAREGISTRO;

GRANT CREATE VIEW TO EAREGISTRO;

GRANT CREATE SEQUENCE TO EAREGISTRO;

GRANT CREATE SYNONYM TO EAREGISTRO;

Seguidamente realizamos el “import”:

[oracle@apt-ora1 backup]$ export NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252

[oracle@apt-ora1 backup]$ imp system

fromuser=ALF,OC3B,OC3C,OC3EC,OC3ES,OC3F,OC3RC,OC3RS,EAREGISTRO

touser=ALF,OC3B,OC3C,OC3EC,OC3ES,OC3F,OC 3RC,OC3RS,EAREGISTRO file=expAPTAE1.dmp

log=impAPTAE1.log ignore=y

Import: Release 11.2.0.3.0 - Production on Fri May 3 14:13:27 2013

Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

Password:

...

. importing OC3RS's objects into OC3RS

. importing EAREGISTRO's objects into EAREGISTRO

Import terminated successfully with warnings.

No hay “grants” de otros esquemas a éstos:

select 'grant '|| privilege|| ' on '||owner||'.'||table_name||' to '||grantee||';'

from dba_tab_privs where grantee in ('ALF', 'OC3B', 'OC3C',

'OC3EC', 'OC3ES', 'OC3F', 'OC3RC', 'OC3RS', 'EAREGISTRO')

order by owner, table_name;

no rows selected.

No hay dblinks que nos afecten ni sinónimos públicos.

select 'CREATE PUBLIC SYNONYM '||synonym_name||'

FOR "'||table_owner||'"."'||table_name||'";' from dba_synonyms

where owner = 'PUBLIC' and table_owner not in

('MDSYS','DMSYS','CTXSYS','OLAPSYS','SYSTEM','EXFSYS',

'ORDSYS','SYSMAN','XDB','SYS','WMSYS','PERFSTAT')order by table_owner;

no rows selected.

Deshabilitamos las constraints en destino:

set echo off

set verify off

set pagesize 2000

set linesize 250

set trim on

set heading off

set feedback off

select '-- '||status|| ', '||deferrable||', '||deferred||chr(10)||'alter table

'||owner||'.'||table_name||' disable constraint '||constraint_name||';'

from all_constraints

where delete_rule = 'CASCADE'

and owner in ('ALF', 'OC3B', 'OC3C', 'OC3EC', 'OC3ES',

'OC3F', 'OC3RC', 'OC3RS', 'EAREGISTRO')

order by owner;

-- ENABLED, NOT DEFERRABLE, IMMEDIATE

alter table ALF.ALF_PROP_LINK disable constraint FK_ALF_PROPLN_VAL;

...

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 129

Ninguno de los esquemas tienen triggers.

Añadimos en destino el REPLICAT y su fichero “trail”:

GG> add replicat RALFOC31, exttrail dirdat/R2

Arrancamos el REPLICAT en destino con AFTERCSN y esperamos a que se ponga

al día:

GG> start rep RALFOC31, aftercsn 3371802643

GG> lag rep RALFOC31

GG> info rep RALFOC31, showch

GG> stats rep RALFOC31

Añadimos el autoarranque del “replicat” en el MGR de destino:

GG> edit param mgr

-- Alfresco y Administracion Electronica

AutoStart REPLICAT RALFOC31

AutoRestart REPLICAT RALFOC31, retries 4, WaitMinutes 4

Editamos el “replicat” y comentamos la línea de HANDLECOLLISIONS:

GG> edit param RALFOC31

-- HandleCollisions

Detenemos el REPLICAT y reiniciamos el MGR en destino

GG> stop rep RALFOC31

GG> stop mgr

GG> start mgr

Tampoco era necesario reiniciar el “replicat”. Podíamos haber editado el fichero y

haber modificado directamente al REPLICAT:

GG> send replicat RALFOC31, NOHANDLECOLLISIONS

Creamos un DBLINK para comparar la base de datos Origen y Destino:

create public database link "OLD_APTAE_LNK"

connect to GGUSER

identified by "xxxxx"

using 'OLD_APTAE';

Comprobamos las sequencias en origen y destino:

with diff_seq as (select * from dba_sequences@OLD_APTAE_LNK where sequence_owner

in ('ALF', 'OC3B', 'OC3C', 'OC3EC', 'OC3ES', 'OC3F', 'OC3RC', 'OC3RS', 'EAREGISTRO')

minus

select * from dba_sequences where sequence_owner in ('ALF', 'OC3B', 'OC3C',

'OC3EC', 'OC3ES', 'OC3F', 'OC3RC', 'OC3RS', 'EAREGISTRO')

)

select origen.*, destino.*

from diff_seq, dba_sequences@OLD_APTAE_LNK origen, dba_sequences destino

where origen.sequence_owner = diff_seq.sequence_owner

and origen.sequence_name = diff_seq.sequence_name

and origen.sequence_owner = destino.sequence_owner

and origen.sequence_name = destino.sequence_name;

Todo está correcto incluyendo la secuencia ALF.ALF_PROP_ROOT_SEQ que

tiene un valor de NEXTVALUE mayor en destino.

Comparación de prueba entre los esquemas origen y destino con la herramienta

“dbForge Data Compare”. Fue satisfactoria para los 9 esquemas:

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 130

Migración de los esquemas de SIME

Preparamos la replicación de SIME ejecutando el script de compatibilidad con

GoldenGate:

------ Tables With No Primary Key or Unique Index in the Schema: NTX_SIME

TABLE_NAME

------------------------------

BERMAN_MEDIDAS_OPE_TB

BLOQUEO_HISTORICO_IFCSUM_TB

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 131

DR$MENSAJES_XML_IX01$I

DR$MENSAJES_XML_IX01$R

FORMULARIO_ERROR_TB

FORMULARIO_MAESTROS_TB

------ Tables Defined with Triggers in the Schema: NTX_SIME

TABLE_NAME TRIGGER_COUNT

------------------------------ -------------

SECUENCIAS_CONSOLIDADAS_TB 1

USUARIOS_TB 1

CONSULTAS_TB 1

ALERTAS_TB 1

BERMAN_CAMBIO_ESTADO_TB 1

PLANTILLAS_DETALLE_TB 2

TRANSFORMACION_SERVICIOS_TB 1

VALIDACION_SERVICIOS_TB 1

FILTROS_TB 1

IFC_CONOCIM_EMBARQUES_TB 1

IFC_ERRORES_TB 1

REGISTRO 1

FORMULARIOS_TB 1

IFCSUM_CONSOLIDACION_TB 1

NOTIFICACIONES_TB 1

PLANTILLAS_SECCIONES_TB 2

TIPO_BANDEJAS_TB 1

TRANSFORMACION_LOG_TB 1

ERROR 1

LISTA_DISTRIBUCION_TB 1

PERFILES_TB 1

TIPO_MENSAJES_DETALLE_TB 1

TIPO_PLANTILLAS_TB 1

USUARIO_REGISTRO_LOG_TB 1

MENSAJES_DETALLE_TB 2

MENSAJES_TB 2

M_MODO_COMUNICACION_TB 1

TRANSFORMACION_CAMPOS_TB 1

VALIDACION_MAESTROS_TB 1

VALIDACION_RANGOS_TB 1

ESCALAS_CONSOLIDADAS_TB 1

FILTROS_GENERICOS_TB 1

IFC_CABECERA_TB 2

IFC_EQUIPAMIENTO_TB 2

IFC_PARTIDAS_TB 1

MENSAJES_DETALLE_HISTORICO_TB 1

VALIDACION_LOG_TB 1

VALIDACION_TB 1

OBJETOS_TB 1

BLOQUEO_HISTORICO_IFCSUM_TB 1

BANDEJAS_TB 1

FILTROS_USUARIOS_VALOR_TB 1

LISTA_DISTRIBUCION_DETALLE_TB 1

MENSAJES_HISTORICO_TB 2

PLANTILLAS_TB 2

------ Sequence numbers: NTX_SIME

SEQUENCE_OWNER SEQUENCE_NAME MIN_VALUE MAX_VALUE INCR CYCLE ORDER CACHE_SIZE LAST_NUMBER

--------------- ------------------------------ ---------- ---------- ---- ----- ----- ---------- -----------

NTX_SIME FORMULARIOS_ID_SQ 1 9999999999 1 N Y 0 32

NTX_SIME ACTIVACION_ESCALA_SQ 1 9999999999 1 N Y 20 84421

NTX_SIME LISTA_DISTRIBUCION_SQ 1 9999999999 1 N Y 0 538

NTX_SIME TRANSFORMACION_SER_SQ 1 9999999999 1 N Y 0 38

NTX_SIME FILTROS_SQ 1 9999999999 1 N Y 0 326

NTX_SIME USUARIOS_ID_SQ 1 999999999 1 N Y 0 62

NTX_SIME MENSAJES_ID_SQ 1 9999999999 1 N Y 0 288076

NTX_SIME NOTIFICACIONES_SQ 1 9999999999 1 N Y 0 52537

NTX_SIME ALERTAS_SQ 1 9999999999 1 N Y 0 597703

NTX_SIME VALIDACIONMAE_SQ 1 9999999999 1 N Y 0 665

NTX_SIME PERFILES_ID_SQ 1 999999999 1 N Y 0 57

NTX_SIME OBJETOS_ID_SQ 1 999999999 1 N Y 0 73

NTX_SIME VALIDACION_SQ 1 9999999999 1 N Y 0 833

NTX_SIME USUARIO_REGISTRO_LOG_ID_SQ 1 9999999999 1 N Y 0 4131

NTX_SIME ERRORES_SQ 1 9999999999 1 N Y 0 601768

NTX_SIME VALIDACIONRAN_SQ 1 9999999999 1 N Y 0 63

NTX_SIME CONSOLIDACION_SOL_ID_SQ 1 9999999999 1 N Y 20 53941

NTX_SIME MENSAJES_HISTORICO_SQ 1 9999999999 1 N Y 0 1664544

NTX_SIME VALIDACION_LOG_SQ 1 9999999999 1 N Y 0 291335

NTX_SIME APERAK_REF_SQ 1 1,0000E+14 1 N Y 20 214500

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 132

NTX_SIME VALIDACIONSER_SQ 1 9999999999 1 N Y 0 179

NTX_SIME MODO_COMUNICACION_SQ 1 99 1 N Y 0 4

NTX_SIME PLANTILLAS_SQ 1 9999999999 1 N Y 0 79

NTX_SIME TRANSFORMACION_CAMPOS_SQ 1 9999999999 1 N Y 0 1784

NTX_SIME TRANSFORMACION_LOG_SQ 1 9999999999 1 N Y 0 371139

NTX_SIME PLANTILLAS_SECCIONES_SQ 1 9999999999 1 N Y 0 65

NTX_SIME ALERTAS_MODIFICACION_SQ 1 9999999999 1 N Y 0 433647

NTX_SIME NOTIFICACIONES_MODIFICACION_SQ 1 9999999999 1 N Y 0 251000

NTX_SIME BERMAN_MM_SQ 1 1,0000E+14 1 N Y 20 132141

NTX_SIME BERMAN_CAMBIO_ESTADO_SQ 1 9999999999 1 N Y 20 363049

NTX_SIME REGISTRO_SQ 1 9999999999 1 N Y 0 25177558

NTX_SIME CUSRES_IFCSUM_SQ 1 99999999 1 N Y 20 169798

NTX_SIME FILTROS_GENERICOS_SEQ 1 1,0000E+27 1 N N 0 22

NTX_SIME CONSULTAS_SQ 1 999 1 N Y 0 4

------ Tables With No Primary Key or Unique Index in the Schema: NTX_SIME_HIS

TABLE_NAME

------------------------------

MENSAJES_DETALLE_HISTORICO_TB

No tenemos resolución para esta tabla por parte de los desarrolladores.

Empíricamente y para los datos actuales:

select count(0) from ntx_sime_his.mensajes_detalle_historico_tb

767331

select count(0) from (select distinct mensaje_id, cab_id from

ntx_sime_his.mensajes_detalle_historico_tb)

767331

Parece que la combinación de campos “mensaje_id” y “cab_id” actúan como clave

única. No hay referencias de otros esquemas fuera del grupo a NTX_SIME_HIS y

NTX_SIME.

Añadimos el “supplemental log data” a las tablas a replicar de ambos esquemas:

add trandata NTX_SIME.BERMAN_MEDIDAS_OPE_TB

...

add trandata NTX_SIME.IFCSUM_ADUANA_RELACION_TB

add trandata NTX_SIME_HIS.MENSAJES_HISTORICO_TB

add trandata NTX_SIME_HIS.MENSAJES_DETALLE_HISTORICO_TB

Preparamos la configuración de los procesos “extract” y “pump” para los esquemas

de SIME en la máquina origen:

GGSCI (Apt-AE-Ora) 107> edit param LSIME1

extract LSIME1

-- Local Extract para los esquemas de Mensajeria (tablas sin KEYCOLS)

SETENV (ORACLE_HOME = "C:\oracle\product\10.2.0\db_1")

SETENV (ORACLE_SID = "APTAE")

SETENV (NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252)

userid gguser@APTAE, password XXXXXX, ENCRYPTKEY default

ExtTrail dirdat/L2

TableExclude NTX_SIME.DR$*;

Table NTX_SIME.*;

Table NTX_SIME_HIS.*;

Table EMPR_TEST.*;

Sequence NTX_SIME.*;

Sequence EMPR_TEST.*;

ReportCount Every 30 minutes, Rate

Report at 01:00

ReportRollover at 01:15

--DDL Include Mapped

DiscardFile dirrpt/LSIME1.dsc, Append

DiscardRollover at 02:00

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 133

GG> add extract LSIME1, TRANLOG, BEGIN NOW

GG> add exttrail dirdat/L2, extract LSIME1, MEGABYTES 100

GGSCI (Apt-AE-Ora) 111> start extract LSIME1

GGSCI (Apt-AE-Ora) 112> info all

Program Status Group Lag at Chkpt Time Since Chkpt

MANAGER RUNNING

EXTRACT RUNNING LSIME1 00:00:00 00:02:13

GGSCI (Apt-AE-Ora) 114> flush sequence NTX_SIME.*

Successfully flushed 34 sequence(s) NTX_SIME.*

set line 2000

set pagesize 99999

column owner format a25

column object_name format a40

select owner, object_name, object_type, status

from dba_objects where status <>'VALID' and owner in ('NTX_SIME', 'NTX_SIME_HIS')

order by owner, object_type;

OWNER OBJECT_NAME OBJECT_TYPE STATUS

------------------------- ---------------------------------------- ------------------- -------

NTX_SIME RUTA_MENSAJES_VS VIEW INVALID

NTX_SIME PUBLICADOR_RECURSOS_VS VIEW INVALID

Realizamos el export consistente y lo enviamos al RAC:

select dbms_flashback.get_system_change_number from dual;

E:\DATAFILE>exp system owner=NTX_SIME,NTX_SIME_HIS file=expNTX_SIME_Y_HIS.dmp

log=expNTX_SIME_Y_HIS.log statistics=none consistent=y flashback_scn=3379004287

Y lo copiamos a destino (RAC).

Preparamos el entorno para el proceso “pump” y lo arrancamos:

Extract PSIME1

-- Extract tipo DataPump para los esquemas de Mensajeria (sin KEYCOLS)

SETENV (ORACLE_HOME = "C:\oracle\product\10.2.0\db_1")

SETENV (ORACLE_SID = "APTAE")

SETENV (NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252)

PassThru

RmtHost apt-ggate-vip, MgrPort 7840, TCPBUFSIZE 100000, COMPRESS

RmtTrail dirdat/R3

TableExclude NTX_SIME.DR$*;

Table NTX_SIME.*;

Table NTX_SIME_HIS.*;

Table EMPR_TEST.*;

Sequence NTX_SIME.*;

Sequence EMPR_TEST.*;

ReportCount Every 30 minutes, Rate

Report at 01:00

ReportRollover at 01:15

DiscardFile dirrpt/PSIME1.dsc, Append

DiscardRollover at 02:00

GG> add extract PSIME1, EXTTRAILSOURCE dirdat/L2

GG> add rmttrail dirdat/R3, extract PSIME1, MEGABYTES 100

GGSCI (Apt-AE-Ora) 4> start extract PSIME1

Sending START request to MANAGER ('GG_MGR_APTAE') ...

EXTRACT PSIME1 starting

Preparamos el entorno en el RAC:

CREATE TABLESPACE NTX_SIME_DATA_TS DATAFILE

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 134

'+DATA/aptora/datafile/ntx_sime_data_ts.287.814987357'

SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M,

'+DATA/aptora/datafile/ntx_sime_data_ts.288.814987357'

SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M,

'+DATA/aptora/datafile/ntx_sime_data_ts.289.814987549'

SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M,

'+DATA/aptora/datafile/ntx_sime_data_ts.290.814987549'

SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M,

'+DATA/aptora/datafile/ntx_sime_data_ts.291.814987549'

SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M,

'+DATA/aptora/datafile/ntx_sime_data_ts.292.814987549'

SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M,

'+DATA/aptora/datafile/ntx_sime_data_ts.293.814987549'

SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M,

'+DATA/aptora/datafile/ntx_sime_data_ts.294.814987549'

SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M,

'+DATA/aptora/datafile/ntx_sime_data_ts.295.814987549'

SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M,

'+DATA/aptora/datafile/ntx_sime_data_ts.296.814987549'

SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M,

'+DATA/aptora/datafile/ntx_sime_data_ts.297.814987551'

SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M,

'+DATA/aptora/datafile/ntx_sime_data_ts.298.814987551'

SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M,

'+DATA/aptora/datafile/ntx_sime_data_ts.299.814987551'

SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M,

'+DATA/aptora/datafile/ntx_sime_data_ts.300.814987551'

SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M,

'+DATA/aptora/datafile/ntx_sime_data_ts.301.814987551'

SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M,

'+DATA/aptora/datafile/ntx_sime_data_ts.302.814987551'

SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M,

'+DATA/aptora/datafile/ntx_sime_data_ts.303.814987551'

SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M,

'+DATA/aptora/datafile/ntx_sime_data_ts.304.814987551'

SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M,

'+DATA/aptora/datafile/ntx_sime_data_ts.305.814987553'

SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M,

'+DATA/aptora/datafile/ntx_sime_data_ts.306.814987553'

SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M,

'+DATA/aptora/datafile/ntx_sime_data_ts.307.814987553'

SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M,

'+DATA/aptora/datafile/ntx_sime_data_ts.308.814987553'

SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M,

'+DATA/aptora/datafile/ntx_sime_data_ts.309.814987553'

SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M,

'+DATA/aptora/datafile/ntx_sime_data_ts.310.814987555'

SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M

LOGGING

ONLINE

PERMANENT

EXTENT MANAGEMENT LOCAL AUTOALLOCATE

BLOCKSIZE 8K

SEGMENT SPACE MANAGEMENT AUTO

FLASHBACK ON;

CREATE TABLESPACE NTX_SIME_INDEX_TX DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

Tablespace created.

CREATE TABLESPACE NTX_SIME_HIS DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 8192M;

ALTER TABLESPACE NTX_SIME_HIS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 8192M;

ALTER TABLESPACE NTX_SIME_HIS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 8192M;

ALTER TABLESPACE NTX_SIME_HIS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 8192M;

ALTER TABLESPACE NTX_SIME_HIS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 8192M;

ALTER TABLESPACE NTX_SIME_HIS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 8192M;

ALTER TABLESPACE NTX_SIME_HIS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 8192M;

ALTER TABLESPACE NTX_SIME_HIS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

ALTER TABLESPACE NTX_SIME_HIS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

ALTER TABLESPACE NTX_SIME_HIS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

ALTER TABLESPACE NTX_SIME_HIS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

ALTER TABLESPACE NTX_SIME_HIS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

ALTER TABLESPACE NTX_SIME_HIS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

ALTER TABLESPACE NTX_SIME_HIS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

ALTER TABLESPACE NTX_SIME_HIS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE NTX_SIME_HIS_INDEX_TS DATAFILE SIZE 1M AUTOEXTEND ON NEXT

1M MAXSIZE 4096M;

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 135

-- DROP USER NTX_SIME CASCADE

CREATE USER NTX_SIME

IDENTIFIED BY VALUES 'XXXX'

DEFAULT TABLESPACE NTX_SIME_DATA_TS

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

-- 1 Role for NTX_SIME

GRANT CONNECT TO NTX_SIME;

ALTER USER NTX_SIME DEFAULT ROLE ALL;

-- 7 System Privileges for NTX_SIME

GRANT CREATE TABLE TO NTX_SIME;

GRANT CREATE PROCEDURE TO NTX_SIME;

GRANT CREATE SEQUENCE TO NTX_SIME;

GRANT UNLIMITED TABLESPACE TO NTX_SIME;

GRANT CREATE SESSION TO NTX_SIME;

GRANT CREATE TRIGGER TO NTX_SIME;

GRANT CREATE VIEW TO NTX_SIME;

-- 14 Object Privileges for NTX_SIME

GRANT ALTER, DELETE, INDEX, INSERT, REFERENCES, SELECT, UPDATE, ON COMMIT REFRESH,

QUERY REWRITE, DEBUG, FLASHBACK ON NTX_SIME_HIS.MENSAJES_DETALLE_HISTORICO_TB TO

NTX_SIME WITH GRANT OPTION;

GRANT ALTER, DELETE, INDEX, INSERT, REFERENCES, SELECT, UPDATE, ON COMMIT REFRESH,

QUERY REWRITE, DEBUG, FLASHBACK ON NTX_SIME_HIS.MENSAJES_HISTORICO_TB TO NTX_SIME

WITH GRANT OPTION;

-- DROP USER NTX_SIME_HIS CASCADE

CREATE USER NTX_SIME_HIS

IDENTIFIED BY VALUES 'xxxxxxx'

DEFAULT TABLESPACE NTX_SIME_HIS

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

-- 1 Role for NTX_SIME_HIS

GRANT CONNECT TO NTX_SIME_HIS;

ALTER USER NTX_SIME_HIS DEFAULT ROLE ALL;

-- 7 System Privileges for NTX_SIME_HIS

GRANT UNLIMITED TABLESPACE TO NTX_SIME_HIS;

GRANT CREATE TRIGGER TO NTX_SIME_HIS;

GRANT CREATE VIEW TO NTX_SIME_HIS;

GRANT CREATE SESSION TO NTX_SIME_HIS;

GRANT CREATE TABLE TO NTX_SIME_HIS;

GRANT CREATE SEQUENCE TO NTX_SIME_HIS;

GRANT CREATE PROCEDURE TO NTX_SIME_HIS;

Configuramos el proceso replicador en el RAC:

GGSCI (apt-ora1) 1> edit param RSIME1

Replicat RSIME1

-- Replicat para los esquemas de Mensajeria (tablas sin KEYCOLS)

SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1")

SETENV (ORACLE_SID = "APTORA")

SETENV (NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252)

userid gguser@APTORA, password XXXXXX, ENCRYPTKEY default

--HandleCollisions

AssumeTargetDefs

ReportCount Every 30 minutes, Rate

Report at 01:00

ReportRollover at 01:15

DiscardFile dirrpt/RSIME1.dsc, Append

DiscardRollover at 02:00

SQLEXEC "alter session set time_zone = '+00:00'"

Map NTX_SIME.BERMAN_MEDIDAS_OPE_TB, Target NTX_SIME.BERMAN_MEDIDAS_OPE_TB,

KEYCOLS(OPE_MEDIDA_ID, OPE_MEDIDA_DIM_ID);

Map NTX_SIME.BLOQUEO_HISTORICO_IFCSUM_TB, Target NTX_SIME.BLOQUEO_HISTORICO_IFCSUM_TB,

KEYCOLS(MENSAJE_ID, FECHA_ALTA);

Map NTX_SIME.FORMULARIO_ERROR_TB, Target NTX_SIME.FORMULARIO_ERROR_TB,

KEYCOLS(FORMULARIO_ID, NODO_ID);

Map NTX_SIME.FORMULARIO_MAESTROS_TB, Target NTX_SIME.FORMULARIO_MAESTROS_TB,

KEYCOLS(FORMULARIO_ID, MAESTRO_ID);

Map NTX_SIME.*, Target NTX_SIME.*;

Map NTX_SIME_HIS.*, Target NTX_SIME_HIS.*;

Map EMPR_TEST.PRODUCTS, Target EMPR_TEST.PRODUCTS, KEYCOLS(product_id,supplier_id);

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 136

Map EMPR_TEST.*, Target EMPR_TEST.*;

Añadimos “trandatas” específicos para las columnas clave de tablas con keycols:

delete trandata NTX_SIME.BERMAN_MEDIDAS_OPE_TB

delete trandata NTX_SIME.BLOQUEO_HISTORICO_IFCSUM_TB

delete trandata NTX_SIME.FORMULARIO_ERROR_TB

delete trandata NTX_SIME.FORMULARIO_MAESTROS_TB

delete trandata NTX_SIME_HIS.MENSAJES_DETALLE_HISTORICO_TB

add trandata NTX_SIME.BERMAN_MEDIDAS_OPE_TB, COLS(OPE_MEDIDA_ID, OPE_MEDIDA_DIM_ID), NOKEY

add trandata NTX_SIME.BLOQUEO_HISTORICO_IFCSUM_TB, KEYCOLS(MENSAJE_ID, FECHA_ALTA), NOKEY

add trandata NTX_SIME.FORMULARIO_ERROR_TB, KEYCOLS(FORMULARIO_ID, NODO_ID), NOKEY

add trandata NTX_SIME.FORMULARIO_MAESTROS_TB, KEYCOLS(FORMULARIO_ID, MAESTRO_ID), NOKEY

add trandata NTX_SIME_HIS.MENSAJES_DETALLE_HISTORICO_TB, KEYCOLS(MENSAJE_ID, CAB_ID), NOKEY

info trandata NTX_SIME.BLOQUEO_HISTORICO_IFCSUM_TB

info trandata NTX_SIME.FORMULARIO_ERROR_TB

info trandata NTX_SIME.FORMULARIO_MAESTROS_TB

info trandata NTX_SIME_HIS.MENSAJES_DETALLE_HISTORICO_TB

stats ext LSIME1 TABLE NTX_SIME.BLOQUEO_HISTORICO_IFCSUM_TB

stats ext LSIME1 TABLE NTX_SIME.FORMULARIO_ERROR_TB

stats ext LSIME1 TABLE NTX_SIME.FORMULARIO_MAESTROS_TB

stats ext LSIME1 TABLE NTX_SIME_HIS.MENSAJES_DETALLE_HISTORICO_TB

Realizamos un export de prueba sin filas en origen y lo importamos en destino:

[oracle@apt-ora1 backup]$ imp system fromuser=NTX_SIME,NTX_SIME_HIS

touser=NTX_SIME,NTX_SIME_HIS file=expNTX_SIME_Y_HIS_NOROWS.dmp log=impNTX_SIME_Y_HIS.log

ignore=y rows=n

Import: Release 11.2.0.3.0 - Production on Fri May 10 14:40:49 2013

Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

Password:

Connected to: Oracle Database 11g Release 11.2.0.3.0 - 64bit Production

With the Real Application Clusters and Automatic Storage Management options

Export file created by EXPORT:V10.02.01 via conventional path

import done in US7ASCII character set and AL16UTF16 NCHAR character set

import server uses WE8MSWIN1252 character set (possible charset conversion)

export client uses WE8MSWIN1252 character set (possible charset conversion)

. importing NTX_SIME's objects into NTX_SIME

. importing NTX_SIME_HIS's objects into NTX_SIME_HIS

. importing NTX_SIME's objects into NTX_SIME

...

IMP-00003: ORACLE error 4052 encountered

ORA-04052: se ha producido un error al consultar el objeto remoto

. importing NTX_SIME_HIS's objects into NTX_SIME_HIS

. importing NTX_SIME's objects into NTX_SIME

About to enable constraints...

Import terminated successfully with warnings.

Aumentamos temporalmente el grupo de discos +FRA en 100GB para soportar la

gran cantidad de información de “redo” que van a generar los imports :

Disco /dev/sdu: 26.8 GB, 26843545600 bytes

64 heads, 32 sectors/track, 25600 cylinders

Units = cilindros of 2048 * 512 = 1048576 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0xa218bc8a

Disposit. Inicio Comienzo Fin Bloques Id Sistema

/dev/sdu1 1 25600 26214272 83 Linux

Disco /dev/sdv: 26.8 GB, 26843545600 bytes

64 heads, 32 sectors/track, 25600 cylinders

Units = cilindros of 2048 * 512 = 1048576 bytes

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 137

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0xc8eb6952

Disposit. Inicio Comienzo Fin Bloques Id Sistema

/dev/sdv1 1 25600 26214272 83 Linux

Disco /dev/sdw: 26.8 GB, 26843545600 bytes

64 heads, 32 sectors/track, 25600 cylinders

Units = cilindros of 2048 * 512 = 1048576 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x7f6b78de

Disposit. Inicio Comienzo Fin Bloques Id Sistema

/dev/sdw1 1 25600 26214272 83 Linux

[root@apt-ora1 ~]# oracleasm createdisk FRA3 /dev/sdu1

[root@apt-ora1 ~]# oracleasm createdisk FRA4 /dev/sdv1

[root@apt-ora1 ~]# oracleasm createdisk FRA5 /dev/sdw1

[root@apt-ora2 ~]# service oracleasm stop

[root@apt-ora2 ~]# service iscsi stop

[root@apt-ora2 ~]# service iscsi start

[root@apt-ora2 ~]# service oracleasm start

[root@apt-ora2 ~]# oracleasm listdisks

BCK1

BCK2

BCK3

BCK4

BCK5

CRS

DATA1

DATA2

DATA3

DATA4

DATA5

DATA6

DATA7

DATA8

FRA1

FRA2

FRA3

FRA4

FRA5

GG1

GG2

[root@apt-ora1 ~]# crsctl start crs

[root@apt-ora2 ~]# crsctl start crs

Ampliamos la FRA a nivel de base de datos:

SQL> alter system set db_recovery_file_dest_size = 127000M scope=BOTH sid='*';

SQL> show parameter recovery

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

db_recovery_file_dest string +FRA

db_recovery_file_dest_size big integer 127000M

recovery_parallelism integer 0

Realizamos el import con filas :

export NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252

[oracle@apt-ora1 backup]$ imp system fromuser=NTX_SIME,NTX_SIME_HIS

touser=NTX_SIME,NTX_SIME_HIS file=expNTX_SIME_Y_HIS.dmp log=impNTX_SIME_Y_HIS.log ignore=y

Una vez finalizado el import deshabilitamos los triggers:

set echo off

set verify off

set pagesize 2000

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 138

set linesize 250

set trim on

set heading off

set feedback off

spool &SCHEMA..disable_triggers.sql

select 'alter trigger '||owner||'.'||trigger_name||

' disable ;'

from all_triggers

where owner in ('NTX_SIME', 'NTX_SIME_HIS'

order by owner;

spool off

alter trigger NTX_SIME.BANDEJAS_TR01 disable ;

...

alter trigger NTX_SIME.BERMAN_CAMBIO_ESTADO_TR disable ;

No hay constraints “delete cascade que deshabilitar”:

set echo off

set verify off

set pagesize 2000

set linesize 250

set trim on

set heading off

set feedback off

select 'alter table '||owner||'.'||table_name||

' disable constraint '||constraint_name||';'

from all_constraints

where delete_rule = 'CASCADE'

and owner in ('NTX_SIME', 'NTX_SIME_HIS')

order by owner;

Privilegios de otros

set echo off

set verify off

set pagesize 2000

set linesize 250

set trim on

set heading off

set feedback off

select 'grant '|| privilege|| ' on '||owner||'.'||table_name||' to '||grantee||';'

from dba_tab_privs where grantee in ('NTX_SIME', 'NTX_SIME_HIS')

and owner <> 'NTX_SIME_RES' order by grantee, owner, table_name;

grant DELETE on NTX_SIME_HIS.MENSAJES_DETALLE_HISTORICO_TB to NTX_SIME;

...

Comprobamos los privilegios a otros:

set echo off

set verify off

set pagesize 2000

set linesize 250

set trim on

set heading off

set feedback off

select 'grant '|| privilege|| ' on '||owner||'.'||table_name||' to '||grantee||';'

from dba_tab_privs where owner in ('NTX_SIME', 'NTX_SIME_HIS')

order by owner, grantee, table_name;

grant DEBUG on NTX_SIME_HIS.MENSAJES_DETALLE_HISTORICO_TB to NTX_SIME

...

Arrancamos el proceso replicador:

GGSCI (apt-ora1) 3> add replicat RSIME1, exttrail dirdat/R3

REPLICAT added.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 139

GGSCI (apt-ora1) 4> start rep RSIME1, aftercsn 3379004287

Sending START request to MANAGER ...

REPLICAT RSIME1 starting

GGSCI (apt-ora1) 5> info all

Program Status Group Lag at Chkpt Time Since Chkpt

MANAGER RUNNING

REPLICAT STOPPED RALFOC31 00:00:00 80:00:07

REPLICAT STOPPED RRFIN1 00:00:00 414:26:47

REPLICAT RUNNING RSIME1 45:11:54 00:00:09

GGSCI (apt-ora1) 7> lag rep RSIME1

Sending GETLAG request to REPLICAT RSIME1 ...

Last record lag: 162122 seconds.

...

Comprobamos que las secuencias están bien sincronizadas:

create public database link "OLD_APTAE_LNK"

connect to GGUSER

identified by "Xxxxx1"

using 'OLD_APTAE';

with

diff_seq as (select * from dba_sequences@"&&DB_LINK" where sequence_owner = '&&SCHEMA'

minus

select * from dba_sequences where sequence_owner = '&SCHEMA')

select origen.*, destino.*

from diff_seq, dba_sequences@"&DB_LINK" origen, dba_sequences destino

where origen.sequence_owner = diff_seq.sequence_owner

and origen.sequence_name = diff_seq.sequence_name

and origen.sequence_owner = destino.sequence_owner

and origen.sequence_name = destino.sequence_name;

execute dbms_stats.gather_schema_stats(ownname=> '"NTX_SIME"' ,options=> 'GATHER AUTO');

execute dbms_stats.gather_schema_stats(ownname=> '"NTX_SIME_HIS"' ,options=> 'GATHER AUTO');

La tabla ntx_sime_his.mensajes_detalle_historico_tb tiene registros duplicados. Al

no tener clave primaria, Oracle no genera error al replicar y HANDLECOLLISIONS no

actúa. Debemos borrarlos a mano:

select count(0) from (select distinct mensaje_id, cab_id

from ntx_sime_his.mensajes_detalle_historico_tb)

select count(0) from ntx_sime_his.mensajes_detalle_historico_tb

select count(0) from ntx_sime_his.mensajes_detalle_historico_tb@OLD_APTAE_LNK

delete from

ntx_sime_his.mensajes_detalle_historico_tb A

WHERE

a.rowid >

ANY (

SELECT

B.rowid

FROM

ntx_sime_his.mensajes_detalle_historico_tb B

WHERE

A.mensaje_id = B.mensaje_id

AND

A.cab_id = B.cab_id

);

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 140

Ultimas comprobaciones:

select * from ntx_sime.mensajes_tb where mensaje_id = 289986;

select * from ntx_sime.registro where id in (25324658, 25324659,25324660);

select * from ntx_sime.registro@OLD_APTAE_LNK where id in (25324658, 25324659,25324660)

minus

select * from ntx_sime.registro where id in (25324658, 25324659,25324660)

select * from ntx_sime.registro where id in (25324658, 25324659,25324660)

minus

select * from ntx_sime.registro@OLD_APTAE_LNK where id in (25324658, 25324659,25324660)

select * from ntx_sime.mensajes_tb where mensaje_id = 289986

minus

select * from ntx_sime.mensajes_tb@OLD_APTAE_LNK where mensaje_id = 289986;

Instalación de STATSPACK en la base de datos del RAC y en la de contingencia

STATSPACK es un mecanismo de la base de datos que registra parámetros de

rendimiento de ésta que es posible consultar cuando se detecten problemas en ésta.

Aunque en versiones recientes de Oracle Database, STATSPACK ha sido sustituido por

AWR, éste último requiere licenciamiento adicional y versión Enterprise de la base de

datos.

Instalamos STATSPACK en la base de datos del RAC:

CREATE TABLESPACE STATSPACK_TS DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

SQL> @?/rdbms/admin/spcreate

Choose the PERFSTAT user's password

-----------------------------------

Not specifying a password will result in the installation FAILING

Introduzca un valor para perfstat_password: Xxxxx1

xxxxx

Choose the Default tablespace for the PERFSTAT user

---------------------------------------------------

Below is the list of online tablespaces in this database which can

store user data. Specifying the SYSTEM tablespace for the user's

default tablespace will result in the installation FAILING, as

using SYSTEM for performance data is not supported.

Choose the PERFSTAT users's default tablespace. This is the tablespace

in which the STATSPACK tables and indexes will be created.

TABLESPACE_NAME CONTENTS STATSPACK DEFAULT TABLESPACE

------------------------------ --------- ----------------------------

ALF_PRO_TS PERMANENT

DATOS_FIN PERMANENT

DATOS_GGS PERMANENT

EAREGISTRO_PRO_TS PERMANENT

NTX_SIME_DATA_TS PERMANENT

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 141

NTX_SIME_HIS PERMANENT

NTX_SIME_HIS_INDEX_TS PERMANENT

NTX_SIME_INDEX_TX PERMANENT

OC3B_PRO_INDEX_TS PERMANENT

OC3B_PRO_TS PERMANENT

OC3C_PRO_INDEX_TS PERMANENT

TABLESPACE_NAME CONTENTS STATSPACK DEFAULT TABLESPACE

------------------------------ --------- ----------------------------

OC3C_PRO_TS PERMANENT

OC3EC_PRO_TS PERMANENT

OC3ES_PRO_INDEX_TS PERMANENT

OC3ES_PRO_TS PERMANENT

OC3F_PRO_INDEX_TS PERMANENT

OC3F_PRO_TS PERMANENT

OC3RC_PRO_INDEX_TS PERMANENT

OC3RC_PRO_TS PERMANENT

OC3RS_PRO_INDEX_TS PERMANENT

OC3RS_PRO_TS PERMANENT

STATSPACK_TS PERMANENT

TABLESPACE_NAME CONTENTS STATSPACK DEFAULT TABLESPACE

------------------------------ --------- ----------------------------

SYSAUX PERMANENT *

USERS PERMANENT

Pressing <return> will result in STATSPACK's recommended default

tablespace (identified by *) being used.

Introduzca un valor para default_tablespace: STATSPACK_TS

Using tablespace STATSPACK_TS as PERFSTAT default tablespace.

Choose the Temporary tablespace for the PERFSTAT user

-----------------------------------------------------

Below is the list of online tablespaces in this database which can

store temporary data (e.g. for sort workareas). Specifying the SYSTEM

tablespace for the user's temporary tablespace will result in the

installation FAILING, as using SYSTEM for workareas is not supported.

Choose the PERFSTAT user's Temporary tablespace.

TABLESPACE_NAME CONTENTS DB DEFAULT TEMP TABLESPACE

------------------------------ --------- --------------------------

TEMP TEMPORARY *

Pressing <return> will result in the database's default Temporary

tablespace (identified by *) being used.

Introduzca un valor para temporary_tablespace: TEMP

Using tablespace TEMP as PERFSTAT temporary tablespace.

... Creating PERFSTAT user

...

Conectados como PERFSTAT creamos el procedimiento de la captura:

create or replace procedure db_proc_rac_statspack as

w_status number(38);

w_handle varchar2(60);

w_snap_level number;

begin

w_snap_level := 7;

sys.dbms_lock.allocate_unique(

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 142

lockname => 'Sincronizar Statspack',

lockhandle => w_handle

);

w_status := sys.dbms_lock.request(

lockhandle => w_handle,

lockmode => dbms_lock.x_mode,

timeout => 300,

release_on_commit => false

);

if (w_status = 0 ) then

dbms_output.put_line(

to_char(sysdate,'dd hh24:mi:ss') ||

': Lock conseguido, ejecutando statspack'

);

statspack.snap(w_snap_level);

dbms_output.put_line(

to_char(sysdate,'dd hh24:mi:ss') ||

': Snapshot completado'

);

w_status := sys.dbms_lock.release(

lockhandle => w_handle

);

else

dbms_output.put_line(

to_char(sysdate,'dd hh24:mi:ss') ||

case w_status

when 1 then ': Lock wait timed out'

when 2 then ': deadlock detected'

when 3 then ': parameter error'

when 4 then ': already holding lock'

when 5 then ': illegal lock handle'

else ': unknown error'

end

);

end if;

end;

/

Creamos servicios que solo se ejecutarán en un nodo concreto para poder asociar las

clases de trabajos del planificador de la base de datos a ellos. De esta forma forzamos

que un determinado trabajo se ejecute en un nodo concreto:

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 143

[oracle@apt-ora1 gg]$ srvctl add service -d APTORA -s statspack_apt_ora1_srvc -r APTORA1

[oracle@apt-ora1 gg]$ srvctl add service -d APTORA -s statspack_apt_ora2_srvc -r APTORA2

[oracle@apt-ora1 gg]$ srvctl start service -d APTORA -s statspack_apt_ora1_srvc

[oracle@apt-ora1 gg]$ srvctl start service -d APTORA -s statspack_apt_ora2_srvc

[oracle@apt-ora1 gg]$ srvctl status service -d APTORA -s statspack_apt_ora2_srvc

El servicio statspack_apt_ora2_srvc se está ejecutando en las instancias APTORA2

[oracle@apt-ora1 gg]$ srvctl status service -d APTORA -s statspack_apt_ora1_srvc

El servicio statspack_apt_ora1_srvc se está ejecutando en las instancias APTORA1

Como SYSDBA creamos la clase del “job”:

BEGIN

DBMS_SCHEDULER.create_job_class(

job_class_name => 'statspack_apt_ora1_class',

service => 'statspack_apt_ora1_srvc');

DBMS_SCHEDULER.create_job_class(

job_class_name => 'statspack_apt_ora2_class',

service => 'statspack_apt_ora2_srvc');

END;

/

GRANT EXECUTE ON sys.statspack_apt_ora1_class TO perfstat;

GRANT EXECUTE ON sys.statspack_apt_ora2_class TO perfstat;

grant create job to perfstat;

grant execute on dbms_scheduler to perfstat;

Conectados como PERFSTAT:

BEGIN

DBMS_SCHEDULER.create_program (

program_name => 'PROC_RAC_STATSPACK',

program_type => 'STORED_PROCEDURE',

program_action => 'db_proc_rac_statspack',

enabled => TRUE

);

END;

/

Si hubiera jobs creados, los borramos:

BEGIN

dbms_scheduler.drop_job('APTORA_PERFSTAT_COLLECT_N1');

dbms_scheduler.drop_job('APTORA_PERFSTAT_COLLECT_N2');

dbms_scheduler.drop_job('APTORA_PERFSTAT_PURGE_N1');

dbms_scheduler.drop_job('APTORA_PERFSTAT_PURGE_N2');

END;

/

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 144

Conectados al NODO1 como PERFSTAT creamos el “job” propiamente dicho:

BEGIN

dbms_scheduler.create_job(

job_name => 'APTORA_PERFSTAT_COLLECT_N1',

program_name => 'PROC_RAC_STATSPACK',

start_date => SYSTIMESTAMP,

repeat_interval=>'FREQ=minutely; INTERVAL=30;',

job_class => 'statspack_apt_ora1_class',

comments => 'Recopilación de STATSPACK para APTORA1',

enabled => TRUE);

dbms_scheduler.create_job

(job_name=>'APTORA_PERFSTAT_PURGE_N1',

job_type=>'PLSQL_BLOCK',

job_action=>'begin STATSPACK.PURGE(15); end;',

start_date=>SYSTIMESTAMP,

repeat_interval=>'FREQ=DAILY; BYHOUR=23; BYMINUTE=30',

job_class => 'statspack_apt_ora1_class',

enabled=>TRUE);

END;

/

Conectados al NODO2 con el usuario PERFSTAT hacemos lo mismo:

BEGIN

dbms_scheduler.create_job(

job_name => 'APTORA_PERFSTAT_COLLECT_N2',

program_name => 'PROC_RAC_STATSPACK',

start_date => SYSTIMESTAMP,

repeat_interval=>'FREQ=minutely; INTERVAL=30;',

job_class => 'statspack_apt_ora2_class',

comments => 'Recopilación de STATSPACK para APTORA2',

enabled => TRUE);

dbms_scheduler.create_job

(job_name=>'APTORA_PERFSTAT_PURGE_N2',

job_type=>'PLSQL_BLOCK',

job_action=>'begin STATSPACK.PURGE(15); end;',

start_date=>SYSTIMESTAMP,

repeat_interval=>'FREQ=DAILY; BYHOUR=23; BYMINUTE=30',

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 145

job_class => 'statspack_apt_ora2_class',

enabled=>TRUE);

END;

/

set line 2000

alter session set nls_date_format='dd-mm-yy hh24:mi:ss';

select INSTANCE_NUMBER, SNAP_TIME from stats$snapshot order by 1, 2;

INSTANCE_NUMBER SNAP_TIME

--------------- -------------------

1 11-05-13 19:53:40

1 16-05-13 12:48:57

1 16-05-13 12:50:40

1 16-05-13 12:53:02

2 11-05-13 19:54:46

2 16-05-13 12:40:52

2 16-05-13 12:48:13

2 16-05-13 12:53:46

Instalamos STATSPACK en la máquina de contingencia:

CREATE TABLESPACE STATSPACK_TS DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

SQL> @?/rdbms/admin/spcreate

Choose the PERFSTAT user's password

-----------------------------------

Not specifying a password will result in the installation FAILING

Introduzca un valor para perfstat_password: Xxxxx1

xxxxx

Choose the Default tablespace for the PERFSTAT user

---------------------------------------------------

Below is the list of online tablespaces in this database which can

store user data. Specifying the SYSTEM tablespace for the user's

default tablespace will result in the installation FAILING, as

using SYSTEM for performance data is not supported.

Choose the PERFSTAT users's default tablespace. This is the tablespace

in which the STATSPACK tables and indexes will be created.

TABLESPACE_NAME CONTENTS STATSPACK DEFAULT TABLESPACE

------------------------------ --------- ----------------------------

DATOS_GGS PERMANENT

STATSPACK_TS PERMANENT

SYSAUX PERMANENT *

USERS PERMANENT

Pressing <return> will result in STATSPACK's recommended default

tablespace (identified by *) being used.

Introduzca un valor para default_tablespace: STATSPACK_TS

Using tablespace STATSPACK_TS as PERFSTAT default tablespace.

Choose the Temporary tablespace for the PERFSTAT user

-----------------------------------------------------

Below is the list of online tablespaces in this database which can

store temporary data (e.g. for sort workareas). Specifying the SYSTEM

tablespace for the user's temporary tablespace will result in the

installation FAILING, as using SYSTEM for workareas is not supported.

Choose the PERFSTAT user's Temporary tablespace.

TABLESPACE_NAME CONTENTS DB DEFAULT TEMP TABLESPACE

------------------------------ --------- --------------------------

TEMP TEMPORARY *

Pressing <return> will result in the database's default Temporary

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 146

tablespace (identified by *) being used.

Introduzca un valor para temporary_tablespace:

Using tablespace TEMP as PERFSTAT temporary tablespace.

... Creating PERFSTAT user

...

SQL> grant create job to perfstat;

Conectados como PERFSTAT creamos el job:

BEGIN

DBMS_SCHEDULER.CREATE_JOB (

job_name => 'APTORA2_PERFSTAT_COLLECT',

job_type => 'PLSQL_BLOCK',

job_action => 'begin statspack.snap(7); end;',

start_date => SYSTIMESTAMP,

repeat_interval => 'FREQ=minutely; INTERVAL=30;',

enabled => TRUE,

comments => 'Recoplicación de STATSPACK para APTORA2');

END;

/

BEGIN

dbms_scheduler.create_job

(job_name=>'APTORA2_PERFSTAT_PURGE',

job_type=>'PLSQL_BLOCK',

job_action=>'begin STATSPACK.PURGE(15); end;',

start_date=>SYSTIMESTAMP,

repeat_interval=>'FREQ=DAILY; BYHOUR=23; BYMINUTE=30',

comments => 'Recoplicación de STATSPACK para APTORA2',

enabled=>TRUE);

END;

/

set line 2000

alter session set nls_date_format='dd-mm-yy hh24:mi:ss';

select INSTANCE_NUMBER, SNAP_TIME from stats$snapshot order by 1, 2;

INSTANCE_NUMBER SNAP_TIME

--------------- -------------------

1 16-05-13 14:59:29

Añadimos un datafile a STATSPACK_TS tanto en el RAC como en contingencia:

ALTER TABLESPACE STATSPACK_TS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M ;

Esquema de copias de seguridad propuesto para el clúster y su base de datos

El esquema de copias se ha diseñado como una extensión para el entorno RAC de

los scripts usados para realizar copias de seguridad de las bases de datos no-RAC.

Los objetivos son:

Recopilación de toda la información necesaria para restaurar desde cero el

clúster de Oracle (incluyendo la pérdida de todos los discos en la SAN).

Crear scripts modulares que sean:

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 147

o Flexibles para ejecutarse desde cualquier instancia (si el nodo que

hace habitualmente las copias está caído, cualquier otro nodo puede

ejecutar los scripts de backup con mínimas modificaciones)

o Soporte para realizar backups de varias instancias de bases de datos

dentro del RAC

o Flexible para añadir más instancias de bases de datos al esquema de

backup

o Flexible para añadir más nodos del RAC al esquema de backup

Aprovechar los scripts existentes adaptándolos al entorno RAC.

Esquema de copias. Visión general

A grandes rasgos, el esquema de copias consiste en un script maestro que se ejecuta

como usuario “root” en un nodo elegido del clúster y que, mediante invocaciones a

otros scripts más específicos, realiza una copia física en caliente (no requiere parada)

con RMAN y un “export” con EXPDP (copia lógica) de todas las instancias de bases

de datos del clúster asociadas al ORACLE_HOME.

El script recopila información de los “homes” de las instancias de bases de datos, de

las instancias ASM del clúster, y del propio clúster (tanto del Oracle Clúster Registry

(OCR) como del Oracle Local Registry (OLR), entre otros). Así mismo se realiza un

backup de los principales archivos de configuración de GoldenGate y de los logs y

reports generados por éste.

Toda la información recopilada se almacena en el filesystem ACFS compartido por

los dos nodos del clúster de Oracle y montado bajo la ruta

“/u01/backup/BCK_APTORA”. Al residir los ficheros del backup en almacenamiento

compartido, son fácilmente accesibles por cualquier nodo en caso de tener que recurrir a

ellos para la restauración de la base de datos.

Esquema de copias. Detalle

Para describir el esquema de copias iremos detallando las tareas realizadas por cada

uno de los siete scripts implicados. Comenzaremos la descripción de abajo hacia arriba,

esto es, primero describiremos la función de los scripts más básicos para acabar con el

script maestro de la copia de seguridad.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 148

La ubicación de los scripts es arbitraria pero todos ellos deben estar en el mismo

directorio que, a su vez, debe tener un subdirectorio llamado “log”. Así mismo, por

defecto, el script espera que todos los nodos tengan ubicados los scripts en la misma

carpeta. En nuestro caso el directorio será “/home/oracle/EMPR/backup”.

Los scripts están ubicados en almacenamiento local en cada nodo. Como se

comentó, son ligeramente diferentes para cada uno. No es posible colocarlos en

almacenamiento compartido en el clúster por restricciones de licenciamiento de Oracle.

Para que el script maestro de backup pueda invocar comandos de manera remota a

través de SSH en cualquier nodo se habilitó la equivalencia de usuario por SSH para

“root”.

Pasamos a describir cada uno de los scripts del esquema de copias:

cluster_info.sh

Este script se encarga de recopilar la configuración del clúster, tanto del registro

local del nodo en el que se ejecuta (OLR) como del registro global del clúster (OCR).

Se ejecuta con el usuario propietario del clúster (grid) y se invoca remotamente (por

SSH) desde el script maestro de backup del clúster.

node_info.sh

Se encarga de recopilar toda la información de las instancias locales de bases de

datos y de las instancias ASM (las que gestionan, entre otras, el almacenamiento

compartido del clúster) en el nodo en el que se ejecuta. Entre otras, recopila la siguiente

información:

• Carpeta “dbs” del home de la base de datos y del home de la instancia ASM

• Carpeta “diag” con los logs de ambos homes (DB y ASM)

• Carpeta “network/admin” de ambos homes (DB y ASM)

• PFILE y SPFILE de la instancia ASM local

• Metadatos de las cabeceras de los discos ASM

• Listados de los grupo de discos y discos de ASM

• Información sobre sistemas de ficheros ACFS

• Otros ficheros del nodo (oratab, oracleasm, etc, …)

Se ejecuta como “root” y, al igual que “cluster_info.sh”, este script se invoca

remotamente (por SSH) desde el script maestro de backup del clúster.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 149

backup_cluster.sh

Este script, a partir de un listado de nombres de nodo configurado en la variable

“NODE_NAMES”, va recorriendo cada uno de los nodos indicados ejecutando

remotamente los scripts “node_info.sh” y “cluster_info.sh” y transfiriendo al nodo

desde donde se está ejecutando los ficheros “.tgz” producidos por dichos scripts.

La información recopilada de todos los nodos se almacena entonces en el directorio

de copias especificado (en nuestro caso “/u01/backup/BCK_APTORA”).

backup_rman.sh, backup_expdp.sh, backup_ggate.sh

“backup_rman.sh” realiza copias de seguridad RMAN de la instancia especificada

como parámetro. Así, hace una copia, entre otros, de los datafiles, los archivelogs

antiguos (borrando los que ya no son necesarios), los archivelogs nuevos, el SPFILE, y

del controlfile.

“backup_expdp.sh” realiza una copia lógica (export) “full” usando la herramienta

“expdp” de la instancia especificada como parámetro.

“backup_ggate.sh” realiza un backup de los principales ficheros de configuración

del “home” de una instalación de GG pasada como parámetro así como los principales

logs generados por la herramienta.

backup_apt-ora-cluster.sh

Este es el script maestro que hay que programar como entrada en el “cron” del

usuario “root” en el nodo desde el que se vayan a efectuar las copias y que se encarga de

realizar el backup completo del clúster mediante llamadas a los scripts vistos

anteriormente.

En primer lugar invoca a “backup_cluster.sh” para recopilar la información sobre las

instancias de bases de datos del clúster y sobre las instancias ASM.

A continuación invoca a “backup_ggate.sh” para recopilar información sobre la

configuración y reports de GoldenGate.

Seguidamente, y para cada instancia de base de datos configurada en el clúster

(dependiente del ORACLE_HOME en el que estamos), invoca a “backup_rman.sh” y a

“backup_expdp.sh” para realizar una copia con RMAN y otra full con EXPDP de las

mismas.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 150

Diferencias de configuración de los scripts de copia en cada nodo

Los distintos scripts de copia de seguridad del RAC están diseñados de tal forma

que se puedan adaptar con las mínimas modificaciones a cada uno de los nodos del

RAC.

Como se comentó anteriormente, la copia de seguridad se realiza desde un solo

nodo (normalmente APT-ORA1). Sin embargo, y aunque sólo se vayan a realizar copias

de seguridad desde ese nodo, es obligatorio configurar en cada nodo del RAC los

scripts siguientes:

cluster_info.sh

node_info.sh

Esto es debido a que el nodo que realiza la copia llama remotamente a éstos scripts

en cada uno de los nodos para recopilar información sobre las instancias de bases de

datos y ASM de éstos.

Adicionalmente, y si queremos tener preparados todos los nodos de forma que

cualquiera de ellos pueda realizar las copias de seguridad, por ejemplo en caso de que el

nodo que hace las copias habitualmente esté offline, será preciso tener correctamente

configurados en cada nodo los siguientes scripts:

backup_aptcora-cluster.sh

backup_cluster.sh

backup_rman.sh

backup_expdp.sh

backup_ggate.sh

La gran mayoría de las modificaciones consistirán en la modificación del valor de

las variables que aparecen en la parte inicial del script (normalmente en el apartado

“Configuración del script”).

Para ver las modificaciones necesarias a los scripts a la hora de adaptarlos a otros

nodos, tomaremos como base los scripts configurados para el nodo 1 y haremos las

modificaciones oportunas para adaptarlos al nodo 2.

En este caso supondremos que la ubicación de los scripts y de los destinos de copia,

tanto locales como remotos, son los mismos en todos los nodos del clúster.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 151

cluster_info.sh

Los cambios a realizar se limitan a cambiar la ubicación por defecto en la que

Oracle hace el backup automático del OLR:

DEFAULT_LOCAL_BACKUP_LOCATION=/u01/app/11.2.0/grid/cdata/apt-ora2

node_info.sh

En este script modificamos los datos relativos a la instancia de bases de datos (que

ahora será APTORA2) y de la instancia ASM (que ahora será +ASM2). En realidad

APTORA2 sólo se usa para nombrar los ficheros que hacen el backup de los directorios

“dbs”, “network\admin” y “diag” (los logs) del home de la base de datos. Como estos

directorios están compartidos por todas las instancias de bases de datos que dependan de

este home, no es necesario realizar un backup usando los SIDs de otras instancias (si las

hubiere). En este script sólo será necesario modificar el valor de las dos variables

siguientes:

DB_ORACLE_SID=APTORA2

ASM_ORACLE_SID=+ASM2

backup_apt-ora-cluster.sh

El único cambio obligatorio en el script, está en el listado de SIDs de las instancias

del clúster que se ejecutan en el nodo y que dependen de este ORACLE_HOME. Para

ello cambiamos el valor de la variable:

DATABASE_SIDS=( "APT-ORA2" )

backup_cluster.sh, backup_rman.sh, backup_expdp.sh, backup_ggate.sh

Como hemos supuesto que las ubicaciones de los scripts y destinos de copia son los

mismos en cada nodo del clúster, no es necesario realizar modificaciones a estos scripts

en ninguno de los nodos.

Recordemos, así mismo, que GoldenGate está completamente contenido en el

sistema de ficheros de clúster ACFS compartido por ambos nodos.

Modificaciones a los scripts de copia al añadir o eliminar un nodo

Si hemos añadido un nodo al clúster o bien lo hemos dado de baja (por ejemplo

porque está dando problemas) deberemos hacer unas mínimas modificaciones a los

scripts de copia de todos los nodos del clúster.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 152

Si fuésemos a añadir un nuevo nodo, “apt-ora3”, deberíamos hacer una copia de

los scripts de copia de otro nodo al nuevo, realizar, sólo en el nuevo nodo, las

modificaciones descritas en el apartado anterior y modificar el siguiente script en todos

los nodos del clúster:

backup_cluster.sh

El único cambio obligatorio en el script, está en el listado de nodos del clúster. Para

ello cambiamos el valor de la variable:

NODE_NAMES =( "apt-ora1" "apt-ora2" "apt-ora3" )

Si fuésemos a eliminar un nodo, modificaríamos la misma variable pero esta vez

eliminando el nombre del nodo al que damos de baja.

Modificaciones al añadir o eliminar una instancia de base de datos

Si fuésemos a añadir una nueva instancia de base de datos (supongamos que se

llama APT-NEW) al esquema de copias del clúster sólo es necesario modificar el script

siguiente, en todos los nodos del clúster:

backup_apt-ora-cluster.sh

El único cambio obligatorio en el script, está en el listado de SIDs de las instancias

del clúster que se ejecutan en el nodo y que dependen de este ORACLE_HOME. Para

ello cambiamos el valor de la variable:

DATABASE_SIDS=( "APTORAx" “APT-NEWx” )

En este caso sustituimos la “x” por el número de instancia cuyo script estemos

editando.

Si vamos a eliminar una instancia del esquema de copias, sólo habremos de

modificar la variable anterior y borrar el nombre de la instancia a dar de baja.

Ejemplo de recuperación del servicio tras la pérdida total de discos del clúster

Si el fallo afecta al propio servidor y necesitamos reinstalarlo completamente desde

cero, y suponiendo que el clúster se mantenga en perfectas condiciones en el otro nodo,

sería necesario reinstalar el sistema operativo, el software de clúster (Grid

Infrastructure) y el software de base de datos, aplicar los parches correspondientes a

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 153

todos ellos y ejecutar el procedimiento que indica el manual de Oracle para reincorporar

el nodo al clúster.

Si el fallo afectara a ambos nodos del clúster, pero no a la cabina, habría que repetir

el proceso de reinstalación descrito en el párrafo anterior para cada nodo.

Si la cabina también se ha visto afectada, además de reinstalar los nodos, deberemos

seguir las indicaciones del apartado siguiente.

Simulación de la pérdida de discos

En este caso práctico vamos a simular la pérdida completa de las LUNes de la SAN

asociadas al clúster de Oracle e intentaremos recuperar totalmente el servicio a partir de

los archivos generados por los scripts de backup vistos anteriormente. Supondremos que

el backup se realizó en el nodo 2 (apt-ora2) e intentaremos restaurar el clúster en el

nodo 1 (apt-ora1).

En un caso real, y suponiendo que se hubieran perdido todas las LUNes asociadas al

RAC, el administrador de la SAN nos habría asignado nuevas LUNes y las habría hecho

visible a los nodos del RAC. Éstos lo verían como un dispositivo “/dev/xxx”. En breve

indicaremos cómo obtener la información sobre del número de discos y su tamaño para

poderle indicar al administrador de la SAN las LUNes que necesitamos. En nuestra

prueba nosotros simularemos este hecho machacando las cabeceras de los discos con el

comando “dd” de Linux:

apt-ora1:~ # blkid

apt-ora1:~ # dd if=/dev/zero of=/dev/sdf1 bs=1024 count=1

apt-ora1:~ # dd if=/dev/zero of=/dev/sdb1 bs=1024 count=1

apt-ora1:~ # dd if=/dev/zero of=/dev/sda1 bs=1024 count=1

apt-ora1:~ # dd if=/dev/zero of=/dev/sdc1 bs=1024 count=1

apt-ora1:~ # dd if=/dev/zero of=/dev/sdd1 bs=1024 count=1

apt-ora1:~ # dd if=/dev/zero of=/dev/sde1 bs=1024 count=1

Evidentemente ASMLIB ya no reconoce los discos:

apt-ora1:~ # /etc/init.d/oracleasm scandisks

Scanning the system for Oracle ASMLib disks:

done

apt-ora1:~ # /etc/init.d/oracleasm listdisks

Apagamos todos los nodos del clúster y reiniciamos aquel con el que vamos a

realizar la restauración.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 154

Restauración de la “grid infraestructure” (clúster)

Nuestra primera misión es la de restaurar el grupo de discos donde está la

información del clúster. En el fichero “ocr.loc” que encontraremos en el fichero de la

copia de seguridad “cluster_info_apt-ora2.tgz” podremos ver la ubicación del OCR:

ocrconfig_loc=+CRS

Por lo tanto, el grupo de discos a restaurar será “+CRS”. Además, el fichero

“asm_disk_info.txt” dentro del fichero “node_info_apt-ora2.tgz” cuyo contenido es:

ASMCMD> State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files

Name

MOUNTED EXTERN N 512 4096 8388608 511960 736 0 736 0 N

BACKUP/

MOUNTED EXTERN N 512 4096 1048576 2047 1651 0 1651 0 Y CRS/

MOUNTED EXTERN N 512 4096 4194304 819168 728840 0 728840 0 N DATA/

MOUNTED EXTERN N 512 4096 4194304 127980 120296 0 120296 0 N FRA/

MOUNTED EXTERN N 512 4096 4194304 51192 364 0 364 0 N GG/

ASMCMD> Total_MB Free_MB OS_MB Name Failgroup Failgroup_Type Library Label UDID

Product Redund Path

102392 152 102399 BCK1 BCK1 REGULAR ASM Library - Generic Linux, version 2.0.4 (KABI_V2) BCK1

UNKNOWN ORCL:BCK1

102392 136 102399 BCK2 BCK2 REGULAR ASM Library - Generic Linux, version 2.0.4 (KABI_V2) BCK2

UNKNOWN ORCL:BCK2

102392 168 102399 BCK3 BCK3 REGULAR ASM Library - Generic Linux, version 2.0.4 (KABI_V2) BCK3

UNKNOWN ORCL:BCK3

102392 128 102399 BCK4 BCK4 REGULAR ASM Library - Generic Linux, version 2.0.4 (KABI_V2) BCK4

UNKNOWN ORCL:BCK4

102392 152 102399 BCK5 BCK5 REGULAR ASM Library - Generic Linux, version 2.0.4 (KABI_V2) BCK5

UNKNOWN ORCL:BCK5

2047 1651 2047 CRS CRS REGULAR ASM Library - Generic Linux, version 2.0.4 (KABI_V2) CRS

UNKNOWN ORCL:CRS

102396 91100 102399 DATA1 DATA1 REGULAR ASM Library - Generic Linux, version 2.0.4 (KABI_V2) DATA1

UNKNOWN ORCL:DATA1

102396 91104 102399 DATA2 DATA2 REGULAR ASM Library - Generic Linux, version 2.0.4 (KABI_V2) DATA2

UNKNOWN ORCL:DATA2

102396 91128 102399 DATA3 DATA3 REGULAR ASM Library - Generic Linux, version 2.0.4 (KABI_V2) DATA3

UNKNOWN ORCL:DATA3

102396 91088 102399 DATA4 DATA4 REGULAR ASM Library - Generic Linux, version 2.0.4 (KABI_V2) DATA4

UNKNOWN ORCL:DATA4

102396 91100 102399 DATA5 DATA5 REGULAR ASM Library - Generic Linux, version 2.0.4 (KABI_V2) DATA5

UNKNOWN ORCL:DATA5

102396 91104 102399 DATA6 DATA6 REGULAR ASM Library - Generic Linux, version 2.0.4 (KABI_V2) DATA6

UNKNOWN ORCL:DATA6

102396 91112 102399 DATA7 DATA7 REGULAR ASM Library - Generic Linux, version 2.0.4 (KABI_V2) DATA7

UNKNOWN ORCL:DATA7

102396 91104 102399 DATA8 DATA8 REGULAR ASM Library - Generic Linux, version 2.0.4 (KABI_V2) DATA8

UNKNOWN ORCL:DATA8

25596 24072 25599 FRA1 FRA1 REGULAR ASM Library - Generic Linux, version 2.0.4 (KABI_V2) FRA1

UNKNOWN ORCL:FRA1

25596 24044 25599 FRA2 FRA2 REGULAR ASM Library - Generic Linux, version 2.0.4 (KABI_V2) FRA2

UNKNOWN ORCL:FRA2

25596 24076 25599 FRA3 FRA3 REGULAR ASM Library - Generic Linux, version 2.0.4 (KABI_V2) FRA3

UNKNOWN ORCL:FRA3

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 155

25596 24100 25599 FRA4 FRA4 REGULAR ASM Library - Generic Linux, version 2.0.4 (KABI_V2) FRA4

UNKNOWN ORCL:FRA4

25596 24004 25599 FRA5 FRA5 REGULAR ASM Library - Generic Linux, version 2.0.4 (KABI_V2) FRA5

UNKNOWN ORCL:FRA5

25596 180 25599 GG1 GG1 REGULAR ASM Library - Generic Linux, version 2.0.4 (KABI_V2) GG1

UNKNOWN ORCL:GG1

25596 184 25599 GG2 GG2 REGULAR ASM Library - Generic Linux, version 2.0.4 (KABI_V2) GG2

UNKNOWN ORCL:GG2

ASMCMD> Reads Write Read_Errs Write_Errs Read_time Write_Time Bytes_Read Bytes_Written Voting_File Path

436850 134877 0 0 2377.561 197146.34287 105432396288 15437064704 N ORCL:BCK1

19387 135024 0 0 27.329998 195478.717986 209886720 15414993408 N ORCL:BCK2

6304 134365 0 0 12.598999 197667.283812 217648128 15427287040 N ORCL:BCK3

90938 135921 0 0 69.625 192934.305186 561661440 15393727488 N ORCL:BCK4

19699 157022 0 0 48.31 206436.92301 253792256 15441104896 N ORCL:BCK5

230453 1 0 0 297.874 .001 13734483968 4096 Y ORCL:CRS

2506679 165807 0 0 8108.255976 2725.732909 98862202368 2701288448 N ORCL:DATA1

1253477 374340 0 0 3968.86 2348.30755 29426766336 2900851200 N ORCL:DATA2

1088093 596296 0 0 6256.122847 1957.555446 26569790464 3261931520 N ORCL:DATA3

1076186 175315 0 0 5168.549386 1606.22695 26308395008 2827591680 N ORCL:DATA4

1050673 141862 0 0 5186.435996 2242.173446 25860183552 2669270528 N ORCL:DATA5

1644145 454403 0 0 4832.172902 2042.6256 35700692480 6406579712 N ORCL:DATA6

1075703 124508 0 0 5702.006249 1722.188101 26002175488 2523084288 N ORCL:DATA7

2004712 306745 0 0 5154.409779 1300.05279 41505337344 3225702400 N ORCL:DATA8

243297 277531 0 0 1402.812 256.772 54103904256 1258577408 N ORCL:FRA1

207445 245123 0 0 1513.144 902.633425 54106834432 1605453824 N ORCL:FRA2

34612 482666 0 0 194.303 1547.051345 1545536000 1478119424 N ORCL:FRA3

34349 215641 0 0 191.035 491.438389 1562927616 1036813312 N ORCL:FRA4

240129 836255 0 0 1480.725 2883.269785 53917542912 5188246528 N ORCL:FRA5

266840 20 0 0 1174.601001 .014 52675151360 25088 N ORCL:GG1

35625 88 0 0 21.958 .044 149788672 103424 N ORCL:GG2

ASMCMD> Group_Num Disk_Num Incarn Mount_Stat Header_Stat Mode_Stat State Path

1 0 3915953739 CACHED MEMBER ONLINE NORMAL ORCL:BCK1

1 1 3915953740 CACHED MEMBER ONLINE NORMAL ORCL:BCK2

1 2 3915953741 CACHED MEMBER ONLINE NORMAL ORCL:BCK3

1 3 3915953742 CACHED MEMBER ONLINE NORMAL ORCL:BCK4

1 4 3915953743 CACHED MEMBER ONLINE NORMAL ORCL:BCK5

2 0 3915953744 CACHED MEMBER ONLINE NORMAL ORCL:CRS

3 0 3915953745 CACHED MEMBER ONLINE NORMAL ORCL:DATA1

3 1 3915953746 CACHED MEMBER ONLINE NORMAL ORCL:DATA2

3 2 3915953747 CACHED MEMBER ONLINE NORMAL ORCL:DATA3

3 3 3915953748 CACHED MEMBER ONLINE NORMAL ORCL:DATA4

3 4 3915953749 CACHED MEMBER ONLINE NORMAL ORCL:DATA5

3 5 3915953750 CACHED MEMBER ONLINE NORMAL ORCL:DATA6

3 6 3915953751 CACHED MEMBER ONLINE NORMAL ORCL:DATA7

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 156

3 7 3915953752 CACHED MEMBER ONLINE NORMAL ORCL:DATA8

4 0 3915953753 CACHED MEMBER ONLINE NORMAL ORCL:FRA1

4 1 3915953754 CACHED MEMBER ONLINE NORMAL ORCL:FRA2

4 2 3915953755 CACHED MEMBER ONLINE NORMAL ORCL:FRA3

4 3 3915953756 CACHED MEMBER ONLINE NORMAL ORCL:FRA4

4 4 3915953757 CACHED MEMBER ONLINE NORMAL ORCL:FRA5

5 0 3915953758 CACHED MEMBER ONLINE NORMAL ORCL:GG1

5 1 3915953759 CACHED MEMBER ONLINE NORMAL ORCL:GG2

ASMCMD> Create_Date Mount_Date Repair_Timer Path

10-APR-13 11-MAY-13 0 ORCL:BCK1

10-APR-13 11-MAY-13 0 ORCL:BCK2

10-APR-13 11-MAY-13 0 ORCL:BCK3

10-APR-13 11-MAY-13 0 ORCL:BCK4

10-APR-13 11-MAY-13 0 ORCL:BCK5

09-APR-13 11-MAY-13 0 ORCL:CRS

10-APR-13 11-MAY-13 0 ORCL:DATA1

10-APR-13 11-MAY-13 0 ORCL:DATA2

10-APR-13 11-MAY-13 0 ORCL:DATA3

10-APR-13 11-MAY-13 0 ORCL:DATA4

10-APR-13 11-MAY-13 0 ORCL:DATA5

10-APR-13 11-MAY-13 0 ORCL:DATA6

10-APR-13 11-MAY-13 0 ORCL:DATA7

10-APR-13 11-MAY-13 0 ORCL:DATA8

10-APR-13 11-MAY-13 0 ORCL:FRA1

10-APR-13 11-MAY-13 0 ORCL:FRA2

11-MAY-13 11-MAY-13 0 ORCL:FRA3

11-MAY-13 11-MAY-13 0 ORCL:FRA4

11-MAY-13 11-MAY-13 0 ORCL:FRA5

10-APR-13 11-MAY-13 0 ORCL:GG1

10-APR-13 11-MAY-13 0 ORCL:GG2

Del contenido de este fichero podemos deducir que:

• Existían 5 grupos de discos: +CRS, +DATA, +FRA, +BACKUP y +GG

• Todos ellos tenían redundancia externa (EXTERN)

• El grupo de discos CRS estaba formado sólo por el disco CRS, el grupo de

discos DATA estaba formado por los discos DATA1 a DATA8, el grupo de

discos FRA estaba formado por los discos FRA1 a FRA5, etc. Esta

información también se puede obtener del fichero “asm_meta_+ASM2.ora”

también dentro del fichero “node_info_apt-ora2.tgz”.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 157

Sabiendo el número de discos y su tamaño podemos indicarle al administrador de la

cabina de discos ZFS que nos prepare las LUNs iSCSI necesarias y que las haga visibles

mediante dispositivos “/dev” de Linux a ambos nodos del clúster:

/dev/sdc1: LABEL="DATA1" TYPE="oracleasm"

/dev/sdd1: LABEL="DATA2" TYPE="oracleasm"

/dev/sde1: LABEL="DATA3" TYPE="oracleasm"

/dev/sdf1: LABEL="DATA4" TYPE="oracleasm"

/dev/sdg1: LABEL="DATA5" TYPE="oracleasm"

/dev/sdh1: LABEL="DATA6" TYPE="oracleasm"

/dev/sdi1: LABEL="DATA7" TYPE="oracleasm"

/dev/sdj1: LABEL="DATA8" TYPE="oracleasm"

/dev/sdk1: LABEL="FRA1" TYPE="oracleasm"

/dev/sdl1: LABEL="FRA2" TYPE="oracleasm"

/dev/sdn1: LABEL="GG2" TYPE="oracleasm"

/dev/sdm1: LABEL="GG1" TYPE="oracleasm"

/dev/sdo1: LABEL="CRS" TYPE="oracleasm"

/dev/sdp1: LABEL="BCK1" TYPE="oracleasm"

/dev/sdq1: LABEL="BCK2" TYPE="oracleasm"

/dev/sds1: LABEL="BCK4" TYPE="oracleasm"

/dev/sdr1: LABEL="BCK3" TYPE="oracleasm"

/dev/sdt1: LABEL="BCK5" TYPE="oracleasm"

/dev/sdu1: LABEL="FRA3" TYPE="oracleasm"

/dev/sdv1: LABEL="FRA4" TYPE="oracleasm"

/dev/sdw1: LABEL="FRA5" TYPE="oracleasm"

A nosotros ahora mismo nos interesa crear el grupo de discos CRS y lo primero que

hacemos es marcar los discos para su uso como ASM:

apt-ora1:~ # /etc/init.d/oracleasm createdisk CRS /dev/sdo1

Marking disk "CRS" as an ASM disk: done

apt-ora1:~ # /etc/init.d/oracleasm scandisks

apt-ora1:~ # /etc/init.d/oracleasm listdisks

Arrancamos la pila del clúster CRS en modo exclusivo:

apt-ora1:~ # /u01/app/11.2.0/grid/bin/crsctl start crs –excl

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 158

Descomprimimos el archivo de backup de los metadatos de ASM

“asm_meta_+ASM2.ora” del fichero “node_info_apt-ora2.tgz”.

Para evitar que nos aparezca el error

ORA-15283: ASM operation requires compatible.rdbms of 11.1.0.7.0 or higher

Ejecutamos conectados como “grid” el comando de restauración del grupo de discos

CRS de tal forma que genere un fichero de comandos sql en el que modificaremos el

parámetro “compatible.rdbms” a “11.2” y que ejecutaremos posteriormente.

ASMCMD> md_restore asm_meta_+ASM2.ora --full -G CRS -S create_CRS.sql

Current Diskgroup metadata being restored: CRS

grid@apt-ora1:/tmp> sqlplus "/ as sysasm"

SQL>@create_CRS.sql

SQL>exit

Creamos el resto de grupo de discos. En realidad no es necesario hacerlo ahora pero

ya que tenemos el archivo de backup de los metadatos de ASM a mano no es mala idea

aprovecharlo. Previamente deberemos marcar los discos para su uso por ASM:

apt-ora1:~ # /etc/init.d/oracleasm createdisk DATA1 /dev/sdc1

Marking disk "DATA1" as an ASM disk: done

...

apt-ora1:~ # /etc/init.d/oracleasm createdisk FRA1 /dev/sdk1

Marking disk "FRA1" as an ASM disk: done

...

apt-ora1:~ # /etc/init.d/oracleasm scandisks

apt-ora1:~ # /etc/init.d/oracleasm listdisks

Luego generamos los scripts de creación de los grupo de discos:

ASMCMD> md_restore asm_meta_+ASM2.ora --full -G DATA -S create_DATA.sql

Current Diskgroup metadata being restored: DATA

ASMCMD> md_restore asm_meta_+ASM2.ora --full -G FRA -S create_FRA.sql

Current Diskgroup metadata being restored: FRA

...

Cambiamos el “compatible.rdbms” de los scripts y finalmente los ejecutamos

grid@apt-ora1:/tmp> sqlplus "/ as sysasm"

SQL> @create_DATA.sql

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 159

SQL> @create_FRA.sql

...

ASMCMD> lsdg

State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name

MOUNTED EXTERN N 512 4096 8388608 511960 736 0 736 0 N BACKUP/

MOUNTED EXTERN N 512 4096 1048576 2047 1651 0 1651 0 Y CRS/

MOUNTED EXTERN N 512 4096 4194304 819168 728832 0 728832 0 N DATA/

MOUNTED EXTERN N 512 4096 4194304 127980 120244 0 120244 0 N FRA/

MOUNTED EXTERN N 512 4096 4194304 51192 364 0 364 0 N GG/

Ahora podemos restaurar la configuración del clúster (CRS). Para ello

descomprimimos el fichero “backup_20130519_205415.ocr” del archivo

“clúster_info_apt-ora2.tgz” y ejecutamos:

# /u01/app/11.2.0/grid/bin/ocrconfig -restore backup_20130519_205415.ocr

Seguidamente arrancamos el CRS

# /u01/app/11.2.0/grid/bin/crsctl start res ora.crsd –init

Y restauramos el “voting disk”:

# /u01/app/11.2.0/grid/bin/crsctl replace votedisk +CRS

A partir del fichero “pfile_+ASM2.ora” incluido en el fichero “node_info_apt-

ora2.tgz” generamos el SPFILE de la instancia ASM:

grid@apt-ora1:/tmp> sqlplus "/ as sysasm"

SQL> create spfile=’+CRS’ from pfile='/tmp/pfile_+ASM2.ora';

Paramos, arrancamos y verificamos el CRS

apt-ora1:/tmp # /u01/app/11.2.0/grid/bin/crsctl stop crs –f

apt-ora1:/tmp # /u01/app/11.2.0/grid/bin/crsctl start crs

apt-ora1:/tmp # /u01/app/11.2.0/grid/bin/crsctl check cluster -all

**************************************************************

apt-ora1:

CRS-4537: Cluster Ready Services is online

CRS-4529: Cluster Synchronization Services is online

CRS-4533: Event Manager is online

**************************************************************

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 160

Restauración de las instancias de bases de datos

En este punto, la infraestructura del grid (el clúster) está restaurado. Ahora le toca el

turno a las instancias de bases de datos que tuviéramos en él. La mayoría de las

operaciones las llevaremos a cabo con el usuario Linux “oracle”.

Comenzamos por restaurar el SPFILE de la instancia de base de datos a partir de la

copia RMAN. Necesitaremos el DBID de la base de datos. Podemos obtenerlo

fácilmente del log de la copia de RMAN.

Primero arrancamos la instancia en modo “no mount” con un pfile básico que sólo

contiene la línea:

db_name=APTORA

SQL> startup nomount pfile='pfile_basico.ora';

Ahora restauramos el SPFILE a partir de la copia de RMAN:

oracle@apt-ora1:> rman target /

RMAN>SET DBID 277940385

RMAN> restore spfile from '/u01/backup/.../SPFILE_APTORA_20130519_1plod95i_1_1.bak';

SQL> create pfile='/tmp/pfiless.ora' from

spfile='+data/DB_UNKNOWN/PARAMETERFILE/SPFILE.256.730266727';

SQL> shutdown abort

SQL> startup nomount pfile='/tmp/pfiless.ora';

oracle@apt-ora1:/> rman target /

RMAN> SET DBID 277940385;

RMAN> restore spfile from

'/u01/backup/BCK_APTORA/APTORA2/7/SPFILE_APTORA_20130519_1plod95i_1_1.bak';

SQL> shutdown abort

SQL> startup nomount

Restauramos el controlfile y colocamos la base de datos en modo MOUNT:

RMAN> restore controlfile from

'/u01/backup/BCK_APTORA/APTORA2/domingo/CTL_APTORA_2013_1floasg7_1_1.bak';

RMAN> sql 'alter database mount';

Ahora restauramos los datafiles y archivelogs de la base de datos. Miramos el TAG

de la copia de datafiles del fichero de log de la copia de RMAN y ejecutamos:

RMAN> restore database from tag='TAG20130519T233739';

RMAN> list backupset tag='TAG20130519T234744';

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 161

RMAN> restore archivelog from sequence 9;

Realizamos el recover:

SQL> recover database using backup controlfile until cancel;

Y finalmente abrimos la base de datos con “resetlogs”:

SQL> alter database open resetlogs;

Scripts de backup del clúster y de la base de datos en RAC

Habilitamos la equivalencia de usuario “root” para SSH:

[root@apt-ora1 .ssh]# ssh-keygen -t dsa

[root@apt-ora2 .ssh]# ssh-keygen -t dsa

[root@apt-ora1 .ssh]# ssh apt-ora1 cat /root/.ssh/id_dsa.pub >> /root/.ssh/authorized_keys

The authenticity of host 'apt-ora1 (10.5.10.31)' can't be established.

RSA key fingerprint is e1:6c:64:5e:1c:d8:08:6d:e8:b6:1d:d8:2f:cd:e5:16.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'apt-ora1,10.5.10.31' (RSA) to the list of known hosts.

root@apt-ora1's password:

[root@apt-ora1 .ssh]# ssh apt-ora2 cat /root/.ssh/id_dsa.pub >> /root/.ssh/authorized_keys

root@apt-ora2's password:

[root@apt-ora1 .ssh]# scp /root/.ssh/authorized_keys apt-ora2:/root/.ssh/authorized_keys

[root@apt-ora1 .ssh]# chmod 600 authorized_keys

[root@apt-ora2 .ssh]# chmod 600 authorized_keys

[root@apt-ora1 .ssh]# ssh apt-ora2

[root@apt-ora2 ~]# ssh apt-ora2

[root@apt-ora2 ~]# exit

logout

Connection to apt-ora2 closed.

[root@apt-ora2 ~]# exit

logout

Connection to apt-ora2 closed.

[root@apt-ora1 .ssh]# ssh apt-ora1

[root@apt-ora1 ~]# exit

logout

Connection to apt-ora1 closed.

[root@apt-ora1 .ssh]# ssh apt-ora2

[root@apt-ora2 ~]# exit

logout

Connection to apt-ora2 closed.

[root@apt-ora1 .ssh]# ssh apt-ora2

[root@apt-ora2 ~]# ssh apt-ora1

[root@apt-ora1 ~]# exit

logout

[root@apt-ora2 ~]# ssh apt-ora2

[root@apt-ora2 ~]# exit

logout

[root@apt-ora2 ~]# exit

logout

Connection to apt-ora2 closed.

[root@apt-ora1 .ssh]# ssh apt-ora1

[root@apt-ora1 ~]# exit

logout

Connection to apt-ora1 closed.

[root@apt-ora1 backup]# chmod 755 /home/oracle

[root@apt-ora2 backup]# chmod 755 /home/oracle

[root@apt-ora2 backup]# chown oracle.oinstall -R /u01/backup/BCK_APTORA/

[root@apt-ora2 backup]# chmod 775 -R /u01/backup/BCK_APTORA/

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 162

[root@apt-ora1 BCK_APTORA]# cd /u01/backup/BCK_APTORA/

[root@apt-ora1 BCK_APTORA]# mkdir gg_1

[root@apt-ora1 BCK_APTORA]# chown oracle.oinstall gg_1/

[root@apt-ora1 BCK_APTORA]# chmod 775 gg_1/

[root@apt-ora1 backup]# mkdir /u01/backup/BCK_APTORA/tmp

[root@apt-ora1 backup]# chmod 777 /u01/backup/BCK_APTORA/tmp

Primeras pruebas de backup con RMAN (sin paralelismo pues no está soportado en

la Standard Edition):

Cambiamos el UNDO_RETENTION a 6 horas:

alter system set undo_retention = 21600 scope=BOTH sid='*';

Scripts de backup del nodo 1:

backup_aptora-cluster.sh

#!/bin/bash

#

# Script de copia completa del cluster.

#

# Realiza copia RMAN y EXPDP de todas las bases de datos del cluster asociadas

# a este ORACLE_HOME, de la configuracion del cluster (OCR),

# de la configuracion local de cada nodo (OLR), de la configuracion de las instancias

# de bases de datos de todos los nodos (incluyendo las ASM)

# y de la configuracion de los discos ASM propiamente dicha.

#

# El script realiza además un backup de la configuración de GoldenGate

#

#========================

#Configuracion del script

#========================

#Directorio raiz EN DESTINO bajo el cual almacenar los fichreros de copia

BKP_REMOTE_DIR="/u01/soft/backup/remoto"

#FIRST_DAY es un offset que indica cuantos dias atras comenzar a

#realizar la copia. (0 indica la copia

#de hoy, 1 la de ayer, y asi sucesivamente)

FIRST_DAY=0

#NUM_DAYS numero de dias a copiar a partir de FIRST_DAY.

#(1 indica solo la de FIRST_DAY, 2 indica la

#de FIRST_DAY y la del dia siguiente, y asi sucesivamente)

NUM_DAYS=1

#Nombre del cluster (solo a efectos de nombrar el directorio de backup)

CLUSTER_NAME=apt-ora-cluster

#Listado (separado por espacios) de todos los SID correspondientes a las INSTANCIAS de

#bases de datos del cluster de las que se quiere hacer backup

DATABASE_SIDS=( "APTORA1" )

#Configuracion para el backup de GoldenGate

export GG_HOME=/u01/gg

export GG_BCK_DIR=/u01/backup/BCK_APTORA/GGATE

#Nombre de la instancia de GoldenGate (slo a efectos de creacin de carpeta backup)

GG_INSTANCE_NAME=gg_1

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 163

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1

export PATH=$ORACLE_HOME/bin:$PATH

#==============================

#Configuracion interna

#==============================

#Directorio donde esta ubicado este script. No se recomienda modificar el valor de

#esta variable.

SCRIPT_DIR="`dirname $(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")`"

#LOG_FILENAME indica la ruta completa al fichero donde se guardan los log de ejecucion

#de este fichero.

LOG_FILENAME="$SCRIPT_DIR/log/backup_${CLUSTER_NAME}.log"

#Rutas a los scripts que llama este (por defecto los ubica en el mismo directorio en el

#que estamos)

BKP_CLUSTER_EXEC_PATH="$SCRIPT_DIR/backup_cluster.sh"

BKP_RMAN_EXEC_PATH="$SCRIPT_DIR/backup_rman.sh"

BKP_EXPDP_EXEC_PATH="$SCRIPT_DIR/backup_expdp.sh"

BKP_GGATE_EXEC_PATH="$SCRIPT_DIR/backup_ggate.sh"

ENVIO_BKP_EXEC_PATH="$SCRIPT_DIR/envio_backup.sh"

#====================

#Funciones auxiliares

#====================

function time_stamp ()

{

echo >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

date >> $LOG_FILENAME

echo $1 >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

echo >> $LOG_FILENAME

}

#========================

#Acciones de copia

#========================

time_stamp "Comienzo de la copia de seguridad del cluster: ${CLUSTER_NAME}"

time_stamp "Comienzo de la copia de seguridad de la configuracion del cluster

${CLUSTER_NAME}"

$BKP_CLUSTER_EXEC_PATH >> $LOG_FILENAME 2>&1

#$ENVIO_BKP_EXEC_PATH $CLUSTER_NAME $BKP_REMOTE_DIR $FIRST_DAY $NUM_DAYS >>

$LOG_FILENAME 2>&1

time_stamp "Fin de la copia de seguridad de la configuracion del cluster ${CLUSTER_NAME}"

time_stamp "Comienzo de la copia de seguridad de GoldenGate en el HOME ${GG_HOME}"

su - oracle -c "$BKP_GGATE_EXEC_PATH ${GG_HOME} ${GG_BCK_DIR}" >> $LOG_FILENAME 2>&1

#$ENVIO_BKP_EXEC_PATH $GG_INSTANCE_NAME $BKP_REMOTE_DIR $FIRST_DAY $NUM_DAYS >>

$LOG_FILENAME 2>&1

time_stamp "Fin de la copia de seguridad de GoldenGate en el HOME ${GG_HOME}"

#Vamos instancia por instancia realizando las copias de seguridad

for i in ${!DATABASE_SIDS[*]}

do

time_stamp "Comienzo del backup de la instancia: ${DATABASE_SIDS[$i]}.";

su - oracle -c "$$BKP_RMAN_EXEC_PATH $ORACLE_HOME ${DATABASE_SIDS[$i]} COMP”

>> $LOG_FILENAME 2>&1

su - oracle -c "$$BKP_EXPDP_EXEC_PATH $ORACLE_HOME ${DATABASE_SIDS[$i]} COMP” >>

$LOG_FILENAME 2>&1

# $ENVIO_BKP_EXEC_PATH ${DATABASE_SIDS[$i]} $BKP_REMOTE_DIR $FIRST_DAY $NUM_DAYS >>

$LOG_FILENAME 2>&1

time_stamp "Fin del backup de la instancia ${DATABASE_SIDS[$i]}.";

done

time_stamp "Fin de la copia de seguridad del cluster: ${CLUSTER_NAME}"

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 164

backup_cluster.sh

#!/bin/bash

#

# Script de copia de seguridad del cluster.

# Realiza la copia de los archivos de configuracion del cluster,

#entre otros, OCR, OLR, instancias ASM y configuracion de discos

#

# NOTAS:

# * Es necesario que el fichero ".tgz" resultante de la ejecucion de

# "cluster_info.sh" se coloque en una ruta local

# a cada nodo que coincida con los valores de la variable tipo array

#REMOTE_INFO_PATH de este script.

#

#========================

#Configuracion del script

#========================

#BACKUP_DIR_BASE indica la ruta del directorio raiz donde se guardaran los ficheros

#con la informacion recopilada

BACKUP_DIR_BASE="/u01/backup/BCK_APTORA/"

#Numero de dias a conservar el backup EN DISCO (sin contar la copia de hoy)

#Por ejemplo, un valor de 1 guardara solo la copia del dia anterior (y al finalizar

#este script la de hoy)

BACKUP_THRESHOLD=0

#Nombre del cluster (solo a efectos de nombrar el directorio de backup)

CLUSTER_NAME=apt-ora-cluster

#Directorio donde esta ubicado este script. No se recomienda modificar el valor de

#esta variable.

SCRIPT_DIR="`dirname $(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")`"

#Informacion del RAC

#-------------------

#Nombre de los nodos. El nombre que se especifique debe permitir la resolucion a IP

NODE_NAMES=( "apt-ora1" "apt-ora2" )

#Rutas al ejecutable que recoge la informacion del nodo en cada nodo (normalmente

#sera la misma en todos los nodos del cluster)

REMOTE_EXEC_CMD=( "$SCRIPT_DIR/node_info.sh" "$SCRIPT_DIR/node_info.sh" )

#Rutas al ejecutable que recoge la informacion del cluster en cada nodo (normalmente sera

#la misma en todos los nodos del cluster)

REMOTE_EXEC_CMD_2=( "$SCRIPT_DIR/cluster_info.sh" "$SCRIPT_DIR/cluster_info.sh" )

#Rutas remotas donde recoger los ficheros resultantes (normalmente sera la misma en

#todos los nodos del cluster)

REMOTE_INFO_PATH=( "/u01/backup/BCK_APTORA/tmp" "/u01/backup/BCK_APTORA/tmp" )

#==================

#Variables internas

#==================

#Directorio donde esta ubicado este script. No se recomienda modificar el valor de

#esta variable.

SCRIPT_DIR="`dirname $(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")`"

#LOG_FILENAME indica la ruta completa al fichero donde se guardan los log de las copias.

#Los logs de las nuevas copias se van anexando al final de este fichero.

LOG_FILENAME="$SCRIPT_DIR/log/backup_cluster.log"

BACKUP_DIR="$BACKUP_DIR_BASE/$CLUSTER_NAME/`date +%u`"

#Metodo para identificar los ficheros generados por los nodos

BK_CLUSTER_FILENAME=cluster_info_*.tgz

BK_NODE_FILENAME=node_info_*.tgz

#====================

#Funciones auxiliares

#====================

function time_stamp ()

{

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 165

echo >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

date >> $LOG_FILENAME

echo $1 >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

echo >> $LOG_FILENAME

}

function del_bck_files ()

{

OLD_DIR_AUX=$1

echo "Borrando $OLD_DIR_AUX/$BK_CLUSTER_FILENAME" >> $LOG_FILENAME

rm -f $OLD_DIR_AUX/$BK_CLUSTER_FILENAME >> $LOG_FILENAME 2>&1

echo "Borrando $OLD_DIR_AUX/$BK_NODE_FILENAME" >> $LOG_FILENAME

rm -f $OLD_DIR_AUX/$BK_NODE_FILENAME >> $LOG_FILENAME 2>&1

}

#=================

#Acciones de copia

#=================

time_stamp 'Comienzo de la recopilacion de configuracion del cluster'

#Borrado de copias anteriores

time_stamp 'Borrado de copias anteriores'

if [ $BACKUP_THRESHOLD -lt 0 ] || [ $BACKUP_THRESHOLD -gt 6 ]; then

echo 'ERROR: Debe indicar un umbral de entre 0 y 6 dias' >> $LOG_FILENAME

exit;

fi

for i in `seq $((BACKUP_THRESHOLD + 1)) 1 7`; do

OLD_DIR="$BACKUP_DIR_BASE/$CLUSTER_NAME/`date --date="$i days ago" +%u`"

del_bck_files $OLD_DIR

done

if [ -d $BACKUP_DIR ]; then

del_bck_files $BACKUP_DIR

else

echo "Creando directorio $BACKUP_DIR" >> $LOG_FILENAME

mkdir -p $BACKUP_DIR >> $LOG_FILENAME 2>&1

fi

#Vamos nodo por nodo (incluido este) recopilando la informacion

for i in ${!NODE_NAMES[*]}

do

time_stamp "Comienzo de recuperacion de datos del nodo ${NODE_NAMES[$i]}.";

#Ejecutamos el comando remoto de recopilacion de informacion del nodo

COMANDO="su - grid -c '\"${REMOTE_EXEC_CMD[$i]}\" \"${REMOTE_INFO_PATH[$i]}\"'"

echo Ejecutando en ${NODE_NAMES[$i]} el comando $COMANDO >> $LOG_FILENAME

ssh ${NODE_NAMES[$i]} -C "$COMANDO" >> $LOG_FILENAME 2>&1

#Nos traemos el resultado

echo Copiando de ${NODE_NAMES[$i]} los ficheros

"${REMOTE_INFO_PATH[$i]}/${BK_NODE_FILENAME}" a $BACKUP_DIR >> $LOG_FILENAME

scp ${NODE_NAMES[$i]}:"${REMOTE_INFO_PATH[$i]}/${BK_NODE_FILENAME}" $BACKUP_DIR >>

$LOG_FILENAME 2>&1

#Ejecutamos el comando remoto de recopilacion de informacion del cluster

COMANDO="\"${REMOTE_EXEC_CMD_2[$i]}\" \"${REMOTE_INFO_PATH[$i]}\""

echo Ejecutando en ${NODE_NAMES[$i]} el comando $COMANDO >> $LOG_FILENAME

ssh ${NODE_NAMES[$i]} -C "$COMANDO" >> $LOG_FILENAME 2>&1

#Nos traemos el resultado

echo Copiando de ${NODE_NAMES[$i]} los ficheros

"${REMOTE_INFO_PATH[$i]}/${BK_CLUSTER_FILENAME}" a $BACKUP_DIR >> $LOG_FILENAME

scp ${NODE_NAMES[$i]}:"${REMOTE_INFO_PATH[$i]}/${BK_CLUSTER_FILENAME}" $BACKUP_DIR >>

$LOG_FILENAME 2>&1

time_stamp "Fin de recuperacion de datos del nodo ${NODE_NAMES[$i]}."

done

cp $LOG_FILENAME $BACKUP_DIR

time_stamp 'Fin de la recopilacion de configuracion del cluster'

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 166

backup_expdp.sh

#!/bin/bash

#

# Script de copia de seguridad usando EXPDP.

#

# Invocar el script como ./backup_expdp.sh <ORACLE_HOME> <SID> [COMP]

# Por ejemplo ./backup_expdp.sh '/u01/app/oracle/product/11.2.0/dbhome_1' APTORA1 COMP

#

if [ "$1" == "" ] || [ "$2" == "" ]; then

echo 'ERROR: Debe indicar un ORACLE_HOME y un ORACLE_SID validos'

echo 'Uso: ./backup_rman <ORACLE_HOME> <SID>'

exit;

fi

# Si en la linea de comandos se ha especificado como tercer parametro "COMP",

# habilitamos la compresion RMAN anadiendo a cada sentencia de copia la

#clausula correspondiente.

COMP_CLAUSE=""

if [ "$3" == "COMP" ]; then

COMP_CLAUSE="COMPRESSION=METADATA_ONLY"

fi

#================================

#Configuracion del entorno Oracle

#================================

export ORACLE_SID="${2}"

export ORACLE_HOME="${1}"

export PATH="$ORACLE_HOME/bin:$PATH"

#===============================

#Configuracion de la copia EXPDP

#===============================

#Numero de dias a conservar el backup EN DISCO (sin contar la copia de hoy)

#Por ejemplo, un valor de 1 guardara solo la copia del dia anterior (y al finalizar

#este script la de hoy)

BACKUP_THRESHOLD=0

#Directorio donde esta ubicado este script. No se recomienda modificar el valor de

#esta variable.

SCRIPT_DIR="`dirname $(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")`"

#BACKUP_DIR_BASE indica la ruta del directorio raiz donde se guardaran los ficheros de

#las copias RMAN

BACKUP_DIR_BASE="/u01/backup/BCK_APTORA"

#LOG_FILENAME indica la rutaq completa al fichero donde se guardan los log de las copias.

#Los logs de las nuevas copias se van anexando al final de este fichero.

LOG_FILENAME="$SCRIPT_DIR/log/backup_expdp_${ORACLE_SID}.log"

#Nombre del objeto directorio de la base de datos a usar en las copias

BD_EXPDP_DIR_NAME='EMPR_EXPDP_DIR'

#==================

#Variables internas

#==================

BACKUP_DIR="$BACKUP_DIR_BASE/$ORACLE_SID/`date +%u`"

#BACKUP_DIR="$BACKUP_DIR_BASE/$ORACLE_SID/copia_diaria"

DUMP_FILE_BASE_NAME=expdp_${ORACLE_SID}_`date +'%Y%m%d'`

DUMP_FILE_NAME=${DUMP_FILE_BASE_NAME}.dmp

DUMP_LOG_NAME=${DUMP_FILE_BASE_NAME}.log

#====================

#Funciones auxiliares

#====================

function time_stamp ()

{

echo >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

date >> $LOG_FILENAME

echo $1 >> $LOG_FILENAME

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 167

echo ------------------------------------------- >> $LOG_FILENAME

echo >> $LOG_FILENAME

}

function del_bck_files ()

{

OLD_DIR_AUX=$1

echo "Borrando $OLD_DIR_AUX/*.dmp" >> $LOG_FILENAME

rm -f $OLD_DIR_AUX/*.dmp >> $LOG_FILENAME 2>&1

echo "Borrando $OLD_DIR_AUX/expdp_*.log" >> $LOG_FILENAME

rm -f $OLD_DIR_AUX/expdp_*.log >> $LOG_FILENAME 2>&1

}

#=================

#Acciones de copia

#=================

time_stamp 'Comienzo de la copia EXPDP'

#Creamos (o modificamos) el objeto directorio para adaptarlo a la ruta correcta para el

#dia de la semana

sqlplus "/ as sysdba" >> $LOG_FILENAME 2>&1 <<__EOF__

begin

execute immediate 'CREATE OR REPLACE DIRECTORY $BD_EXPDP_DIR_NAME AS

'||'''$BACKUP_DIR''';

end;

/

__EOF__

time_stamp 'Borrado de copias anteriores'

if [ $BACKUP_THRESHOLD -lt 0 ] || [ $BACKUP_THRESHOLD -gt 6 ]; then

echo 'ERROR: Debe indicar un umbral de entre 0 y 6 dias' >> $LOG_FILENAME

exit;

fi

for i in `seq $((BACKUP_THRESHOLD + 1)) 1 7`; do

OLD_DIR="$BACKUP_DIR_BASE/$ORACLE_SID/`date --date="$i days ago" +%u`"

del_bck_files $OLD_DIR

done

if [ -d $BACKUP_DIR ]; then

del_bck_files $BACKUP_DIR

else

echo "Creando directorio $BACKUP_DIR" >> $LOG_FILENAME

mkdir -p $BACKUP_DIR 2>&1 >> $LOG_FILENAME

fi

time_stamp 'Backup completo de la base de datos'

TIMESTMP=`date "+%Y-%m-%d %H:%M:%S"`

FLBKTIME_CLAUSE="flashback_time=\"to_timestamp('$TIMESTMP','yyyy-mm-dd hh24:mi:ss')\""

expdp " '/ as sysdba' " full=Y directory=$BD_EXPDP_DIR_NAME dumpfile=$DUMP_FILE_NAME

logfile=$DUMP_LOG_NAME $FLBKTIME_CLAUSE $COMP_CLAUSE >> $LOG_FILENAME 2>&1

time_stamp 'Finalizacion de la copia de seguridad'

backup_ggate.sh

#!/bin/bash

#

# Script que obtiene informacion de GoldenGate y realiza una copia de seguridad de su

# Invocar el script como ./backup_ggate.sh <gg_home> <ruta_destino>

# Por ejemplo ./backup_ggate.sh /u01/gg /u01/backup/BCK_APTORA/GGATE

#

if [ "$1" == "" ]; then

echo 'ERROR: Debe indicar la ruta al directorio raíz de GG'

echo 'Uso: backup_ggate.sh <gg_home> <ruta_destino>'

exit;

fi

if [ "$2" == "" ]; then

echo 'ERROR: Debe indicar una ruta destino'

echo 'Uso: backup_ggate.sh <gg_home> <ruta_destino>'

exit;

fi

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 168

#==============================

#Configuracion del script

#==============================

#Numero de dias a conservar el backup EN DISCO (sin contar la copia de hoy)

#Por ejemplo, un valor de 1 guardara solo la copia del dia anterior (y al finalizar

#este script la de hoy)

BACKUP_THRESHOLD=0

#Datos del home de GG

GG_HOME=${1}

DEST_DIR=${2}

#Nombre de la instancia de GoldenGate (sólo a efectos de creación de carpeta backup)

GG_INSTANCE_NAME=gg_1

#==============================

#Configuracion interna

#==============================

#Directorio donde esta ubicado este script. No se recomienda modificar el valor de

#esta variable.

SCRIPT_DIR="`dirname $(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")`"

#LOG_FILENAME indica la ruta completa al fichero donde se guardan los log de ejecucion

#de este fichero.

LOG_FILENAME="$SCRIPT_DIR/log/backup_ggate_${HOSTNAME}.log"

TEMP_DIR=$DEST_DIR/backup_ggate_temp

BACKUP_DIR="$DEST_DIR/$GG_INSTANCE_NAME/`date +%u`"

#Funciones auxiliares

#====================

function time_stamp ()

{

echo >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

date >> $LOG_FILENAME

echo $1 >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

echo >> $LOG_FILENAME

}

function del_bck_files ()

{

OLD_DIR_AUX=$1

echo "Borrando $OLD_DIR_AUX/*.tgz" >> $LOG_FILENAME

rm -f $OLD_DIR_AUX/*.tgz >> $LOG_FILENAME 2>&1

}

#========================

#Acciones de recopilacion

#========================

time_stamp 'Comienzo de la recopilacion'

if [ -d $TEMP_DIR ]; then

echo "El directorio $TEMP_DIR ya existe. No puedo continuar" >> $LOG_FILENAME

exit;

else

echo "Creando directorio $TEMP_DIR" >> $LOG_FILENAME

mkdir -p $TEMP_DIR 2>&1 >> $LOG_FILENAME

fi

time_stamp 'Borrado de copias anteriores'

if [ $BACKUP_THRESHOLD -lt 0 ] || [ $BACKUP_THRESHOLD -gt 6 ]; then

echo 'ERROR: Debe indicar un umbral de entre 0 y 6 dias' >> $LOG_FILENAME

exit;

fi

for i in `seq $((BACKUP_THRESHOLD + 1)) 1 7`; do

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 169

OLD_DIR="$DEST_DIR/$GG_INSTANCE_NAME/`date --date="$i days ago" +%u`"

del_bck_files $OLD_DIR

done

if [ -d $BACKUP_DIR ]; then

del_bck_files $BACKUP_DIR

else

echo "Creando directorio $BACKUP_DIR" >> $LOG_FILENAME

mkdir -p $BACKUP_DIR 2>&1 >> $LOG_FILENAME

fi

time_stamp 'Comprobando y salvando la configuracion de GG'

cp -a $GG_HOME/ggserr.log $TEMP_DIR/ 2>&1

cp -a $GG_HOME/GLOBALS $TEMP_DIR/ 2>&1

tar -cvzf $TEMP_DIR/dirrpt.tgz $GG_HOME/dirrpt >> $LOG_FILENAME 2>&1

tar -cvzf $TEMP_DIR/dirprm.tgz $GG_HOME/dirprm >> $LOG_FILENAME 2>&1

tar -cvzf $TEMP_DIR/dirchk.tgz $GG_HOME/dirchk >> $LOG_FILENAME 2>&1

tar -cvzf $TEMP_DIR/dirsql.tgz $GG_HOME/dirsql >> $LOG_FILENAME 2>&1

#Copia del log

cp $LOG_FILENAME $TEMP_DIR/

time_stamp 'Generacion del archivo comprimido con la informacion recopilada'

tar -cvzf $BACKUP_DIR/backup_ggate_${GG_INSTANCE_NAME}_${HOSTNAME}.tgz $TEMP_DIR

>> $LOG_FILENAME 2>&1

rm -rf $TEMP_DIR >> $LOG_FILENAME 2>&1

time_stamp 'Fin de la recopilacion'

backup_rman.sh

#!/bin/bash

#

# Script de copia de seguridad en caliente usando RMAN.

# Opcionalmente realiza la actualizacion del catalogo

#

# Invocar el script como ./backup_rman.sh <ORACLE_HOME> <SID> [COMP]

# Por ejemplo ./backup_rman.sh '/u01/app/oracle/product/11.2.0/dbhome_1' APTORA

#COMP

#

if [ "$1" == "" ] || [ "$2" == "" ]; then

echo 'ERROR: Debe indicar un ORACLE_HOME y un ORACLE_SID validos'

echo 'Uso: ./backup_rman <ORACLE_HOME> <SID>'

exit;

fi

# Si en la linea de comandos se ha especificado como tercer parametro "COMP",

# habilitamos la compresion RMAN anadiendo a cada sentencia de copia la clausula

#correspondiente.

COMP_CLAUSE=""

if [ "$3" == "COMP" ]; then

COMP_CLAUSE="as compressed backupset"

fi

#================================

#Configuracion del entorno Oracle

#================================

export ORACLE_SID="${2}"

export ORACLE_HOME="${1}"

export PATH="$ORACLE_HOME/bin:$PATH"

#==============================

#Configuracion de la copia RMAN

#==============================

#Directorio donde esta ubicado este script. No se recomienda modificar el valor de

#esta variable.

SCRIPT_DIR="`dirname $(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")`"

#BACKUP_DIR_BASE indica la ruta del directorio raiz donde se guardaran los ficheros de

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 170

#las copias RMAN

BACKUP_DIR_BASE="/u01/backup/BCK_APTORA"

#Numero de dias a conservar el backup EN DISCO (sin contar la copia de hoy)

#Por ejemplo, un valor de 1 guardara solo la copia del dia anterior (y al finalizar

#este script la de hoy)

BACKUP_THRESHOLD=0

#LOG_FILENAME indica la ruta completa al fichero donde se guardan los log de las copias.

#Los logs de las nuevas copias se van anexando al final de este fichero.

LOG_FILENAME="$SCRIPT_DIR/log/backup_rman_${ORACLE_SID}.log"

#Los archivelogs generados despues de la fecha indicada por OLD_ARCHIVE_THRESHOLD

#se mantendran en disco.

#Esto tiene otra ventaja adicional: tendremos varias copias en cinta de los archivelogs

#mas recientes.

#Si, por ejemplo, se realiza una copia diaria y especificamos "sysdate-3" (este es el

#valor recomendado),

#tendremos 3 copias en cinta de los archivelogs y tendremos disponibles en disco

#los archivelogs de los tres ultimos

#dias a los que acudir en caso de tener que realizar un recover.

OLD_ARCHIVE_THRESHOLD=sysdate-3

OLD_ARCHIVE_FILENAME_TEMPLATE=OLD_ARCH_%d_%T_%U.bak

ARCHIVE_FILENAME_TEMPLATE=ARCH_%d_%T_%U.bak

DATABASE_FILENAME_TEMPLATE=DB_FULL_%d_%T_%U.bak

CONTROLFILE_FILENAME_TEMPLATE=CTL_%d_%T_%U.bak

CTLFILE_TRC_FILENAME_TEMPLATE=CTL_TRACE.txt

SPFILE_FILENAME_TEMPLATE=SPFILE_%d_%T_%U.bak

#Tamano maximo que tendra cada fichero de la copia (en KB)

FILESIZE_LIMIT_KB=4000000

#Especificar ENABLE_CROSSCHECK=y para realizar una actualizacion del catalogo de RMAN

#tras la copia.

#Se hara la comprobacion desde la fecha limite del ultimo 'crosscheck' HASTA el dia indicado

#por la variable CROSSCHECK_THRESHOLD. Se borraran del catalogo RMAN todas las entradas

#cuyos ficheros asociados no se encuentren en disco.

#CROSSCHECK_THRESHOLD se ajusta normalmente a 'SYSDATE-dias desde la copia mas antigua

#en cinta'

ENABLE_CROSSCHECK=y

CROSSCHECK_THRESHOLD=sysdate-120

#==================

#Variables internas

#==================

BACKUP_DIR="$BACKUP_DIR_BASE/$ORACLE_SID/`date +%u`"

#BACKUP_DIR="$BACKUP_DIR_BASE/$ORACLE_SID/copia_diaria"

#====================

#Funciones auxiliares

#====================

function time_stamp ()

{

echo >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

date >> $LOG_FILENAME

echo $1 >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

echo >> $LOG_FILENAME

}

function del_bck_files ()

{

OLD_DIR_AUX=$1

echo "Borrando $OLD_DIR_AUX/*.bak" >> $LOG_FILENAME

rm -f $OLD_DIR_AUX/*.bak >> $LOG_FILENAME 2>&1

echo "Borrando $OLD_DIR_AUX/*.tgz" >> $LOG_FILENAME

rm -f $OLD_DIR_AUX/*.tgz >> $LOG_FILENAME 2>&1

echo "Borrando $OLD_DIR_AUX/*.txt" >> $LOG_FILENAME

rm -f $OLD_DIR_AUX/*.txt >> $LOG_FILENAME 2>&1

echo "Borrando $OLD_DIR_AUX/oratab" >> $LOG_FILENAME

rm -f $OLD_DIR_AUX/oratab >> $LOG_FILENAME 2>&1

}

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 171

#=================

#Acciones de copia

#=================

time_stamp 'Comienzo de la copia RMAN'

#Borrado de copias anteriores

time_stamp 'Borrado de copias anteriores'

if [ $BACKUP_THRESHOLD -lt 0 ] || [ $BACKUP_THRESHOLD -gt 6 ]; then

echo 'ERROR: Debe indicar un umbral de entre 0 y 6 dias' >> $LOG_FILENAME

exit;

fi

for i in `seq $((BACKUP_THRESHOLD + 1)) 1 7`; do

OLD_DIR="$BACKUP_DIR_BASE/$ORACLE_SID/`date --date="$i days ago" +%u`"

del_bck_files $OLD_DIR

done

if [ -d $BACKUP_DIR ]; then

del_bck_files $BACKUP_DIR

else

echo "Creando directorio $BACKUP_DIR" >> $LOG_FILENAME

mkdir -p $BACKUP_DIR 2>&1 >> $LOG_FILENAME

fi

#Backup de la base de datos

time_stamp 'Backup de la base de datos'

rman target / nocatalog >> $LOG_FILENAME 2>&1 <<__EOF__

run

{

allocate channel c1 device type disk format '$BACKUP_DIR/$DATABASE_FILENAME_TEMPLATE';

set limit channel c1 kbytes=$FILESIZE_LIMIT_KB;

backup $COMP_CLAUSE (database);

sql "alter system archive log current";

release channel c1;

}

exit;

__EOF__

#Backup y posterior borrado de los archivelogs antiguos

time_stamp 'Backup y posterior borrado de los archivelogs antiguos'

rman target / nocatalog >> $LOG_FILENAME 2>&1 <<__EOF__

run

{

allocate channel c1 device type disk format '$BACKUP_DIR/$OLD_ARCHIVE_FILENAME_TEMPLATE';

set limit channel c1 kbytes=$FILESIZE_LIMIT_KB;

backup $COMP_CLAUSE (archivelog until time '$OLD_ARCHIVE_THRESHOLD');

delete noprompt archivelog until time '$OLD_ARCHIVE_THRESHOLD' backed up 1

times to device type disk;

release channel c1;

}

exit;

__EOF__

#Backup de los archivelogs recientes

time_stamp 'Backup de los archivelogs recientes'

rman target / nocatalog >> $LOG_FILENAME 2>&1 <<__EOF__

run

{

allocate channel c1 device type disk format '$BACKUP_DIR/$ARCHIVE_FILENAME_TEMPLATE';

set limit channel c1 kbytes=$FILESIZE_LIMIT_KB;

backup $COMP_CLAUSE (archivelog all);

release channel c1;

}

exit;

__EOF__

#Backup del spfile

time_stamp 'Backup del spfile'

rman target / nocatalog >> $LOG_FILENAME 2>&1 <<__EOF__

run

{

allocate channel c1 device type disk format '$BACKUP_DIR/$SPFILE_FILENAME_TEMPLATE';

backup (spfile);

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 172

release channel c1;

}

exit;

__EOF__

#Backup del pfile

#time_stamp '#Backup del pfile'

#cp -af $ORACLE_HOME/dbs/init${ORACLE_SID}.ora $BACKUP_DIR/ 2>&1 >> $LOG_FILENAME

#Actualizacion del catalogo de RMAN

if [ $ENABLE_CROSSCHECK == "y" ] || [ $ENABLE_CROSSCHECK == "Y" ]; then

time_stamp 'Actualización del catálogo de RMAN'

rman target / nocatalog >> $LOG_FILENAME 2>&1 << __EOF__

allocate channel for maintenance type disk;

crosscheck backupset completed before '$CROSSCHECK_THRESHOLD';

delete noprompt expired backup;

release channel;

exit;

__EOF__

fi

#Backup del controlfile

time_stamp 'Backup del controlfile'

rman target / nocatalog >> $LOG_FILENAME 2>&1 <<__EOF__

run

{

allocate channel c1 device type disk format

'$BACKUP_DIR/$CONTROLFILE_FILENAME_TEMPLATE';

backup (current controlfile);

SQL "alter database backup controlfile to trace as

''$BACKUP_DIR/$CTLFILE_TRC_FILENAME_TEMPLATE'' reuse";

release channel c1;

}

exit;

__EOF__

#Copia de archivos de configuracion y logs

#En la version del script para cluster comentamos las lineas que hacen backup

#del tns_admin, dbs u oratab, pues esta info ya la recopila "node_info.sh"

time_stamp 'Copia de archivos de configuracion y logs'

#tar -cvzf $BACKUP_DIR/tns_admin.tgz $ORACLE_HOME/network/admin >> $LOG_FILENAME 2>&1

#tar -cvzf $BACKUP_DIR/dbs.tgz $ORACLE_HOME/dbs >> $LOG_FILENAME 2>&1

#cp -a /etc/oratab $BACKUP_DIR/ >> $LOG_FILENAME 2>&1

#localizar_bdump;

#tar -cvzf $BACKUP_DIR/alert.tgz $BACKGROUND_DUMP_DEST/alert_$ORACLE_SID.log >>

#$LOG_FILENAME 2>&1

tar -cvzf $BACKUP_DIR/log_bck_rman_$ORACLE_SID.tgz $LOG_FILENAME >> $LOG_FILENAME 2>&1

time_stamp 'Fin de la copia RMAN'

cluster_info.sh

#!/bin/bash

#

# Script que obtiene informacion del cluster y realiza una copia de seguridad del OCR y

# del OLR del cluster

#

# Invocar el script como ./cluster_info.sh <ruta_destino>

# Por ejemplo ./cluster_info.sh /mnt/rman

#

if [ "$1" == "" ]; then

echo 'ERROR: Debe indicar una ruta destino'

echo 'Uso: ./cluster_info.sh <ruta_destino>'

exit;

fi

#==============================

#Configuracion del script

#==============================

#Datos de la instancia ASM

ASM_ORACLE_HOME=/u01/app/11.2.0/grid

#==============================

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 173

#Configuracion interna

#==============================

#Directorio donde esta ubicado este script. No se recomienda modificar el valor

#de esta variable.

SCRIPT_DIR="`dirname $(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")`"

#LOG_FILENAME indica la ruta completa al fichero donde se guardan los log de

#ejecucion de este fichero.

LOG_FILENAME="$SCRIPT_DIR/log/cluster_info_${HOSTNAME}.log"

export ORACLE_HOME=$ASM_ORACLE_HOME

export PATH="$ORACLE_HOME/bin:$PATH"

DEST_DIR=${1}

TEMP_DIR=$DEST_DIR/cluster_info_temp

#Ubicacion por defecto donde Oracle realizara los backups automaticos del OCR y OLR

#Normalmente no es necesario tocar estas variables (y de hecho tienen el valor por

#defecto de la instalacion del cluster).

#El script necesita disponer de esos valores para poder restaurarlos tras

#cambiarlos temporalmente para el backup.

DEFAULT_BACKUP_LOCATION=/u01/app/11.2.0/grid/cdata/apt-ora-cluster

DEFAULT_LOCAL_BACKUP_LOCATION=/u01/app/11.2.0/grid/cdata/apt-ora1

#====================

#Funciones auxiliares

#====================

function time_stamp ()

{

echo >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

date >> $LOG_FILENAME

echo $1 >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

echo >> $LOG_FILENAME

}

#========================

#Acciones de recopilacion

#========================

time_stamp 'Comienzo de la recopilacion'

if [ -d $TEMP_DIR ]; then

echo "El directorio $TEMP_DIR ya existe. No puedo continuar" >> $LOG_FILENAME

exit;

else

echo "Creando directorio $TEMP_DIR" >> $LOG_FILENAME

mkdir -p $TEMP_DIR 2>&1 >> $LOG_FILENAME

fi

time_stamp 'Comprobando y salvando la configuracion del cluster'

ocrcheck >> $TEMP_DIR/ocrcheck.txt 2>&1

ocrcheck -local >> $TEMP_DIR/ocrcheck_local.txt 2>&1

ocrconfig -backuploc $TEMP_DIR >> $LOG_FILENAME 2>&1

ocrconfig -manualbackup >> $LOG_FILENAME 2>&1

ocrconfig -backuploc $DEFAULT_BACKUP_LOCATION >> $LOG_FILENAME 2>&1

ocrconfig -local -backuploc $TEMP_DIR >> $LOG_FILENAME 2>&1

ocrconfig -local -manualbackup >> $LOG_FILENAME 2>&1

ocrconfig -local -backuploc $DEFAULT_LOCAL_BACKUP_LOCATION >> $LOG_FILENAME 2>&1

ocrconfig -showbackup > $TEMP_DIR/ocr_backups_info.txt

ocrconfig -local -showbackup > $TEMP_DIR/olr_backups_info.txt

ocrconfig -export $TEMP_DIR/ocr_export.ora >> $LOG_FILENAME 2>&1

ocrconfig -local -export $TEMP_DIR/olr_export_$HOSTNAME.ora >> $LOG_FILENAME 2>&1

ocrdump $TEMP_DIR/ocr_dump.txt >> $LOG_FILENAME 2>&1

ocrdump -local $TEMP_DIR/olr_dump_$HOSTNAME.txt >> $LOG_FILENAME 2>&1

crsctl stat res -t >> $TEMP_DIR/servicios_cluster.txt 2>&1

crsctl stat res -v >> $TEMP_DIR/servicios_cluster.txt 2>&1

advmutil volinfo >> $TEMP_DIR/acfs.txt 2>&1

echo ---- >> $TEMP_DIR/acfs.txt 2>&1

acfsutil registry -l >> $TEMP_DIR/acfs.txt 2>&1

echo ---- >> $TEMP_DIR/acfs.txt 2>&1

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 174

acfsutil info fs >> $TEMP_DIR/acfs.txt 2>&1

tar -cvzf $TEMP_DIR/etc_oracle.tgz /etc/oracle >> $LOG_FILENAME 2>&1

blkid >> $TEMP_DIR/disk_headers.txt 2>&1

echo ---- >> $TEMP_DIR/disk_headers.txt

ls -al /dev/disk/by-label/ >> $TEMP_DIR/disk_headers.txt

#Logs del CRS

tar -cvzf $TEMP_DIR/crs_logs.tgz $ORACLE_HOME/log >> $LOG_FILENAME 2>&1

#Copia del log

cp $LOG_FILENAME $TEMP_DIR/

time_stamp 'Generacion del archivo comprimido con la informacion recopilada'

tar -cvzf $DEST_DIR/cluster_info_$HOSTNAME.tgz $TEMP_DIR >> $LOG_FILENAME 2>&1

rm -rf $TEMP_DIR >> $LOG_FILENAME 2>&1

time_stamp 'Fin de la recopilacion'

node_info.sh

#!/bin/bash

#

# Script que recopila informacion del nodo actual para poder recuperlarlo en

# caso de desastre

#

# Invocar el script como ./node_info.sh <ruta_destino>

# Por ejemplo ./node_info.sh /mnt/rman

#

#

# NOTAS:

# * El usuario linux propietario del cluster (grid) debe tener permiso de escritura

# sobre la ruta que especifiquemos en TEMP_DIR

#

if [ "$1" == "" ]; then

echo 'ERROR: Debe indicar una ruta destino'

echo 'Uso: ./node_info.sh <ruta_destino>'

exit;

fi

#==============================

#Configuracion del script

#==============================

#Datos de la instancia de la base de datos

DB_ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1

DB_ORACLE_SID=APTORA1

DB_DIAG_DIR=/u01/app/oracle/diag

#Datos de la instancia ASM

ASM_ORACLE_HOME=/u01/app/11.2.0/grid

ASM_ORACLE_SID=+ASM1

ASM_DIAG_DIR=/u01/app/grid/diag

#Ruta al inventario central de productos Oracle en este nodo

INVENTORY_DIR=/u01/app/oraInventory

#==============================

#Configuracion interna

#==============================

#Directorio destino donde ubicar el fichero comprimido con la informacion recopilada

DEST_DIR=${1}

#Directorio temporal donde ir recopilando la informacion para su posterior compresion

#El usuario linux propietario del cluster (grid) tambien debe tener permiso de escritura

#sobre la ruta que contiene este directorio.

#Este directorio no debe existir (el script lo crea y lo borra automaticamente) o de lo

#contrario el script no se ejecutara

TEMP_DIR="$DEST_DIR/node_info_temp"

#Directorio donde esta ubicado este script. No se recomienda modificar el valor de esta

# variable.

SCRIPT_DIR="`dirname $(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")`"

#LOG_FILENAME indica la ruta completa al fichero donde se guardan los log de ejecucion de

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 175

#este fichero.

LOG_FILENAME="$SCRIPT_DIR/log/node_info_${HOSTNAME}.log"

export ORACLE_HOME=$DB_ORACLE_HOME

export ORACLE_SID=$DB_ORACLE_SID

export PATH=$ORACLE_HOME/bin:$PATH

#Comando para ejecutar ASMCMD

ASM_CMD="asmcmd --privilege sysdba "

#====================

#Funciones auxiliares

#====================

function time_stamp ()

{

echo >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

date >> $LOG_FILENAME

echo $1 >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

echo >> $LOG_FILENAME

}

function set_asm_env

{

BK_ORACLE_HOME=$ORACLE_HOME

BK_ORACLE_SID=$ORACLE_SID

export ORACLE_HOME=$ASM_ORACLE_HOME

export ORACLE_SID=$ASM_ORACLE_SID

}

function restore_asm_env

{

export ORACLE_HOME=$BK_ORACLE_HOME

export ORACLE_SID=$BK_ORACLE_SID

}

#========================

#Acciones de recopilacion

#========================

time_stamp 'Comienzo de la recopilacion'

if [ -d $TEMP_DIR ]; then

echo "El directorio $TEMP_DIR ya existe. No puedo continuar" >> $LOG_FILENAME

exit;

else

echo "Creando directorio $TEMP_DIR" >> $LOG_FILENAME

mkdir -p $TEMP_DIR 2>&1 >> $LOG_FILENAME

fi

chmod 775 $TEMP_DIR

time_stamp 'Recoplilando el directorio DBS de los ORACLE_HOME de la base de datos y del ASM'

tar -czvf $TEMP_DIR/dbs_${DB_ORACLE_SID}.tgz ${DB_ORACLE_HOME}/dbs >> $LOG_FILENAME 2>&1

tar -czvf $TEMP_DIR/dbs_${ASM_ORACLE_SID}.tgz ${ASM_ORACLE_HOME}/dbs >> $LOG_FILENAME 2>&1

time_stamp 'Recoplilando el directorio DIAG de los ORACLE_HOME de la base de datos y

del ASM'

tar --ignore-failed-read -czvf $TEMP_DIR/diag_${DB_ORACLE_SID}.tgz ${DB_DIAG_DIR} >

/dev/null 2>> $LOG_FILENAME

tar --ignore-failed-read -czvf $TEMP_DIR/diag_${ASM_ORACLE_SID}.tgz ${ASM_DIAG_DIR} >

/dev/null 2>> $LOG_FILENAME

time_stamp 'Recoplilando el directorio TNS_ADMIN de los ORACLE_HOME de la base de datos y

del ASM'

tar -czvf $TEMP_DIR/tns_admin_${DB_ORACLE_SID}.tgz ${DB_ORACLE_HOME}/network/admin >>

$LOG_FILENAME 2>&1

tar -czvf $TEMP_DIR/tns_admin_${ASM_ORACLE_SID}.tgz ${ASM_ORACLE_HOME}/network/admin >>

$LOG_FILENAME 2>&1

time_stamp 'Recopilando el SPFILE de la base de datos ASM'

#El SPFILE de la base de datos normal ya lo respalda el script de backup de RMAN

set_asm_env;

sqlplus "/ as sysdba" >> $LOG_FILENAME 2>&1 << __EOF

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 176

create pfile='/tmp/pfile_${ASM_ORACLE_SID}.ora' from spfile;

exit;

__EOF

cp /tmp/pfile_${ASM_ORACLE_SID}.ora $TEMP_DIR/ >> $LOG_FILENAME 2>&1

ASM_SPFILE_LOC=`$ASM_CMD spget`

echo "Ubicacion del SPFILE de la instancia ASM: $ASM_SPFILE_LOC" >> $LOG_FILENAME

$ASM_CMD spbackup $ASM_SPFILE_LOC $TEMP_DIR/spfile_${ASM_ORACLE_SID}.ora >> $LOG_FILENAME

2>&1

restore_asm_env;

time_stamp 'Realizando copia de seguridad de los metadatos de los grupos de discos ASM'

set_asm_env;

$ASM_CMD md_backup $TEMP_DIR/asm_meta_${ASM_ORACLE_SID}.ora >> $LOG_FILENAME 2>&1

DSK_INFO_FILE=$TEMP_DIR/asm_disk_info.txt

$ASM_CMD >> $DSK_INFO_FILE 2>&1 <<__EOF

lsdg

lsdsk -k

lsdsk --statistics

lsdsk -p

lsdsk -t

exit

__EOF

restore_asm_env;

time_stamp 'Backup de ficheros varios'

cp /etc/sysconfig/oracleasm $TEMP_DIR/ >> $LOG_FILENAME 2>&1

cp /etc/oraInst.loc $TEMP_DIR/ >> $LOG_FILENAME 2>&1

cp /etc/oratab $TEMP_DIR/ >> $LOG_FILENAME 2>&1

cp /u01/app/11.2.0/grid/root.sh $TEMP_DIR/root.sh_grid

cp /u01/app/oracle/product/11.2.0/dbhome_1/root.sh $TEMP_DIR/root.sh_db

cp /etc/sysconfig/network-scripts/ifcfg-* $TEMP_DIR/ >> $LOG_FILENAME 2>&1

cp /etc/sysconfig/network $TEMP_DIR/ >> $LOG_FILENAME 2>&1

cp /etc/resolv.conf $TEMP_DIR/ >> $LOG_FILENAME 2>&1

cp /etc/hosts $TEMP_DIR/ >> $LOG_FILENAME 2>&1

cp /etc/modprobe.d/bonding.conf $TEMP_DIR/ >> $LOG_FILENAME 2>&1

#Logs del RAC

tar -cvzf $TEMP_DIR/rac_logs.tgz $ORACLE_HOME/log >> $LOG_FILENAME 2>&1

#Backup del inventario de productos Oracle instalados en el nodo

tar -cvzf $TEMP_DIR/inventory.tgz $INVENTORY_DIR >> $LOG_FILENAME 2>&1

#Copia del log

cp $LOG_FILENAME $TEMP_DIR/

time_stamp 'Generacion del archivo comprimido con la informacion recopilada'

tar -cvzf $DEST_DIR/node_info_$HOSTNAME.tgz $TEMP_DIR >> $LOG_FILENAME 2>&1

rm -rf $TEMP_DIR >> $LOG_FILENAME 2>&1

time_stamp 'Fin de la recopilacion'

Scripts de backup del nodo 2:

backup_aptora-cluster.sh

#!/bin/bash

#

# Script de copia completa del cluster.

#

# Realiza copia RMAN y EXPDP de todas las bases de datos del cluster asociadas a este

#ORACLE_HOME, de la configuracion del cluster (OCR),

# de la configuracion local de cada nodo (OLR), de la configuracion de las instancias de

#bases de datos de todos los nodos (incluyendo las ASM)

# y de la configuracion de los discos ASM propiamente dicha.

#

# El script realiza además un backup de la configuración de GoldenGate

#

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 177

#========================

#Configuracion del script

#========================

#Directorio raiz EN DESTINO bajo el cual almacenar los fichreros de copia

BKP_REMOTE_DIR="/u01/soft/backup/remoto"

#FIRST_DAY es un offset que indica cuantos dias atras comenzar a realizar la copia.

#(0 indica la copia

#de hoy, 1 la de ayer, y asi sucesivamente)

FIRST_DAY=0

#NUM_DAYS numero de dias a copiar a partir de FIRST_DAY. (1 indica solo la de FIRST_DAY,

#2 indica la

#de FIRST_DAY y la del dia siguiente, y asi sucesivamente)

NUM_DAYS=1

#Nombre del cluster (solo a efectos de nombrar el directorio de backup)

CLUSTER_NAME=apt-ora-cluster

#Listado (separado por espacios) de todos los SID correspondientes a las INSTANCIAS de

#bases de datos del cluster de las que se quiere hacer backup

DATABASE_SIDS=( "APTORA2" )

#Configuracion para el backup de GoldenGate

export GG_HOME=/u01/gg

export GG_BCK_DIR=/u01/backup/BCK_APTORA/GGATE

#Nombre de la instancia de GoldenGate (slo a efectos de creacin de carpeta backup)

GG_INSTANCE_NAME=gg_1

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1

export PATH=$ORACLE_HOME/bin:$PATH

#==============================

#Configuracion interna

#==============================

#Directorio donde esta ubicado este script. No se recomienda modificar el valor de

#esta variable.

SCRIPT_DIR="`dirname $(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")`"

#LOG_FILENAME indica la ruta completa al fichero donde se guardan los log de ejecucion

#de este fichero.

LOG_FILENAME="$SCRIPT_DIR/log/backup_${CLUSTER_NAME}.log"

#Rutas a los scripts que llama este (por defecto los ubica en el mismo directorio en el

#que estamos)

BKP_CLUSTER_EXEC_PATH="$SCRIPT_DIR/backup_cluster.sh"

BKP_RMAN_EXEC_PATH="$SCRIPT_DIR/backup_rman.sh"

BKP_EXPDP_EXEC_PATH="$SCRIPT_DIR/backup_expdp.sh"

BKP_GGATE_EXEC_PATH="$SCRIPT_DIR/backup_ggate.sh"

ENVIO_BKP_EXEC_PATH="$SCRIPT_DIR/envio_backup.sh"

#====================

#Funciones auxiliares

#====================

function time_stamp ()

{

echo >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

date >> $LOG_FILENAME

echo $1 >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

echo >> $LOG_FILENAME

}

#========================

#Acciones de copia

#========================

time_stamp "Comienzo de la copia de seguridad del cluster: ${CLUSTER_NAME}"

time_stamp "Comienzo de la copia de seguridad de la configuracion del cluster

${CLUSTER_NAME}"

$BKP_CLUSTER_EXEC_PATH >> $LOG_FILENAME 2>&1

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 178

#$ENVIO_BKP_EXEC_PATH $CLUSTER_NAME $BKP_REMOTE_DIR $FIRST_DAY $NUM_DAYS >> $LOG_FILENAME

2>&1

time_stamp "Fin de la copia de seguridad de la configuracion del cluster ${CLUSTER_NAME}"

time_stamp "Comienzo de la copia de seguridad de GoldenGate en el HOME ${GG_HOME}"

su - oracle -c "$BKP_GGATE_EXEC_PATH ${GG_HOME} ${GG_BCK_DIR}" >> $LOG_FILENAME 2>&1

#$ENVIO_BKP_EXEC_PATH $GG_INSTANCE_NAME $BKP_REMOTE_DIR $FIRST_DAY $NUM_DAYS >>

$LOG_FILENAME 2>&1

time_stamp "Fin de la copia de seguridad de GoldenGate en el HOME ${GG_HOME}"

#Vamos instancia por instancia realizando las copias de seguridad

for i in ${!DATABASE_SIDS[*]}

do

time_stamp "Comienzo del backup de la instancia: ${DATABASE_SIDS[$i]}.";

su - oracle -c "$BKP_RMAN_EXEC_PATH $ORACLE_HOME ${DATABASE_SIDS[$i]} COMP" >>

$LOG_FILENAME 2>&1

su - oracle -c "$BKP_EXPDP_EXEC_PATH $ORACLE_HOME ${DATABASE_SIDS[$i]} COMP" >>

$LOG_FILENAME 2>&1

# $ENVIO_BKP_EXEC_PATH ${DATABASE_SIDS[$i]} $BKP_REMOTE_DIR $FIRST_DAY $NUM_DAYS >>

$LOG_FILENAME 2>&1

time_stamp "Fin del backup de la instancia ${DATABASE_SIDS[$i]}.";

done

time_stamp "Fin de la copia de seguridad del cluster: ${CLUSTER_NAME}"

backup_cluster.sh

#!/bin/bash

#

# Script de copia de seguridad del cluster.

# Realiza la copia de los archivos de configuracion del cluster, entre otros, OCR, OLR,

#instancias ASM y configuracion de discos

#

# NOTAS:

# * Es necesario que el fichero ".tgz" resultante de la ejecucion de

#"cluster_info.sh" se coloque en una ruta local

# a cada nodo que coincida con los valores de la variable tipo array

#REMOTE_INFO_PATH de este script.

#

#========================

#Configuracion del script

#========================

#BACKUP_DIR_BASE indica la ruta del directorio raiz donde se guardaran los ficheros con la

#informacion recopilada

BACKUP_DIR_BASE="/u01/backup/BCK_APTORA/"

#Numero de dias a conservar el backup EN DISCO (sin contar la copia de hoy)

#Por ejemplo, un valor de 1 guardara solo la copia del dia anterior (y al finalizar este

#script la de hoy)

BACKUP_THRESHOLD=0

#Nombre del cluster (solo a efectos de nombrar el directorio de backup)

CLUSTER_NAME=apt-ora-cluster

#Directorio donde esta ubicado este script. No se recomienda modificar el valor de

#esta variable.

SCRIPT_DIR="`dirname $(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")`"

#Informacion del RAC

#-------------------

#Nombre de los nodos. El nombre que se especifique debe permitir la resolucion a IP

NODE_NAMES=( "apt-ora1" "apt-ora2" )

#Rutas al ejecutable que recoge la informacion del nodo en cada nodo (normalmente sera la

# misma en todos los nodos del cluster)

REMOTE_EXEC_CMD=( "$SCRIPT_DIR/node_info.sh" "$SCRIPT_DIR/node_info.sh" )

#Rutas al ejecutable que recoge la informacion del cluster en cada nodo (normalmente sera la

#misma en todos los nodos del cluster)

REMOTE_EXEC_CMD_2=( "$SCRIPT_DIR/cluster_info.sh" "$SCRIPT_DIR/cluster_info.sh" )

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 179

#Rutas remotas donde recoger los ficheros resultantes (normalmente sera la misma en todos

#los nodos del cluster)

REMOTE_INFO_PATH=( "/u01/backup/BCK_APTORA/tmp" "/u01/backup/BCK_APTORA/tmp" )

#==================

#Variables internas

#==================

#Directorio donde esta ubicado este script. No se recomienda modificar el valor de

#esta variable.

SCRIPT_DIR="`dirname $(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")`"

#LOG_FILENAME indica la ruta completa al fichero donde se guardan los log de las copias.

#Los logs de las nuevas copias se van anexando al final de este fichero.

LOG_FILENAME="$SCRIPT_DIR/log/backup_cluster.log"

BACKUP_DIR="$BACKUP_DIR_BASE/$CLUSTER_NAME/`date +%u`"

#Metodo para identificar los ficheros generados por los nodos

BK_CLUSTER_FILENAME=cluster_info_*.tgz

BK_NODE_FILENAME=node_info_*.tgz

#====================

#Funciones auxiliares

#====================

function time_stamp ()

{

echo >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

date >> $LOG_FILENAME

echo $1 >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

echo >> $LOG_FILENAME

}

function del_bck_files ()

{

OLD_DIR_AUX=$1

echo "Borrando $OLD_DIR_AUX/$BK_CLUSTER_FILENAME" >> $LOG_FILENAME

rm -f $OLD_DIR_AUX/$BK_CLUSTER_FILENAME >> $LOG_FILENAME 2>&1

echo "Borrando $OLD_DIR_AUX/$BK_NODE_FILENAME" >> $LOG_FILENAME

rm -f $OLD_DIR_AUX/$BK_NODE_FILENAME >> $LOG_FILENAME 2>&1

}

#=================

#Acciones de copia

#=================

time_stamp 'Comienzo de la recopilacion de configuracion del cluster'

#Borrado de copias anteriores

time_stamp 'Borrado de copias anteriores'

if [ $BACKUP_THRESHOLD -lt 0 ] || [ $BACKUP_THRESHOLD -gt 6 ]; then

echo 'ERROR: Debe indicar un umbral de entre 0 y 6 dias' >> $LOG_FILENAME

exit;

fi

for i in `seq $((BACKUP_THRESHOLD + 1)) 1 7`; do

OLD_DIR="$BACKUP_DIR_BASE/$CLUSTER_NAME/`date --date="$i days ago" +%u`"

del_bck_files $OLD_DIR

done

if [ -d $BACKUP_DIR ]; then

del_bck_files $BACKUP_DIR

else

echo "Creando directorio $BACKUP_DIR" >> $LOG_FILENAME

mkdir -p $BACKUP_DIR >> $LOG_FILENAME 2>&1

fi

#Vamos nodo por nodo (incluido este) recopilando la informacion

for i in ${!NODE_NAMES[*]}

do

time_stamp "Comienzo de recuperacion de datos del nodo ${NODE_NAMES[$i]}.";

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 180

#Ejecutamos el comando remoto de recopilacion de informacion del nodo

COMANDO="su - grid -c '\"${REMOTE_EXEC_CMD[$i]}\" \"${REMOTE_INFO_PATH[$i]}\"'"

echo Ejecutando en ${NODE_NAMES[$i]} el comando $COMANDO >> $LOG_FILENAME

ssh ${NODE_NAMES[$i]} -C "$COMANDO" >> $LOG_FILENAME 2>&1

#Nos traemos el resultado

echo Copiando de ${NODE_NAMES[$i]} los ficheros

"${REMOTE_INFO_PATH[$i]}/${BK_NODE_FILENAME}" a $BACKUP_DIR >> $LOG_FILENAME

scp ${NODE_NAMES[$i]}:"${REMOTE_INFO_PATH[$i]}/${BK_NODE_FILENAME}" $BACKUP_DIR >>

$LOG_FILENAME 2>&1

#Ejecutamos el comando remoto de recopilacion de informacion del cluster

COMANDO="\"${REMOTE_EXEC_CMD_2[$i]}\" \"${REMOTE_INFO_PATH[$i]}\""

echo Ejecutando en ${NODE_NAMES[$i]} el comando $COMANDO >> $LOG_FILENAME

ssh ${NODE_NAMES[$i]} -C "$COMANDO" >> $LOG_FILENAME 2>&1

#Nos traemos el resultado

echo Copiando de ${NODE_NAMES[$i]} los ficheros

"${REMOTE_INFO_PATH[$i]}/${BK_CLUSTER_FILENAME}" a $BACKUP_DIR >> $LOG_FILENAME

scp ${NODE_NAMES[$i]}:"${REMOTE_INFO_PATH[$i]}/${BK_CLUSTER_FILENAME}" $BACKUP_DIR >>

$LOG_FILENAME 2>&1

time_stamp "Fin de recuperacion de datos del nodo ${NODE_NAMES[$i]}."

done

cp $LOG_FILENAME $BACKUP_DIR

backup_expdp.sh

time_stamp 'Fin de la recopilacion de configuracion del cluster'

#!/bin/bash

#

# Script de copia de seguridad usando EXPDP.

#

# Invocar el script como ./backup_expdp.sh <ORACLE_HOME> <SID> [COMP]

# Por ejemplo ./backup_expdp.sh '/u01/app/oracle/product/11.2.0/dbhome_1' APTORA1 COMP

#

if [ "$1" == "" ] || [ "$2" == "" ]; then

echo 'ERROR: Debe indicar un ORACLE_HOME y un ORACLE_SID validos'

echo 'Uso: ./backup_rman <ORACLE_HOME> <SID>'

exit;

fi

# Si en la linea de comandos se ha especificado como tercer parametro "COMP",

# habilitamos la compresion RMAN anadiendo a cada sentencia de copia la clausula

# correspondiente.

COMP_CLAUSE=""

if [ "$3" == "COMP" ]; then

COMP_CLAUSE="COMPRESSION=METADATA_ONLY"

fi

#================================

#Configuracion del entorno Oracle

#================================

export ORACLE_SID="${2}"

export ORACLE_HOME="${1}"

export PATH="$ORACLE_HOME/bin:$PATH"

#===============================

#Configuracion de la copia EXPDP

#===============================

#Numero de dias a conservar el backup EN DISCO (sin contar la copia de hoy)

#Por ejemplo, un valor de 1 guardara solo la copia del dia anterior (y al finalizar

#este script la de hoy)

BACKUP_THRESHOLD=0

#Directorio donde esta ubicado este script. No se recomienda modificar el valor de

#esta variable.

SCRIPT_DIR="`dirname $(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")`"

#BACKUP_DIR_BASE indica la ruta del directorio raiz donde se guardaran los ficheros de

#las copias RMAN

BACKUP_DIR_BASE="/u01/backup/BCK_APTORA"

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 181

#LOG_FILENAME indica la rutaq completa al fichero donde se guardan los log de las copias.

#Los logs de las nuevas copias se van anexando al final de este fichero.

LOG_FILENAME="$SCRIPT_DIR/log/backup_expdp_${ORACLE_SID}.log"

#Nombre del objeto directorio de la base de datos a usar en las copias

BD_EXPDP_DIR_NAME='EMPR_EXPDP_DIR'

#==================

#Variables internas

#==================

BACKUP_DIR="$BACKUP_DIR_BASE/$ORACLE_SID/`date +%u`"

#BACKUP_DIR="$BACKUP_DIR_BASE/$ORACLE_SID/copia_diaria"

DUMP_FILE_BASE_NAME=expdp_${ORACLE_SID}_`date +'%Y%m%d'`

DUMP_FILE_NAME=${DUMP_FILE_BASE_NAME}.dmp

DUMP_LOG_NAME=${DUMP_FILE_BASE_NAME}.log

#====================

#Funciones auxiliares

#====================

function time_stamp ()

{

echo >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

date >> $LOG_FILENAME

echo $1 >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

echo >> $LOG_FILENAME

}

function del_bck_files ()

{

OLD_DIR_AUX=$1

echo "Borrando $OLD_DIR_AUX/*.dmp" >> $LOG_FILENAME

rm -f $OLD_DIR_AUX/*.dmp >> $LOG_FILENAME 2>&1

echo "Borrando $OLD_DIR_AUX/expdp_*.log" >> $LOG_FILENAME

rm -f $OLD_DIR_AUX/expdp_*.log >> $LOG_FILENAME 2>&1

}

#=================

#Acciones de copia

#=================

time_stamp 'Comienzo de la copia EXPDP'

#Creamos (o modificamos) el objeto directorio para adaptarlo a la ruta correcta para el

#dia de la semana

sqlplus "/ as sysdba" >> $LOG_FILENAME 2>&1 <<__EOF__

begin

execute immediate 'CREATE OR REPLACE DIRECTORY $BD_EXPDP_DIR_NAME AS

'||'''$BACKUP_DIR''';

end;

/

__EOF__

time_stamp 'Borrado de copias anteriores'

if [ $BACKUP_THRESHOLD -lt 0 ] || [ $BACKUP_THRESHOLD -gt 6 ]; then

echo 'ERROR: Debe indicar un umbral de entre 0 y 6 dias' >> $LOG_FILENAME

exit;

fi

for i in `seq $((BACKUP_THRESHOLD + 1)) 1 7`; do

OLD_DIR="$BACKUP_DIR_BASE/$ORACLE_SID/`date --date="$i days ago" +%u`"

del_bck_files $OLD_DIR

done

if [ -d $BACKUP_DIR ]; then

del_bck_files $BACKUP_DIR

else

echo "Creando directorio $BACKUP_DIR" >> $LOG_FILENAME

mkdir -p $BACKUP_DIR 2>&1 >> $LOG_FILENAME

fi

time_stamp 'Backup completo de la base de datos'

TIMESTMP=`date "+%Y-%m-%d %H:%M:%S"`

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 182

FLBKTIME_CLAUSE="flashback_time=\"to_timestamp('$TIMESTMP','yyyy-mm-dd hh24:mi:ss')\""

expdp " '/ as sysdba' " full=Y directory=$BD_EXPDP_DIR_NAME dumpfile=$DUMP_FILE_NAME

logfile=$DUMP_LOG_NAME $FLBKTIME_CLAUSE $COMP_CLAUSE >> $LOG_FILENAME 2>&1

time_stamp 'Finalizacion de la copia de seguridad'

backup_ggate.sh

#!/bin/bash

#

# Script que obtiene informacion de GoldenGate y realiza una copia de seguridad de su #

# Invocar el script como ./backup_ggate.sh <gg_home> <ruta_destino>

# Por ejemplo ./backup_ggate.sh /u01/gg /u01/backup/BCK_APTORA/GGATE

#

if [ "$1" == "" ]; then

echo 'ERROR: Debe indicar la ruta al directorio raíz de GG'

echo 'Uso: backup_ggate.sh <gg_home> <ruta_destino>'

exit;

fi

if [ "$2" == "" ]; then

echo 'ERROR: Debe indicar una ruta destino'

echo 'Uso: backup_ggate.sh <gg_home> <ruta_destino>'

exit;

fi

#==============================

#Configuracion del script

#==============================

#Numero de dias a conservar el backup EN DISCO (sin contar la copia de hoy)

#Por ejemplo, un valor de 1 guardara solo la copia del dia anterior (y al finalizar este

#script la de hoy)

BACKUP_THRESHOLD=0

#Datos del home de GG

GG_HOME=${1}

DEST_DIR=${2}

#Nombre de la instancia de GoldenGate (sólo a efectos de creación de carpeta backup)

GG_INSTANCE_NAME=gg_1

#==============================

#Configuracion interna

#==============================

#Directorio donde esta ubicado este script. No se recomienda modificar el valor de esta

#variable.

SCRIPT_DIR="`dirname $(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")`"

#LOG_FILENAME indica la ruta completa al fichero donde se guardan los log de ejecucion

#de este fichero.

LOG_FILENAME="$SCRIPT_DIR/log/backup_ggate_${HOSTNAME}.log"

TEMP_DIR=$DEST_DIR/backup_ggate_temp

BACKUP_DIR="$DEST_DIR/$GG_INSTANCE_NAME/`date +%u`"

#Funciones auxiliares

#====================

function time_stamp ()

{

echo >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

date >> $LOG_FILENAME

echo $1 >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

echo >> $LOG_FILENAME

}

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 183

function del_bck_files ()

{

OLD_DIR_AUX=$1

echo "Borrando $OLD_DIR_AUX/*.tgz" >> $LOG_FILENAME

rm -f $OLD_DIR_AUX/*.tgz >> $LOG_FILENAME 2>&1

}

#========================

#Acciones de recopilacion

#========================

time_stamp 'Comienzo de la recopilacion'

if [ -d $TEMP_DIR ]; then

echo "El directorio $TEMP_DIR ya existe. No puedo continuar" >> $LOG_FILENAME

exit;

else

echo "Creando directorio $TEMP_DIR" >> $LOG_FILENAME

mkdir -p $TEMP_DIR 2>&1 >> $LOG_FILENAME

fi

time_stamp 'Borrado de copias anteriores'

if [ $BACKUP_THRESHOLD -lt 0 ] || [ $BACKUP_THRESHOLD -gt 6 ]; then

echo 'ERROR: Debe indicar un umbral de entre 0 y 6 dias' >> $LOG_FILENAME

exit;

fi

for i in `seq $((BACKUP_THRESHOLD + 1)) 1 7`; do

OLD_DIR="$DEST_DIR/$GG_INSTANCE_NAME/`date --date="$i days ago" +%u`"

del_bck_files $OLD_DIR

done

if [ -d $BACKUP_DIR ]; then

del_bck_files $BACKUP_DIR

else

echo "Creando directorio $BACKUP_DIR" >> $LOG_FILENAME

mkdir -p $BACKUP_DIR 2>&1 >> $LOG_FILENAME

fi

time_stamp 'Comprobando y salvando la configuracion de GG'

cp -a $GG_HOME/ggserr.log $TEMP_DIR/ 2>&1

cp -a $GG_HOME/GLOBALS $TEMP_DIR/ 2>&1

tar -cvzf $TEMP_DIR/dirrpt.tgz $GG_HOME/dirrpt >> $LOG_FILENAME 2>&1

tar -cvzf $TEMP_DIR/dirprm.tgz $GG_HOME/dirprm >> $LOG_FILENAME 2>&1

tar -cvzf $TEMP_DIR/dirchk.tgz $GG_HOME/dirchk >> $LOG_FILENAME 2>&1

tar -cvzf $TEMP_DIR/dirsql.tgz $GG_HOME/dirsql >> $LOG_FILENAME 2>&1

#Copia del log

cp $LOG_FILENAME $TEMP_DIR/

time_stamp 'Generacion del archivo comprimido con la informacion recopilada'

tar -cvzf $BACKUP_DIR/backup_ggate_${GG_INSTANCE_NAME}_${HOSTNAME}.tgz $TEMP_DIR >>

$LOG_FILENAME 2>&1

rm -rf $TEMP_DIR >> $LOG_FILENAME 2>&1

time_stamp 'Fin de la recopilacion'

backup_rman.sh

#!/bin/bash

#

# Script de copia de seguridad en caliente usando RMAN.

# Opcionalmente realiza la actualizacion del catalogo

#

# Invocar el script como ./backup_rman.sh <ORACLE_HOME> <SID> [COMP]

# Por ejemplo ./backup_rman.sh '/u01/app/oracle/product/11.2.0/dbhome_1' APTORA COMP

#

if [ "$1" == "" ] || [ "$2" == "" ]; then

echo 'ERROR: Debe indicar un ORACLE_HOME y un ORACLE_SID validos'

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 184

echo 'Uso: ./backup_rman <ORACLE_HOME> <SID>'

exit;

fi

# Si en la linea de comandos se ha especificado como tercer parametro "COMP",

# habilitamos la compresion RMAN anadiendo a cada sentencia de copia la clausula

#correspondiente.

COMP_CLAUSE=""

if [ "$3" == "COMP" ]; then

COMP_CLAUSE="as compressed backupset"

fi

#================================

#Configuracion del entorno Oracle

#================================

export ORACLE_SID="${2}"

export ORACLE_HOME="${1}"

export PATH="$ORACLE_HOME/bin:$PATH"

#==============================

#Configuracion de la copia RMAN

#==============================

#Directorio donde esta ubicado este script. No se recomienda modificar el valor de esta

#variable.

SCRIPT_DIR="`dirname $(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")`"

#BACKUP_DIR_BASE indica la ruta del directorio raiz donde se guardaran los ficheros de las

#copias RMAN

BACKUP_DIR_BASE="/u01/backup/BCK_APTORA"

#Numero de dias a conservar el backup EN DISCO (sin contar la copia de hoy)

#Por ejemplo, un valor de 1 guardara solo la copia del dia anterior (y al finalizar este

#script la de hoy)

BACKUP_THRESHOLD=0

#LOG_FILENAME indica la ruta completa al fichero donde se guardan los log de las copias.

#Los logs de las nuevas copias se van anexando al final de este fichero.

LOG_FILENAME="$SCRIPT_DIR/log/backup_rman_${ORACLE_SID}.log"

#Los archivelogs generados despues de la fecha indicada por OLD_ARCHIVE_THRESHOLD se

# mantendran en disco.

#Esto tiene otra ventaja adicional: tendremos varias copias en cinta de los archivelogs mas

#recientes.

#Si, por ejemplo, se realiza una copia diaria y especificamos "sysdate-3" (este es el valor

#recomendado),

#tendremos 3 copias en cinta de los archivelogs y tendremos disponibles en disco los

#archivelogs de los tres ultimos

#dias a los que acudir en caso de tener que realizar un recover.

OLD_ARCHIVE_THRESHOLD=sysdate-3

OLD_ARCHIVE_FILENAME_TEMPLATE=OLD_ARCH_%d_%T_%U.bak

ARCHIVE_FILENAME_TEMPLATE=ARCH_%d_%T_%U.bak

DATABASE_FILENAME_TEMPLATE=DB_FULL_%d_%T_%U.bak

CONTROLFILE_FILENAME_TEMPLATE=CTL_%d_%T_%U.bak

CTLFILE_TRC_FILENAME_TEMPLATE=CTL_TRACE.txt

SPFILE_FILENAME_TEMPLATE=SPFILE_%d_%T_%U.bak

#Tamano maximo que tendra cada fichero de la copia (en KB)

FILESIZE_LIMIT_KB=4000000

#Especificar ENABLE_CROSSCHECK=y para realizar una actualizacion del catalogo de RMAN tras

#la copia.

#Se hara la comprobacion desde la fecha limite del ultimo 'crosscheck' HASTA el dia indicado

#por la variable CROSSCHECK_THRESHOLD. Se borraran del catalogo RMAN todas las entradas

#cuyos ficheros asociados no se encuentren en disco.

#CROSSCHECK_THRESHOLD se ajusta normalmente a 'SYSDATE-dias desde la copia mas antigua en

#cinta'

ENABLE_CROSSCHECK=y

CROSSCHECK_THRESHOLD=sysdate-120

#==================

#Variables internas

#==================

BACKUP_DIR="$BACKUP_DIR_BASE/$ORACLE_SID/`date +%u`"

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 185

#BACKUP_DIR="$BACKUP_DIR_BASE/$ORACLE_SID/copia_diaria"

#====================

#Funciones auxiliares

#====================

function time_stamp ()

{

echo >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

date >> $LOG_FILENAME

echo $1 >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

echo >> $LOG_FILENAME

}

function del_bck_files ()

{

OLD_DIR_AUX=$1

echo "Borrando $OLD_DIR_AUX/*.bak" >> $LOG_FILENAME

rm -f $OLD_DIR_AUX/*.bak >> $LOG_FILENAME 2>&1

echo "Borrando $OLD_DIR_AUX/*.tgz" >> $LOG_FILENAME

rm -f $OLD_DIR_AUX/*.tgz >> $LOG_FILENAME 2>&1

echo "Borrando $OLD_DIR_AUX/*.txt" >> $LOG_FILENAME

rm -f $OLD_DIR_AUX/*.txt >> $LOG_FILENAME 2>&1

echo "Borrando $OLD_DIR_AUX/oratab" >> $LOG_FILENAME

rm -f $OLD_DIR_AUX/oratab >> $LOG_FILENAME 2>&1

}

#=================

#Acciones de copia

#=================

time_stamp 'Comienzo de la copia RMAN'

#Borrado de copias anteriores

time_stamp 'Borrado de copias anteriores'

if [ $BACKUP_THRESHOLD -lt 0 ] || [ $BACKUP_THRESHOLD -gt 6 ]; then

echo 'ERROR: Debe indicar un umbral de entre 0 y 6 dias' >> $LOG_FILENAME

exit;

fi

for i in `seq $((BACKUP_THRESHOLD + 1)) 1 7`; do

OLD_DIR="$BACKUP_DIR_BASE/$ORACLE_SID/`date --date="$i days ago" +%u`"

del_bck_files $OLD_DIR

done

if [ -d $BACKUP_DIR ]; then

del_bck_files $BACKUP_DIR

else

echo "Creando directorio $BACKUP_DIR" >> $LOG_FILENAME

mkdir -p $BACKUP_DIR 2>&1 >> $LOG_FILENAME

fi

#Backup de la base de datos

time_stamp 'Backup de la base de datos'

rman target / nocatalog >> $LOG_FILENAME 2>&1 <<__EOF__

run

{

allocate channel c1 device type disk format '$BACKUP_DIR/$DATABASE_FILENAME_TEMPLATE';

set limit channel c1 kbytes=$FILESIZE_LIMIT_KB;

backup $COMP_CLAUSE (database);

sql "alter system archive log current";

release channel c1;

}

exit;

__EOF__

#Backup y posterior borrado de los archivelogs antiguos

time_stamp 'Backup y posterior borrado de los archivelogs antiguos'

rman target / nocatalog >> $LOG_FILENAME 2>&1 <<__EOF__

run

{

allocate channel c1 device type disk format '$BACKUP_DIR/$OLD_ARCHIVE_FILENAME_TEMPLATE';

set limit channel c1 kbytes=$FILESIZE_LIMIT_KB;

backup $COMP_CLAUSE (archivelog until time '$OLD_ARCHIVE_THRESHOLD');

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 186

delete noprompt archivelog until time '$OLD_ARCHIVE_THRESHOLD' backed up 1 times to

device type disk;

release channel c1;

}

exit;

__EOF__

#Backup de los archivelogs recientes

time_stamp 'Backup de los archivelogs recientes'

rman target / nocatalog >> $LOG_FILENAME 2>&1 <<__EOF__

run

{

allocate channel c1 device type disk format '$BACKUP_DIR/$ARCHIVE_FILENAME_TEMPLATE';

set limit channel c1 kbytes=$FILESIZE_LIMIT_KB;

backup $COMP_CLAUSE (archivelog all);

release channel c1;

}

exit;

__EOF__

#Backup del spfile

time_stamp 'Backup del spfile'

rman target / nocatalog >> $LOG_FILENAME 2>&1 <<__EOF__

run

{

allocate channel c1 device type disk format '$BACKUP_DIR/$SPFILE_FILENAME_TEMPLATE';

backup (spfile);

release channel c1;

}

exit;

__EOF__

#Backup del pfile

#time_stamp '#Backup del pfile'

#cp -af $ORACLE_HOME/dbs/init${ORACLE_SID}.ora $BACKUP_DIR/ 2>&1 >> $LOG_FILENAME

#Actualizacion del catalogo de RMAN

if [ $ENABLE_CROSSCHECK == "y" ] || [ $ENABLE_CROSSCHECK == "Y" ]; then

time_stamp 'Actualización del catálogo de RMAN'

rman target / nocatalog >> $LOG_FILENAME 2>&1 << __EOF__

allocate channel for maintenance type disk;

crosscheck backupset completed before '$CROSSCHECK_THRESHOLD';

delete noprompt expired backup;

release channel;

exit;

__EOF__

fi

#Backup del controlfile

time_stamp 'Backup del controlfile'

rman target / nocatalog >> $LOG_FILENAME 2>&1 <<__EOF__

run

{

allocate channel c1 device type disk format '$BACKUP_DIR/$CONTROLFILE_FILENAME_TEMPLATE';

backup (current controlfile);

SQL "alter database backup controlfile to trace as

''$BACKUP_DIR/$CTLFILE_TRC_FILENAME_TEMPLATE'' reuse";

release channel c1;

}

exit;

__EOF__

#Copia de archivos de configuracion y logs

#En la version del script para cluster comentamos las lineas que hacen backup del

#tns_admin, dbs u oratab, pues esta info ya la recopila "node_info.sh"

time_stamp 'Copia de archivos de configuracion y logs'

#tar -cvzf $BACKUP_DIR/tns_admin.tgz $ORACLE_HOME/network/admin >> $LOG_FILENAME 2>&1

#tar -cvzf $BACKUP_DIR/dbs.tgz $ORACLE_HOME/dbs >> $LOG_FILENAME 2>&1

#cp -a /etc/oratab $BACKUP_DIR/ >> $LOG_FILENAME 2>&1

#localizar_bdump;

#tar -cvzf $BACKUP_DIR/alert.tgz $BACKGROUND_DUMP_DEST/alert_$ORACLE_SID.log >>

$LOG_FILENAME 2>&1

tar -cvzf $BACKUP_DIR/log_bck_rman_$ORACLE_SID.tgz $LOG_FILENAME >> $LOG_FILENAME 2>&1

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 187

time_stamp 'Fin de la copia RMAN'

cluster_info.sh

#!/bin/bash

#

# Script que obtiene informacion del cluster y realiza una copia de seguridad del OCR y del

OLR del cluster

#

# Invocar el script como ./cluster_info.sh <ruta_destino>

# Por ejemplo ./cluster_info.sh /mnt/rman

#

if [ "$1" == "" ]; then

echo 'ERROR: Debe indicar una ruta destino'

echo 'Uso: ./cluster_info.sh <ruta_destino>'

exit;

fi

#==============================

#Configuracion del script

#==============================

#Datos de la instancia ASM

ASM_ORACLE_HOME=/u01/app/11.2.0/grid

#==============================

#Configuracion interna

#==============================

#Directorio donde esta ubicado este script. No se recomienda modificar el valor de esta

# variable.

SCRIPT_DIR="`dirname $(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")`"

#LOG_FILENAME indica la ruta completa al fichero donde se guardan los log de ejecucion de

#este fichero.

LOG_FILENAME="$SCRIPT_DIR/log/cluster_info_${HOSTNAME}.log"

export ORACLE_HOME=$ASM_ORACLE_HOME

export PATH="$ORACLE_HOME/bin:$PATH"

DEST_DIR=${1}

TEMP_DIR=$DEST_DIR/cluster_info_temp

#Ubicacion por defecto donde Oracle realizara los backups automaticos del OCR y OLR

#Normalmente no es necesario tocar estas variables (y de hecho tienen el valor por defecto

#de la instalacion del cluster).

#El script necesita disponer de esos valores para poder restaurarlos tras cambiarlos

#temporalmente para el backup.

DEFAULT_BACKUP_LOCATION=/u01/app/11.2.0/grid/cdata/apt-ora-cluster

DEFAULT_LOCAL_BACKUP_LOCATION=/u01/app/11.2.0/grid/cdata/apt-ora2

#====================

#Funciones auxiliares

#====================

function time_stamp ()

{

echo >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

date >> $LOG_FILENAME

echo $1 >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

echo >> $LOG_FILENAME

}

#========================

#Acciones de recopilacion

#========================

time_stamp 'Comienzo de la recopilacion'

if [ -d $TEMP_DIR ]; then

echo "El directorio $TEMP_DIR ya existe. No puedo continuar" >> $LOG_FILENAME

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 188

exit;

else

echo "Creando directorio $TEMP_DIR" >> $LOG_FILENAME

mkdir -p $TEMP_DIR 2>&1 >> $LOG_FILENAME

fi

time_stamp 'Comprobando y salvando la configuracion del cluster'

ocrcheck >> $TEMP_DIR/ocrcheck.txt 2>&1

ocrcheck -local >> $TEMP_DIR/ocrcheck_local.txt 2>&1

ocrconfig -backuploc $TEMP_DIR >> $LOG_FILENAME 2>&1

ocrconfig -manualbackup >> $LOG_FILENAME 2>&1

ocrconfig -backuploc $DEFAULT_BACKUP_LOCATION >> $LOG_FILENAME 2>&1

ocrconfig -local -backuploc $TEMP_DIR >> $LOG_FILENAME 2>&1

ocrconfig -local -manualbackup >> $LOG_FILENAME 2>&1

ocrconfig -local -backuploc $DEFAULT_LOCAL_BACKUP_LOCATION >> $LOG_FILENAME 2>&1

ocrconfig -showbackup > $TEMP_DIR/ocr_backups_info.txt

ocrconfig -local -showbackup > $TEMP_DIR/olr_backups_info.txt

ocrconfig -export $TEMP_DIR/ocr_export.ora >> $LOG_FILENAME 2>&1

ocrconfig -local -export $TEMP_DIR/olr_export_$HOSTNAME.ora >> $LOG_FILENAME 2>&1

ocrdump $TEMP_DIR/ocr_dump.txt >> $LOG_FILENAME 2>&1

ocrdump -local $TEMP_DIR/olr_dump_$HOSTNAME.txt >> $LOG_FILENAME 2>&1

crsctl stat res -t >> $TEMP_DIR/servicios_cluster.txt 2>&1

crsctl stat res -v >> $TEMP_DIR/servicios_cluster.txt 2>&1

advmutil volinfo >> $TEMP_DIR/acfs.txt 2>&1

echo ---- >> $TEMP_DIR/acfs.txt 2>&1

acfsutil registry -l >> $TEMP_DIR/acfs.txt 2>&1

echo ---- >> $TEMP_DIR/acfs.txt 2>&1

acfsutil info fs >> $TEMP_DIR/acfs.txt 2>&1

tar -cvzf $TEMP_DIR/etc_oracle.tgz /etc/oracle >> $LOG_FILENAME 2>&1

blkid >> $TEMP_DIR/disk_headers.txt 2>&1

echo ---- >> $TEMP_DIR/disk_headers.txt

ls -al /dev/disk/by-label/ >> $TEMP_DIR/disk_headers.txt

#Logs del CRS

tar -cvzf $TEMP_DIR/crs_logs.tgz $ORACLE_HOME/log >> $LOG_FILENAME 2>&1

#Copia del log

cp $LOG_FILENAME $TEMP_DIR/

time_stamp 'Generacion del archivo comprimido con la informacion recopilada'

tar -cvzf $DEST_DIR/cluster_info_$HOSTNAME.tgz $TEMP_DIR >> $LOG_FILENAME 2>&1

rm -rf $TEMP_DIR >> $LOG_FILENAME 2>&1

time_stamp 'Fin de la recopilacion'

node_info.sh

#!/bin/bash

#

# Script que recopila informacion del nodo actual para poder recuperlarlo en caso de

# desastre

#

# Invocar el script como ./node_info.sh <ruta_destino>

# Por ejemplo ./node_info.sh /mnt/rman

#

#

# NOTAS:

# * El usuario linux propietario del cluster (grid) debe tener permiso de escritura

#sobre la ruta que especifiquemos en TEMP_DIR

#

if [ "$1" == "" ]; then

echo 'ERROR: Debe indicar una ruta destino'

echo 'Uso: ./node_info.sh <ruta_destino>'

exit;

fi

#==============================

#Configuracion del script

#==============================

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 189

#Datos de la instancia de la base de datos

DB_ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1

DB_ORACLE_SID=APTORA2

DB_DIAG_DIR=/u01/app/oracle/diag

#Datos de la instancia ASM

ASM_ORACLE_HOME=/u01/app/11.2.0/grid

ASM_ORACLE_SID=+ASM2

ASM_DIAG_DIR=/u01/app/grid/diag

#Ruta al inventario central de productos Oracle en este nodo

INVENTORY_DIR=/u01/app/oraInventory

#==============================

#Configuracion interna

#==============================

#Directorio destino donde ubicar el fichero comprimido con la informacion recopilada

DEST_DIR=${1}

#Directorio temporal donde ir recopilando la informacion para su posterior compresion

#El usuario linux propietario del cluster (grid) tambien debe tener permiso de escritura

#sobre la ruta que contiene este directorio.

#Este directorio no debe existir (el script lo crea y lo borra automaticamente) o de lo

#contrario el script no se ejecutara

TEMP_DIR="$DEST_DIR/node_info_temp"

#Directorio donde esta ubicado este script. No se recomienda modificar el valor de esta

#variable.

SCRIPT_DIR="`dirname $(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")`"

#LOG_FILENAME indica la ruta completa al fichero donde se guardan los log de ejecucion de

#este fichero.

LOG_FILENAME="$SCRIPT_DIR/log/node_info_${HOSTNAME}.log"

export ORACLE_HOME=$DB_ORACLE_HOME

export ORACLE_SID=$DB_ORACLE_SID

export PATH=$ORACLE_HOME/bin:$PATH

#Comando para ejecutar ASMCMD

ASM_CMD="asmcmd --privilege sysdba "

#====================

#Funciones auxiliares

#====================

function time_stamp ()

{

echo >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

date >> $LOG_FILENAME

echo $1 >> $LOG_FILENAME

echo ------------------------------------------- >> $LOG_FILENAME

echo >> $LOG_FILENAME

}

function set_asm_env

{

BK_ORACLE_HOME=$ORACLE_HOME

BK_ORACLE_SID=$ORACLE_SID

export ORACLE_HOME=$ASM_ORACLE_HOME

export ORACLE_SID=$ASM_ORACLE_SID

}

function restore_asm_env

{

export ORACLE_HOME=$BK_ORACLE_HOME

export ORACLE_SID=$BK_ORACLE_SID

}

#========================

#Acciones de recopilacion

#========================

time_stamp 'Comienzo de la recopilacion'

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 190

if [ -d $TEMP_DIR ]; then

echo "El directorio $TEMP_DIR ya existe. No puedo continuar" >> $LOG_FILENAME

exit;

else

echo "Creando directorio $TEMP_DIR" >> $LOG_FILENAME

mkdir -p $TEMP_DIR 2>&1 >> $LOG_FILENAME

fi

chmod 775 $TEMP_DIR

time_stamp 'Recoplilando el directorio DBS de los ORACLE_HOME de la base de datos y del ASM'

tar -czvf $TEMP_DIR/dbs_${DB_ORACLE_SID}.tgz ${DB_ORACLE_HOME}/dbs >> $LOG_FILENAME 2>&1

tar -czvf $TEMP_DIR/dbs_${ASM_ORACLE_SID}.tgz ${ASM_ORACLE_HOME}/dbs >> $LOG_FILENAME 2>&1

time_stamp 'Recoplilando el directorio DIAG de los ORACLE_HOME de la base de datos y del

ASM'

#Para no llenar el log con una lista interminable de ficheros, mandamos la salida a

#/dev/null

#y solo mandamos al log la salida de errores (que es lo que interesa)

tar --ignore-failed-read -czvf $TEMP_DIR/diag_${DB_ORACLE_SID}.tgz ${DB_DIAG_DIR} >

/dev/null 2>> $LOG_FILENAME

tar --ignore-failed-read -czvf $TEMP_DIR/diag_${ASM_ORACLE_SID}.tgz ${ASM_DIAG_DIR} >

/dev/null 2>> $LOG_FILENAME

time_stamp 'Recoplilando el directorio TNS_ADMIN de los ORACLE_HOME de la base de datos y

del ASM'

tar -czvf $TEMP_DIR/tns_admin_${DB_ORACLE_SID}.tgz ${DB_ORACLE_HOME}/network/admin >>

$LOG_FILENAME 2>&1

tar -czvf $TEMP_DIR/tns_admin_${ASM_ORACLE_SID}.tgz ${ASM_ORACLE_HOME}/network/admin >>

$LOG_FILENAME 2>&1

time_stamp 'Recopilando el SPFILE de la base de datos ASM'

#El SPFILE de la base de datos normal ya lo respalda el script de backup de RMAN

set_asm_env;

sqlplus "/ as sysdba" >> $LOG_FILENAME 2>&1 << __EOF

create pfile='/tmp/pfile_${ASM_ORACLE_SID}.ora' from spfile;

exit;

__EOF

cp /tmp/pfile_${ASM_ORACLE_SID}.ora $TEMP_DIR/ >> $LOG_FILENAME 2>&1

ASM_SPFILE_LOC=`$ASM_CMD spget`

echo "Ubicacion del SPFILE de la instancia ASM: $ASM_SPFILE_LOC" >> $LOG_FILENAME

$ASM_CMD spbackup $ASM_SPFILE_LOC $TEMP_DIR/spfile_${ASM_ORACLE_SID}.ora >> $LOG_FILENAME

2>&1

restore_asm_env;

time_stamp 'Realizando copia de seguridad de los metadatos de los grupos de discos ASM'

set_asm_env;

$ASM_CMD md_backup $TEMP_DIR/asm_meta_${ASM_ORACLE_SID}.ora >> $LOG_FILENAME 2>&1

DSK_INFO_FILE=$TEMP_DIR/asm_disk_info.txt

$ASM_CMD >> $DSK_INFO_FILE 2>&1 <<__EOF

lsdg

lsdsk -k

lsdsk --statistics

lsdsk -p

lsdsk -t

exit

__EOF

restore_asm_env;

time_stamp 'Backup de ficheros varios'

cp /etc/sysconfig/oracleasm $TEMP_DIR/ >> $LOG_FILENAME 2>&1

cp /etc/oraInst.loc $TEMP_DIR/ >> $LOG_FILENAME 2>&1

cp /etc/oratab $TEMP_DIR/ >> $LOG_FILENAME 2>&1

cp /u01/app/11.2.0/grid/root.sh $TEMP_DIR/root.sh_grid

cp /u01/app/oracle/product/11.2.0/dbhome_1/root.sh $TEMP_DIR/root.sh_db

cp /etc/sysconfig/network-scripts/ifcfg-* $TEMP_DIR/ >> $LOG_FILENAME 2>&1

cp /etc/sysconfig/network $TEMP_DIR/ >> $LOG_FILENAME 2>&1

cp /etc/resolv.conf $TEMP_DIR/ >> $LOG_FILENAME 2>&1

cp /etc/hosts $TEMP_DIR/ >> $LOG_FILENAME 2>&1

cp /etc/modprobe.d/bonding.conf $TEMP_DIR/ >> $LOG_FILENAME 2>&1

#Logs del RAC

tar -cvzf $TEMP_DIR/rac_logs.tgz $ORACLE_HOME/log >> $LOG_FILENAME 2>&1

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 191

#Backup del inventario de productos Oracle instalados en el nodo

tar -cvzf $TEMP_DIR/inventory.tgz $INVENTORY_DIR >> $LOG_FILENAME 2>&1

#Copia del log

cp $LOG_FILENAME $TEMP_DIR/

time_stamp 'Generacion del archivo comprimido con la informacion recopilada'

tar -cvzf $DEST_DIR/node_info_$HOSTNAME.tgz $TEMP_DIR >> $LOG_FILENAME 2>&1

rm -rf $TEMP_DIR >> $LOG_FILENAME 2>&1

time_stamp 'Fin de la recopilacion'

Se realizó una prueba de backup completo del cluster, base de datos y GoldenGate

con los siguientes resultados:

• La base de datos ocupa unos 81 GB actualmente

• El total del backup fue de aprox 1’75 horas y ocupó unos 69 GB

• Información del cluster 0,23GB (aprox 3 min de backup)

• RMAN: 13 GB (11 DB + 0’24 OLD arch + 1,7 Arch) (aprox. 30 min. de

backup)

• Export con data pump: 56 GB (aprox. 1,25 h de backup)

• GG: 0’12GB ( < 1 min de backup)

Habilitar “huge pages” en las máquinas del RAC y contingencia

Cuando las estructuras en memoria de la base de datos superan los 8GB Oracle

recomienda habilitar el mecanismo de “huge pages” a nivel de sistema operativo para

incrementar sensiblemente el rendimiento y evitar que las páginas de memoria en las

que se alojan la SGA y la PGA puedan ser volcadas a disco en caso de falta de

memoria.

Habilitamos “huge pages” en el RAC:

SQL> create pfile='/tmp/pfile' from spfile;

Archivo creado.

SQL> host cat /tmp/pfile

APTORA2.__db_cache_size=3187671040

APTORA1.__db_cache_size=3053453312

APTORA2.__java_pool_size=33554432

APTORA1.__java_pool_size=33554432

APTORA1.__large_pool_size=33554432

APTORA2.__large_pool_size=33554432

APTORA1.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment

APTORA1.__pga_aggregate_target=4731174912

APTORA2.__pga_aggregate_target=4731174912

APTORA1.__sga_target=8791261184

APTORA2.__sga_target=8791261184

APTORA1.__shared_io_pool_size=536870912

APTORA2.__shared_io_pool_size=100663296

APTORA2.__shared_pool_size=5301600256

APTORA1.__shared_pool_size=5033164800

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 192

APTORA2.__streams_pool_size=67108864

APTORA1.__streams_pool_size=33554432

*.audit_file_dest='/u01/app/oracle/admin/APTORA/adump'

*.audit_trail='db'

*.cluster_database=true

APTORA1.cluster_database=TRUE

*.compatible='11.2.0.0.0'

*.control_files='+DATA/aptora/controlfile/current.260.812482017',

'+FRA/aptora/controlfile/current.256.812482017'

*.control_management_pack_access='NONE'

*.db_block_size=8192

*.db_create_file_dest='+DATA'

*.db_domain=''

*.db_files=1024

*.db_name='APTORA'

*.db_recovery_file_dest='+FRA'

*.db_recovery_file_dest_size=133169152000

*.diagnostic_dest='/u01/app/oracle'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=APTORAXDB)'

APTORA2.instance_number=2

APTORA1.instance_number=1

*.memory_target=13517193216

*.nls_language='SPANISH'

*.nls_territory='SPAIN'

*.open_cursors=300

*.processes=250

*.remote_listener='apt-ora-scan:1521'

*.remote_login_passwordfile='exclusive'

*.sessions=280

APTORA2.thread=2

APTORA1.thread=1

*.undo_retention=21600

APTORA1.undo_tablespace='UNDOTBS1'

APTORA2.undo_tablespace='UNDOTBS2'

SQL> alter system reset memory_target scope=SPFILE sid='*';

Sistema modificado.

SQL> alter system reset memory_max_target scope=SPFILE sid='*';

Sistema modificado.

SQL> alter system set sga_max_size = 12G scope=SPFILE sid='*';

Sistema modificado.

SQL> alter system set sga_target = 12G scope=SPFILE sid='*';

Sistema modificado.

SQL> alter system set processes = 520 scope=SPFILE sid='*';

Sistema modificado.

SQL> alter system set sessions = 500 scope=SPFILE sid='*';

Sistema modificado.

SQL> alter system set use_large_pages = only scope=SPFILE sid='*';

Sistema modificado.

[oracle@apt-ora1 ~]$ /u01/app/grid/xag_home/bin/agctl stop goldengate gg_1

[oracle@apt-ora1 ~]$ srvctl stop database -d APTORA

Siguiendo las instrucciones de la nota de My Oracle Support “401749.1” ejecutamos

el script para obtener el valor óptimo del parámetro “hugepages”:

[root@apt-ora1 ~]# cat hugepages.sh

#!/bin/bash

#

# hugepages_settings.sh

#

# Linux bash script to compute values for the

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 193

# recommended HugePages/HugeTLB configuration

#

# Note: This script does calculation for all shared memory

# segments available when the script is run, no matter it

# is an Oracle RDBMS shared memory segment or not.

#

# This script is provided by Doc ID 401749.1 from My Oracle Support

# http://support.oracle.com

# Welcome text

echo "

This script is provided by Doc ID 401749.1 from My Oracle Support

(http://support.oracle.com) where it is intended to compute values for

the recommended HugePages/HugeTLB configuration for the current shared

memory segments. Before proceeding with the execution please note following:

* For ASM instance, it needs to configure ASMM instead of AMM.

* The 'pga_aggregate_target' is outside the SGA and

you should accommodate this while calculating SGA size.

* In case you changes the DB SGA size,

as the new SGA will not fit in the previous HugePages configuration,

it had better disable the whole HugePages,

start the DB with new SGA size and run the script again.

And make sure that:

* Oracle Database instance(s) are up and running

* Oracle Database 11g Automatic Memory Management (AMM) is not setup

(See Doc ID 749851.1)

* The shared memory segments can be listed by command:

# ipcs -m

Press Enter to proceed..."

read

# Check for the kernel version

KERN=`uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'`

# Find out the HugePage size

HPG_SZ=`grep Hugepagesize /proc/meminfo | awk '{print $2}'`

if [ -z "$HPG_SZ" ];then

echo "The hugepages may not be supported in the system where the script

is being executed."

exit 1

fi

# Initialize the counter

NUM_PG=0

# Cumulative number of pages required to handle the running shared memory segments

for SEG_BYTES in `ipcs -m | cut -c44-300 | awk '{print $1}' | grep "[0-9][0-9]*"`

do

MIN_PG=`echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -q`

if [ $MIN_PG -gt 0 ]; then

NUM_PG=`echo "$NUM_PG+$MIN_PG+1" | bc -q`

fi

done

RES_BYTES=`echo "$NUM_PG * $HPG_SZ * 1024" | bc -q`

# An SGA less than 100MB does not make sense

# Bail out if that is the case

if [ $RES_BYTES -lt 100000000 ]; then

echo "***********"

echo "** ERROR **"

echo "***********"

echo "Sorry! There are not enough total of shared memory segments allocated for

HugePages configuration. HugePages can only be used for shared memory segments

that you can list by command:

# ipcs -m

of a size that can match an Oracle Database SGA. Please make sure that:

* Oracle Database instance is up and running

* Oracle Database 11g Automatic Memory Management (AMM) is not configured"

exit 1

fi

# Finish with results

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 194

case $KERN in

'2.4') HUGETLB_POOL=`echo "$NUM_PG*$HPG_SZ/1024" | bc -q`;

echo "Recommended setting: vm.hugetlb_pool = $HUGETLB_POOL" ;;

'2.6') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;

*) echo "Unrecognized kernel version $KERN. Exiting." ;;

esac

# End

[root@apt-ora1 ~]# sh hugepages.sh

This script is provided by Doc ID 401749.1 from My Oracle Support

(http://support.oracle.com) where it is intended to compute values for

the recommended HugePages/HugeTLB configuration for the current shared

memory segments. Before proceeding with the execution please note following:

* For ASM instance, it needs to configure ASMM instead of AMM.

* The 'pga_aggregate_target' is outside the SGA and

you should accommodate this while calculating SGA size.

* In case you changes the DB SGA size,

as the new SGA will not fit in the previous HugePages configuration,

it had better disable the whole HugePages,

start the DB with new SGA size and run the script again.

And make sure that:

* Oracle Database instance(s) are up and running

* Oracle Database 11g Automatic Memory Management (AMM) is not setup

(See Doc ID 749851.1)

* The shared memory segments can be listed by command:

# ipcs -m

Press Enter to proceed...

Recommended setting: vm.nr_hugepages = 6660

Vamos a usar 100 más para tener margen. El valor es el mismo para apt-ora2

[oracle@apt-ora1 ~]$ srvctl stop database -d APTORA

En ambos nodos añadimos las líneas siguiente en /etc/sysctl.conf

# Soporte para Hugepages:

vm.nr_hugepages=6700

y añadimos al final de la entrada de grub.conf lo siguiente:

#boot=/dev/sdb

default=0

timeout=5

splashimage=(hd0,1)/grub/splash.xpm.gz

hiddenmenu

title Oracle Linux Server (2.6.39-400.17.2.el6uek.x86_64)

root (hd0,1)

kernel /vmlinuz-2.6.39-400.17.2.el6uek.x86_64 ro root=/dev/mapper/VolGroup-lv_root

rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=es rd_NO_MD rd_LVM_LV=VolGroup/lv_swap

SYSFONT=latarcyrheb-sun16 rhgb quiet LANG=es_ES.UTF-8 rd_LVM_LV=VolGroup/lv_root rd_NO_DM

numa=off transparent_hugepage=never

Añadimos al final de /etc/security/limits.conf las líneas:

#HugePages

* soft memlock 13721600

* hard memlock 13721600

Y reiniciamos ambos nodos:

[oracle@apt-ora1 ~]$ cat /sys/kernel/mm/transparent_hugepage/enabled

always madvise [never]

[root@apt-ora1 ~]# grep Huge /proc/meminfo

AnonHugePages: 0 kB

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 195

HugePages_Total: 6700

HugePages_Free: 5607

HugePages_Rsvd: 5564

HugePages_Surp: 0

Hugepagesize: 2048 kB

El log de alertas de la base de datos nos indica que la BD está usando Hugepages:

Starting ORACLE instance (normal)

****************** Large Pages Information *****************

Parameter use_large_pages = ONLY

Total Shared Global Region in Large Pages = 13 GB (100%)

Large Pages used by this instance: 6657 (13 GB)

Large Pages unused system wide = 43 (86 MB) (alloc incr 32 MB)

Large Pages configured system wide = 6700 (13 GB)

Large Page size = 2048 KB

***********************************************************

Repetimos el mismo procedimiento para el nodo 2.

Ahora configuramos Hugepages para la máquina donde está la instancia de

contingencia:

GGSCI (apt-ora3) 1> info all

Program Status Group Lag at Chkpt Time Since Chkpt

MANAGER RUNNING

REPLICAT RUNNING RALFOC31 00:00:00 00:00:08

GGSCI (apt-ora3) 2> stop ER *

Sending STOP request to REPLICAT RALFOC31 ...

Request processed.

GGSCI (apt-ora3) 3> stop mgr

Manager process is required by other GGS processes.

Are you sure you want to stop it (y/n)? y

Sending STOP request to MANAGER ...

Request processed.

Manager stopped.

create pfile='/tmp/pfile_APTORA2' from spfile;

alter system reset memory_target scope=SPFILE sid='*';

alter system reset memory_max_target scope=SPFILE sid='*';

alter system set sga_max_size = 9G scope=SPFILE sid='*';

alter system set sga_target = 9G scope=SPFILE sid='*';

alter system set pga_aggregate_target = 5G;

alter system set processes = 520 scope=SPFILE sid='*';

alter system set sessions = 500 scope=SPFILE sid='*';

SQL>

SQL>

SQL>

SQL> shutdown immediate

Base de datos cerrada.

Base de datos desmontada.

Instancia ORACLE cerrada.

SQL> startup

Instancia ORACLE iniciada.

Total System Global Area 9620525056 bytes

Fixed Size 2236488 bytes

Variable Size 1107300280 bytes

Database Buffers 8489271296 bytes

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 196

Redo Buffers 21716992 bytes

[root@apt-ora3 ~]# sh hugepages.sh

This script is provided by Doc ID 401749.1 from My Oracle Support

(http://support.oracle.com) where it is intended to compute values for

the recommended HugePages/HugeTLB configuration for the current shared

memory segments. Before proceeding with the execution please note following:

* For ASM instance, it needs to configure ASMM instead of AMM.

* The 'pga_aggregate_target' is outside the SGA and

you should accommodate this while calculating SGA size.

* In case you changes the DB SGA size,

as the new SGA will not fit in the previous HugePages configuration,

it had better disable the whole HugePages,

start the DB with new SGA size and run the script again.

And make sure that:

* Oracle Database instance(s) are up and running

* Oracle Database 11g Automatic Memory Management (AMM) is not setup

(See Doc ID 749851.1)

* The shared memory segments can be listed by command:

# ipcs -m

Press Enter to proceed...

Recommended setting: vm.nr_hugepages = 9224

alter system set use_large_pages = only scope=SPFILE sid='*';

[root@apt-ora3 ~]# su - oracle

[oracle@apt-ora3 ~]$ . oraenv

ORACLE_SID = [oracle] ? APTORA2

SQL> shutdown immediate

Base de datos cerrada.

Base de datos desmontada.

Instancia ORACLE cerrada.

alter system set use_large_pages = only scope=SPFILE sid='*';

SQL> shutdown immediate

Base de datos cerrada.

Base de datos desmontada.

Instancia ORACLE cerrada.

[root@apt-ora3 ~]# vi /etc/sysctl.conf

# Soporte para Hugepages:

vm.nr_hugepages=9500

[root@apt-ora3 ~]# vi /etc/grub.conf

#boot=/dev/sdb

default=0

timeout=5

splashimage=(hd0,1)/grub/splash.xpm.gz

hiddenmenu

title Oracle Linux Server (2.6.39-400.17.2.el6uek.x86_64)

root (hd0,1)

kernel /vmlinuz-2.6.39-400.17.2.el6uek.x86_64 ro root=/dev/mapper/LVMSYS-lv_root

rd_LVM_LV=LVMSYS/lv_root rd_NO_LUKS rd_LVM_LV=LVMSYS/lv_swap KEYBOARDTYPE=pc KEYTABLE=es

rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb LANG=es_ES.UTF-8 rd_NO_DM numa=off

transparent_hugepage=never

initrd /initramfs-2.6.39-400.17.2.el6uek.x86_64.img

[root@apt-ora3 ~]# vi /etc/security/limits.conf

#HugePages

* soft memlock 19456000

* hard memlock 19456000

[root@apt-ora3 ~]# reboot

# script to start the Oracle database, listener, dbconsole and GoldenGate

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 197

export ORACLE_SID=APTORA2

export ORACLE_UNQNAME=APTORA2

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1

export GG_HOME=/u01/gg

# start the listener and the database

$ORACLE_HOME/bin/dbstart $ORACLE_HOME

# start the Enterprise Manager db console for APTORA

$ORACLE_HOME/bin/emctl start dbconsole

# start the Enterprise Manager db console for APTPRE

# start GoldenGate

$GG_HOME/ggsci PARAMFILE /home/oracle/EMPR/startGG

exit 0

#!/bin/bash

# script to stop the Oracle database, listener, dbconsole and GoldenGate

export ORACLE_SID=APTORA2

export ORACLE_UNQNAME=APTORA2

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1

export GG_HOME=/u01/gg

# stop GoldenGate

$GG_HOME/ggsci PARAMFILE /home/oracle/EMPR/stopGG

# stop the Enterprise Manager db console for APTORA2

$ORACLE_HOME/bin/emctl stop dbconsole

# stop the Enterprise Manager db console for APTPRE

export ORACLE_SID=APTPRE

export ORACLE_UNQNAME=APTPRE

$ORACLE_HOME/bin/emctl stop dbconsole

# stop the listener and the database

$ORACLE_HOME/bin/dbshut $ORACLE_HOME

exit 0

[root@apt-ora3 ~]# cat /etc/oratab

#

# This file is used by ORACLE utilities. It is created by root.sh

# and updated by either Database Configuration Assistant while creating

# a database or ASM Configuration Assistant while creating ASM instance.

# A colon, ':', is used as the field terminator. A new line terminates

# the entry. Lines beginning with a pound sign, '#', are comments.

#

# Entries are of the form:

# $ORACLE_SID:$ORACLE_HOME:<N|Y>:

#

# The first and second fields are the system identifier and home

# directory of the database respectively. The third filed indicates

# to the dbstart utility that the database should , "Y", or should not,

# "N", be brought up at system boot time.

#

# Multiple entries with the same $ORACLE_SID are not allowed.

#

#

APTORA2:/u01/app/oracle/product/11.2.0/dbhome_1:Y

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 198

[root@apt-ora3 ~]# less /u01/app/oracle/diag/rdbms/aptora2/APTORA2/trace/alert_APTORA2.log

****************** Large Pages Information *****************

Parameter use_large_pages = ONLY

Total Shared Global Region in Large Pages = 9218 MB (100%)

Large Pages used by this instance: 4609 (9218 MB)

Large Pages unused system wide = 4891 (10 GB) (alloc incr 32 MB)

Large Pages configured system wide = 9500 (19 GB)

Large Page size = 2048 KB

***********************************************************

[root@apt-ora3 ~]# grep Huge /proc/meminfo

AnonHugePages: 0 kB

HugePages_Total: 9500

HugePages_Free: 8368

HugePages_Rsvd: 8086

HugePages_Surp: 0

Hugepagesize: 2048 kB

Replicación de los esquemas de Alfresco y Admón. Electrónica en contingencia

En esta replicación se mantendrán sincronizados los esquemas de Alfresco y de

Administración Electrónica del RAC con los de la base de datos de contingencia

mediante GoldenGate. En caso de desastre del RAC, es posible dirigir las aplicaciones a

la base de datos de la máquina de contingencia y continuar con mínimo impacto en el

negocio dado que contingencia y producción se encontraban perfectamente

sincronizadas hasta justo el momento antes del desastre mediante GoldenGate.

Creamos los tablespaces para los esquemas en contingencia:

CREATE TABLESPACE ALF_PRO_TS DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE OC3B_PRO_TS DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE OC3C_PRO_INDEX_TS DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE OC3C_PRO_TS DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE OC3EC_PRO_TS DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE OC3ES_PRO_INDEX_TS DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE OC3ES_PRO_TS DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE OC3F_PRO_INDEX_TS DATAFILE AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE OC3F_PRO_TS DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE OC3RC_PRO_INDEX_TS DATAFILE SIZE 5M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE OC3RC_PRO_TS DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE OC3RS_PRO_INDEX_TS DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE OC3RS_PRO_TS DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE EAREGISTRO_PRO_TS DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

Ahora los usuarios:

-- DROP USER ALF CASCADE;

CREATE USER ALF

IDENTIFIED BY "xxx"

DEFAULT TABLESPACE ALF_PRO_TS

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

-- 1 Role for ALF

GRANT CONNECT TO ALF;

ALTER USER ALF DEFAULT ROLE ALL;

-- 8 System Privileges for ALF

GRANT CREATE SEQUENCE TO ALF;

GRANT CREATE SYNONYM TO ALF;

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 199

GRANT CREATE SESSION TO ALF;

GRANT UNLIMITED TABLESPACE TO ALF;

GRANT CREATE TRIGGER TO ALF;

GRANT CREATE PROCEDURE TO ALF;

GRANT CREATE VIEW TO ALF;

GRANT CREATE TABLE TO ALF;

-- DROP USER OC3B CASCADE;

CREATE USER OC3B

IDENTIFIED BY VALUES 'xxx'

DEFAULT TABLESPACE OC3B_PRO_TS

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

-- 1 Role for OC3B

GRANT CONNECT TO OC3B;

ALTER USER OC3B DEFAULT ROLE ALL;

-- 8 System Privileges for OC3B

GRANT CREATE TRIGGER TO OC3B;

GRANT CREATE VIEW TO OC3B;

GRANT UNLIMITED TABLESPACE TO OC3B;

GRANT CREATE SESSION TO OC3B;

GRANT CREATE PROCEDURE TO OC3B;

GRANT CREATE SYNONYM TO OC3B;

GRANT CREATE SEQUENCE TO OC3B;

GRANT CREATE TABLE TO OC3B;

-- DROP USER OC3C CASCADE;

CREATE USER OC3C

IDENTIFIED BY VALUES 'xxxx'

DEFAULT TABLESPACE OC3C_PRO_TS

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

-- 1 Role for OC3C

GRANT CONNECT TO OC3C;

ALTER USER OC3C DEFAULT ROLE ALL;

-- 8 System Privileges for OC3C

GRANT UNLIMITED TABLESPACE TO OC3C;

GRANT CREATE TRIGGER TO OC3C;

GRANT CREATE VIEW TO OC3C;

GRANT CREATE TABLE TO OC3C;

GRANT CREATE PROCEDURE TO OC3C;

GRANT CREATE SEQUENCE TO OC3C;

GRANT CREATE SYNONYM TO OC3C;

GRANT CREATE SESSION TO OC3C;

-- DROP USER OC3EC CASCADE;

CREATE USER OC3EC

IDENTIFIED BY VALUES 'xxxxx'

DEFAULT TABLESPACE OC3EC_PRO_TS

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

-- 1 Role for OC3EC

GRANT CONNECT TO OC3EC;

ALTER USER OC3EC DEFAULT ROLE ALL;

-- 8 System Privileges for OC3EC

GRANT CREATE SEQUENCE TO OC3EC;

GRANT UNLIMITED TABLESPACE TO OC3EC;

GRANT CREATE SESSION TO OC3EC;

GRANT CREATE TRIGGER TO OC3EC;

GRANT CREATE PROCEDURE TO OC3EC;

GRANT CREATE SYNONYM TO OC3EC;

GRANT CREATE TABLE TO OC3EC;

GRANT CREATE VIEW TO OC3EC;

-- DROP USER OC3ES CASCADE;

CREATE USER OC3ES

IDENTIFIED BY VALUES 'xxxx'

DEFAULT TABLESPACE OC3ES_PRO_TS

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

-- 1 Role for OC3ES

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 200

GRANT CONNECT TO OC3ES;

ALTER USER OC3ES DEFAULT ROLE ALL;

-- 8 System Privileges for OC3ES

GRANT UNLIMITED TABLESPACE TO OC3ES;

GRANT CREATE TRIGGER TO OC3ES;

GRANT CREATE PROCEDURE TO OC3ES;

GRANT CREATE SYNONYM TO OC3ES;

GRANT CREATE SEQUENCE TO OC3ES;

GRANT CREATE VIEW TO OC3ES;

GRANT CREATE TABLE TO OC3ES;

GRANT CREATE SESSION TO OC3ES;

-- DROP USER OC3F CASCADE;

CREATE USER OC3F

IDENTIFIED BY VALUES 'xxxxx'

DEFAULT TABLESPACE OC3F_PRO_TS

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

-- 1 Role for OC3F

GRANT CONNECT TO OC3F;

ALTER USER OC3F DEFAULT ROLE ALL;

-- 8 System Privileges for OC3F

GRANT CREATE VIEW TO OC3F;

GRANT CREATE SESSION TO OC3F;

GRANT CREATE TRIGGER TO OC3F;

GRANT CREATE PROCEDURE TO OC3F;

GRANT CREATE TABLE TO OC3F;

GRANT CREATE SYNONYM TO OC3F;

GRANT CREATE SEQUENCE TO OC3F;

GRANT UNLIMITED TABLESPACE TO OC3F;

-- DROP USER OC3RC CASCADE;

CREATE USER OC3RC

IDENTIFIED BY VALUES 'xxxx'

DEFAULT TABLESPACE OC3RC_PRO_TS

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

-- 1 Role for OC3RC

GRANT CONNECT TO OC3RC;

ALTER USER OC3RC DEFAULT ROLE ALL;

-- 8 System Privileges for OC3RC

GRANT CREATE SYNONYM TO OC3RC;

GRANT CREATE TRIGGER TO OC3RC;

GRANT CREATE TABLE TO OC3RC;

GRANT CREATE SESSION TO OC3RC;

GRANT CREATE PROCEDURE TO OC3RC;

GRANT CREATE SEQUENCE TO OC3RC;

GRANT CREATE VIEW TO OC3RC;

GRANT UNLIMITED TABLESPACE TO OC3RC;

-- DROP USER OC3RS CASCADE;

CREATE USER OC3RS

IDENTIFIED BY VALUES 'xxxx'

DEFAULT TABLESPACE OC3RS_PRO_TS

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

-- 1 Role for OC3RS

GRANT CONNECT TO OC3RS;

ALTER USER OC3RS DEFAULT ROLE ALL;

-- 8 System Privileges for OC3RS

GRANT CREATE SESSION TO OC3RS;

GRANT UNLIMITED TABLESPACE TO OC3RS;

GRANT CREATE VIEW TO OC3RS;

GRANT CREATE SYNONYM TO OC3RS;

GRANT CREATE PROCEDURE TO OC3RS;

GRANT CREATE SEQUENCE TO OC3RS;

GRANT CREATE TRIGGER TO OC3RS;

GRANT CREATE TABLE TO OC3RS;

-- DROP USER EAREGISTRO CASCADE;

CREATE USER EAREGISTRO

IDENTIFIED BY VALUES 'xxxxx'

DEFAULT TABLESPACE EAREGISTRO_PRO_TS

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 201

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

-- 1 Role for EAREGISTRO

GRANT CONNECT TO EAREGISTRO;

ALTER USER EAREGISTRO DEFAULT ROLE ALL;

-- 8 System Privileges for EAREGISTRO

GRANT CREATE SESSION TO EAREGISTRO;

GRANT CREATE TABLE TO EAREGISTRO;

GRANT CREATE PROCEDURE TO EAREGISTRO;

GRANT CREATE TRIGGER TO EAREGISTRO;

GRANT UNLIMITED TABLESPACE TO EAREGISTRO;

GRANT CREATE VIEW TO EAREGISTRO;

GRANT CREATE SEQUENCE TO EAREGISTRO;

GRANT CREATE SYNONYM TO EAREGISTRO;

Ponemos el acceso a la instancia ASM en cada nodo del RAC en el nodo 1:

ASM =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = BEQ)

(PROGRAM = /u01/app/11.2.0/grid/bin/oracle)

(ARGV0 = oracle+ASM1)

(ARGS = '(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=BEQ)))')

(ENVS = 'ORACLE_HOME=/u01/app/11.2.0/grid,ORACLE_SID=+ASM1')

)

(CONNECT_DATA =

(SERVICE_NAME = +ASM)

(INSTANCE_NAME = +ASM1)

)

)

y en el nodo 2:

ASM =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = BEQ)

(PROGRAM = /u01/app/11.2.0/grid/bin/oracle)

(ARGV0 = oracle+ASM2)

(ARGS = '(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=BEQ)))')

(ENVS = 'ORACLE_HOME=/u01/app/11.2.0/grid,ORACLE_SID=+ASM2')

)

(CONNECT_DATA =

(SERVICE_NAME = +ASM)

(INSTANCE_NAME = +ASM2)

)

)

Creamos el fichero de configuración del “extract”:

GGSCI (apt-ora1) 3> encrypt password xxxxxx encryptkey default

Using default key...

Encrypted password: XXXXXXXX

Algorithm used: BLOWFISH

GGSCI (apt-ora1) 4> edit params LALFOC31

extract LALFOC31

-- Local Extract para los esquemas de Alfresco y Administracin Electrnica

SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1")

SETENV (ORACLE_SID = "APTORA")

SETENV (NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252)

userid gguser@APTORA, password xxxxxx, ENCRYPTKEY default

TranLogOptions DBLOGREADER

TranLogOptions BUFSIZE 4096000

TranLogOptions DBLOGREADERBUFSIZE 4096000

ExtTrail dirdat/L1

TableExclude DBMS_TABCOMP_TEMP_UNCMP;

TableExclude ALF.DBMS_TABCOMP_TEMP_UNCMP;

TableExclude OC3B.DBMS_TABCOMP_TEMP_UNCMP;

TableExclude OC3C.DBMS_TABCOMP_TEMP_UNCMP;

TableExclude OC3EC.DBMS_TABCOMP_TEMP_UNCMP;

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 202

TableExclude OC3ES.DBMS_TABCOMP_TEMP_UNCMP;

TableExclude OC3F.DBMS_TABCOMP_TEMP_UNCMP;

TableExclude OC3RC.DBMS_TABCOMP_TEMP_UNCMP;

TableExclude OC3RS.DBMS_TABCOMP_TEMP_UNCMP;

TableExclude EAREGISTRO.DBMS_TABCOMP_TEMP_UNCMP;

Table ALF.*;

Table OC3B.*;

Table OC3C.*;

Table OC3EC.*;

Table OC3ES.*;

Table OC3F.*;

Table OC3RC.*;

Table OC3RS.*;

Table EAREGISTRO.*;

Sequence ALF.*;

Sequence OC3B.*;

Sequence OC3C.*;

Sequence OC3EC.*;

Sequence OC3ES.*;

Sequence OC3F.*;

Sequence OC3RC.*;

Sequence OC3RS.*;

Sequence EAREGISTRO.*;

ReportCount Every 30 minutes, Rate

Report at 01:00

ReportRollover at 01:15

DDL Include Mapped

DDLOPTIONS ADDTRANDATA

DiscardFile dirrpt/LALFOC31.dsc, Append

DiscardRollover at 02:00

Añadimos el “supplemental log data” a los esquemas del RAC existentes:

set pagesize 4000

set linesize 2000

select 'add trandata '||owner||'.'||table_name

from dba_tables where owner in

('ALF','OC3B','OC3C','OC3EC','OC3ES','OC3F','OC3RC','OC3RS','EAREGISTRO')

order by owner, table_name ;

GGSCI (apt-ora1) 18> dblogin userid gguser@APTORA, password xxxx, ENCRYPTKEY default

add schematrandata ALF

add schematrandata OC3B

add schematrandata OC3C

add schematrandata OC3EC

add schematrandata OC3ES

add schematrandata OC3F

add schematrandata OC3RC

add schematrandata OC3RS

add schematrandata EAREGISTRO

Comprobamos que no nos quede ninguna tabla atrás:

select * from dba_objects

where owner='&SCHEMA'

and object_type = 'TABLE'

and object_name not like 'BIN$%'

and object_name not in (select table_name from dba_log_groups where owner = '&SCHEMA');

Arrancamos el proceso de extracción:

GGSCI (apt-ora1) 260> add extract LALFOC31, tranlog, threads 2, begin now

EXTRACT added.

GGSCI (apt-ora1) 261> add exttrail dirdat/L1, extract LALFOC31, MEGABYTES 100

EXTTRAIL added.

GGSCI (apt-ora1) 263> start ext LALFOC31

Sending START request to MANAGER ...

EXTRACT LALFOC31 starting

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 203

Creamos el proceso “pump” y lo arrancamos:

GGSCI (apt-ora1) 4> edit param PALFOC31

Extract PALFOC31

-- Extract tipo DataPump para los esquemas de Alfresco y Administracin Electrnica

SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1")

SETENV (ORACLE_SID = "APTORA")

SETENV (NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252)

PassThru

RmtHost apt-ora3, MgrPort 7840, TCPBUFSIZE 100000, COMPRESS

RmtTrail dirdat/R2

Table ALF.*;

Table OC3B.*;

Table OC3C.*;

Table OC3EC.*;

Table OC3ES.*;

Table OC3F.*;

Table OC3RC.*;

Table OC3RS.*;

Table EAREGISTRO.*;

Sequence ALF.*;

Sequence OC3B.*;

Sequence OC3C.*;

Sequence OC3EC.*;

Sequence OC3ES.*;

Sequence OC3F.*;

Sequence OC3RC.*;

Sequence OC3RS.*;

Sequence EAREGISTRO.*;

ReportCount Every 30 minutes, Rate

Report at 01:00

ReportRollover at 01:15

DiscardFile dirrpt/PALFOC31.dsc, Append

DiscardRollover at 02:00

GGSCI (apt-ora1) 5> add extract PALFOC31, EXTTRAILSOURCE dirdat/L1

EXTRACT added.

GGSCI (apt-ora1) 6> add rmttrail dirdat/R2, extract PALFOC31, MEGABYTES 100

RMTTRAIL added.

GGSCI (apt-ora1) 8> start ext PALFOC31

Sending START request to MANAGER ...

EXTRACT PALFOC31 starting

GGSCI (apt-ora1) 12> flush sequence ALF.*

Successfully flushed 45 sequence(s) ALF.*

GGSCI (apt-ora1) 13> flush sequence OC3B.*

flush sequence OC3C.*

flush sequence OC3EC.*

flush sequence OC3ES.*

flush sequence OC3F.*

flush sequence OC3RC.*

flush sequence OC3RS.*

flush sequence EAREGISTRO.*

Realizamos el export en la base de datos del RAC a partir del SCN actual:

[oracle@apt-ora2 backup]$ sqlplus "/ as sysdba"

SQL> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER

------------------------

3432098459

[oracle@apt-ora2 backup]$ export NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252

[oracle@apt-ora2 backup]$ exp system file=expALFOC3.dmp log=expALFOC3.log

owner=ALF,OC3B,OC3C,OC3EC,OC3ES,OC3F,OC3RC,OC3RS,EAREGISTRO statistics=none

consistent=y flashback_scn=3432098459

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 204

Export: Release 11.2.0.3.0 - Production on Tue Jun 4 20:46:10 2013

Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

Password:

Connected to: Oracle Database 11g Release 11.2.0.3.0 - 64bit Production

With the Real Application Clusters and Automatic Storage Management options

Export done in WE8MSWIN1252 character set and AL16UTF16 NCHAR character set

About to export specified users ...

. exporting pre-schema procedural objects and actions

. exporting foreign function library names for user ALF

. exporting foreign function library names for user OC3B

...

Realizamos el import inicial en la base de datos de contingencia

[oracle@apt-ora3 data]$ export NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252

imp system fromuser=ALF,OC3B,OC3C,OC3EC,OC3ES,OC3F,OC3RC,OC3RS,EAREGISTRO

touser=ALF,OC3B,OC3C,OC3EC,OC3ES,OC3F,OC3RC,OC3RS,EAREGISTRO file=expALFOC3.dmp

log=impALFOC3.log ignore=y

Deshabilitamos en destino las constraints “on cascade delete”:

set echo off

set verify off

set pagesize 2000

set linesize 250

set trim on

set heading off

set feedback off

select '-- '||status|| ', '||deferrable||', '||deferred||chr(10)||'alter table

'||owner||'.'||table_name||' disable constraint '||constraint_name||';'

from all_constraints

where delete_rule = 'CASCADE'

and owner in ('ALF', 'OC3B', 'OC3C', 'OC3EC', 'OC3ES', 'OC3F', 'OC3RC', 'OC3RS',

'EAREGISTRO')

order by owner;

-- ENABLED, NOT DEFERRABLE, IMMEDIATE

alter table ALF.ALF_PROP_UNIQUE_CTX disable constraint FK_ALF_PROPUCTX_V3;

...

Ninguno de los esquemas tienen triggers.

Editamos el fichero del replicat en destino (para la sincronización inicial dejamos

habilitado el HANDLECOLLISIONS y luego lo volvemos a comentar):

GG> edit param RALFOC31

Replicat RALFOC31

-- Replicat para los esquemas de Alfresco y Administracion Electronica

SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1")

SETENV (ORACLE_SID = "APTORA2")

SETENV (NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252)

userid gguser@APTPRE, password xxxx, ENCRYPTKEY default

-- HandleCollisions

DDLERROR DEFAULT IGNORE

AssumeTargetDefs

ReportCount Every 30 minutes, Rate

Report at 01:00

ReportRollover at 01:15

DiscardFile dirrpt/RALFOC31.dsc, Append

DiscardRollover at 02:00

Map ALF.*, Target ALF.*;

Map OC3B.*, Target OC3B.*;

Map OC3C.*, Target OC3C.*;

Map OC3EC.*, Target OC3EC.*;

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 205

Map OC3ES.*, Target OC3ES.*;

Map OC3F.*, Target OC3F.*;

Map OC3RC.*, Target OC3RC.*;

Map OC3RS.*, Target OC3RS.*;

Map EAREGISTRO.*, Target EAREGISTRO.*;

Arrancamos el proceso de replicación a partir del SCN del export:

GGSCI (apt-ora3) 2> add replicat RALFOC31, exttrail dirdat/R2

REPLICAT added.

GGSCI (apt-ora3) 1> dblogin userid gguser password xxxxxx

Successfully logged into database.

GGSCI (apt-ora3) 2> add checkpointtable

No checkpoint table specified, using GLOBALS specification (gguser.chkpt)...

Successfully created checkpoint table gguser.chkpt.

GGSCI (apt-ora3) 3> start rep RALFOC31, aftercsn 3432098459

Sending START request to MANAGER ...

REPLICAT RALFOC31 starting

GGSCI (apt-ora3) 4> lag RALFOC31

Sending GETLAG request to REPLICAT RALFOC31 ...

Last record lag: 5 seconds.

At EOF, no more records to process.

GGSCI (apt-ora3) 5> info all

Program Status Group Lag at Chkpt Time Since Chkpt

MANAGER RUNNING

REPLICAT RUNNING RALFOC31 00:00:00 00:00:01

Comentamos el parámetro HANDLECOLLISIONS una vez el “lag” llega a cero.

Habilitamos la replicación DDL en el RAC:

SQL> grant execute on utl_file to gguser;

Concesion terminada correctamente.

SQL> @marker_setup

Marker setup script

...

SUCCESSFUL installation of DDL Replication software components

SQL> @role_setup

GGS Role setup script

...

Enter GoldenGate schema name:GGUSER

SQL> @ddl_pin GGUSER

Procedimiento PL/SQL terminado correctamente.

SQL> @ddl_enable

Disparador modificado.

Probamos la replicación:

[oracle@apt-ora1 gg]$ sqlplus alf/xxx

SQL*Plus: Release 11.2.0.3.0 Production on Wed Jun 5 09:40:53 2013

SQL> create table test (nombre varchar2(50), id number primary key);

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 206

Tabla creada.

SQL> insert into test values ('Hola', 1);

1 fila creada.

SQL> commit;

GGSCI (apt-ora1) 2> stats LALFOC31

Sending STATS request to EXTRACT LALFOC31 ...

Start of Statistics at 2013-06-05 09:44:14.

DDL replication statistics (for all trails):

*** Total statistics since extract started ***

Operations 1.00

Mapped operations 1.00

Unmapped operations 0.00

Other operations 0.00

Excluded operations 0.00

Comprobamos que TRANDATA se añade automáticamente a las nuevas tablas

creadas:

GGSCI (apt-ora1) 7> dblogin userid gguser password xxxxx

Successfully logged into database.

GGSCI (apt-ora1) 10> info trandata ALF.TEST

Logging of supplemental redo log data is enabled for table ALF.TEST.

Columns supplementally logged for table ALF.TEST: ID.

Y que la tabla se crea en destino:

GGSCI (apt-ora3) 13> stats RALFOC31

Sending STATS request to REPLICAT RALFOC31 ...

Start of Statistics at 2013-06-05 09:47:37.

DDL replication statistics:

*** Total statistics since replicat started ***

Operations 1.00

Mapped operations 1.00

Unmapped operations 0.00

Other operations 0.00

Excluded operations 0.00

Errors 0.00

Retried errors 0.00

Discarded errors 0.00

Ignored errors 0.00

[oracle@apt-ora3 gg]$ sqlplus alf/xxxx

SQL*Plus: Release 11.2.0.3.0 Production on Wed Jun 5 10:10:00 2013

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

Conectado a:

Oracle Database 11g Release 11.2.0.3.0 - 64bit Production

SQL> select * from test;

NOMBRE ID

-------------------------------------------------- ----------

Hola 1

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 207

Seguiremos los mismos pasos para habilitar la replicación DDL en la base de datos

de contingencia por si ésta se convierte en la base de datos de producción en un caso de

emergencia.

Replicación de los esquemas de SIME en contingencia

Creamos los tablespaces en destino:

CREATE TABLESPACE NTX_SIME_HIS DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 8192M

LOGGING

ONLINE

PERMANENT

EXTENT MANAGEMENT LOCAL AUTOALLOCATE

BLOCKSIZE 8K

SEGMENT SPACE MANAGEMENT AUTO

FLASHBACK ON;

ALTER TABLESPACE NTX_SIME_HIS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 8192M;

ALTER TABLESPACE NTX_SIME_HIS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 8192M;

ALTER TABLESPACE NTX_SIME_HIS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 8192M;

ALTER TABLESPACE NTX_SIME_HIS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 8192M;

ALTER TABLESPACE NTX_SIME_HIS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

ALTER TABLESPACE NTX_SIME_HIS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

ALTER TABLESPACE NTX_SIME_HIS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

ALTER TABLESPACE NTX_SIME_HIS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

ALTER TABLESPACE NTX_SIME_HIS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

ALTER TABLESPACE NTX_SIME_HIS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

ALTER TABLESPACE NTX_SIME_HIS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

ALTER TABLESPACE NTX_SIME_HIS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M;

CREATE TABLESPACE NTX_SIME_HIS_INDEX_TS DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M

LOGGING

ONLINE

PERMANENT

EXTENT MANAGEMENT LOCAL AUTOALLOCATE

BLOCKSIZE 8K

SEGMENT SPACE MANAGEMENT AUTO

FLASHBACK ON;

CREATE TABLESPACE NTX_SIME_INDEX_TX DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 4096M

LOGGING

ONLINE

PERMANENT

EXTENT MANAGEMENT LOCAL AUTOALLOCATE

BLOCKSIZE 8K

SEGMENT SPACE MANAGEMENT AUTO

FLASHBACK ON;

CREATE TABLESPACE NTX_SIME_DATA_TS DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 8192M

LOGGING

ONLINE

PERMANENT

EXTENT MANAGEMENT LOCAL AUTOALLOCATE

BLOCKSIZE 8K

SEGMENT SPACE MANAGEMENT AUTO

FLASHBACK ON;

ALTER TABLESPACE NTX_SIME_DATA_TS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 8192M;

ALTER TABLESPACE NTX_SIME_DATA_TS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 8192M;

ALTER TABLESPACE NTX_SIME_DATA_TS ADD DATAFILE SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 8192M;

Creamos los usuarios en destino:

-- DROP USER NTX_SIME CASCADE;

CREATE USER NTX_SIME

IDENTIFIED BY VALUES 'xxxx'

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 208

DEFAULT TABLESPACE NTX_SIME_DATA_TS

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

-- 1 Role for NTX_SIME

GRANT CONNECT TO NTX_SIME;

ALTER USER NTX_SIME DEFAULT ROLE ALL;

-- 7 System Privileges for NTX_SIME

GRANT CREATE TABLE TO NTX_SIME;

GRANT CREATE PROCEDURE TO NTX_SIME;

GRANT CREATE SEQUENCE TO NTX_SIME;

GRANT UNLIMITED TABLESPACE TO NTX_SIME;

GRANT CREATE SESSION TO NTX_SIME;

GRANT CREATE TRIGGER TO NTX_SIME;

GRANT CREATE VIEW TO NTX_SIME;

-- DROP USER NTX_SIME_HIS CASCADE;

CREATE USER NTX_SIME_HIS

IDENTIFIED BY VALUES 'xxxx'

DEFAULT TABLESPACE NTX_SIME_HIS

TEMPORARY TABLESPACE TEMP

PROFILE DEFAULT

ACCOUNT UNLOCK;

-- 1 Role for NTX_SIME_HIS

GRANT CONNECT TO NTX_SIME_HIS;

ALTER USER NTX_SIME_HIS DEFAULT ROLE ALL;

-- 7 System Privileges for NTX_SIME_HIS

GRANT UNLIMITED TABLESPACE TO NTX_SIME_HIS;

GRANT CREATE TRIGGER TO NTX_SIME_HIS;

GRANT CREATE VIEW TO NTX_SIME_HIS;

GRANT CREATE SESSION TO NTX_SIME_HIS;

GRANT CREATE TABLE TO NTX_SIME_HIS;

GRANT CREATE SEQUENCE TO NTX_SIME_HIS;

GRANT CREATE PROCEDURE TO NTX_SIME_HIS;

Realizamos un export sin filas en origen:

[oracle@apt-ora1 backup]$ export NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252

[oracle@apt-ora1 backup]$ exp system file=expNTX_SIME_Y_HIS_NOROWS.dmp

log=expNTX_SIME_Y_HIS_NOROWS.log owner=NTX_SIME,NTX_SIME_HIS rows=n statistics=none

Export: Release 11.2.0.3.0 - Production on Sun Jun 9 18:28:18 2013

Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

Password:

Connected to: Oracle Database 11g Release 11.2.0.3.0 - 64bit Production

With the Real Application Clusters and Automatic Storage Management options

Export done in WE8MSWIN1252 character set and AL16UTF16 NCHAR character set

Note: table data (rows) will not be exported

About to export specified users ...

. exporting pre-schema procedural objects and actions

. exporting foreign function library names for user NTX_SIME

. exporting foreign function library names for user NTX_SIME_HIS

. exporting PUBLIC type synonyms

. exporting private type synonyms

. exporting PUBLIC type synonyms

. exporting private type synonyms

. exporting object type definitions for user NTX_SIME

. exporting object type definitions for user NTX_SIME_HIS

About to export NTX_SIME's objects ...

. exporting database links

...

. exporting post-schema procedural objects and actions

. exporting statistics

Export terminated successfully without warnings.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 209

Lo importamos en destino:

[oracle@apt-ora3 data2]$ export NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252

[oracle@apt-ora3 data2]$ imp system fromuser=NTX_SIME,NTX_SIME_HIS

touser=NTX_SIME,NTX_SIME_HIS file=expNTX_SIME_Y_HIS_NOROWS.dmp

log=expNTX_SIME_Y_HIS_NOROWS.log rows=n ignore=y

Import: Release 11.2.0.3.0 - Production on Sun Jun 9 18:31:08 2013

Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

Password:

Connected to: Oracle Database 11g Release 11.2.0.3.0 - 64bit Production

Export file created by EXPORT:V11.02.00 via conventional path

import done in WE8MSWIN1252 character set and AL16UTF16 NCHAR character set

. importing NTX_SIME's objects into NTX_SIME

. importing NTX_SIME_HIS's objects into NTX_SIME_HIS

. importing NTX_SIME's objects into NTX_SIME

...

Import terminated successfully with warnings.

Deshabilitamos triggers, FKs y constraints "on delete cascade" y "check" en destino:

No hay constraints "on delete cascade". Deshabilitamos los triggers:

set echo off

set verify off

set pagesize 2000

set linesize 250

set trim on

set heading off

set feedback off

spool &SCHEMA..disable_triggers.sql

select '-- '||status||chr(10)||'alter trigger '||owner||'.'||trigger_name||

' disable ;'

from all_triggers

where owner = '&SCHEMA';

spool off

-- DISABLED

alter trigger NTX_SIME.BLOQUEO_HISTORICO_IFCSUM_TR01 disable ;

...

Ahora las constraints:

set echo off

set verify off

set pagesize 2000

set linesize 250

set trim on

set heading off

set feedback off

spool &&SCHEMA..disable_constraints.sql

select 'alter table '|| owner || '.' || TABLE_NAME || ' disable constraint

'||CONSTRAINT_NAME||';'

from dba_constraints

where owner= '&SCHEMA'

and status = 'ENABLED'

and constraint_type in ('C', 'R');

spool off

spool &&SCHEMA..enable_constraints.sql

select 'alter table '|| owner || '.' || TABLE_NAME || ' enable constraint

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 210

'||CONSTRAINT_NAME||';'

from dba_constraints

where owner= '&SCHEMA'

and status = 'ENABLED'

and constraint_type in ('C', 'R');

spool off

alter table NTX_SIME.SUSCRIPTORES_TB disable constraint SYS_C0013988;

...

Creamos en origen los ficheros de configuración para el proceso de captura de

cambios:

GGSCI (apt-ora1) 1> edit param LSIME1

extract LSIME1

-- Local Extract para los esquemas de Mensajeria hacia contingencia

SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1")

SETENV (ORACLE_SID = "APTORA")

SETENV (NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252)

userid gguser@APTORA, password xxxx, ENCRYPTKEY default

TranLogOptions DBLOGREADER

TranLogOptions BUFSIZE 4096000

TranLogOptions DBLOGREADERBUFSIZE 4096000

ExtTrail dirdat/L2

TableExclude NTX_SIME.DR$*;

TableExclude NTX_SIME.DBMS_TABCOMP_TEMP_*

TableExclude NTX_SIME_HIS.DBMS_TABCOMP_TEMP_*

Table NTX_SIME.*;

Table NTX_SIME_HIS.*;

Sequence NTX_SIME.*;

ReportCount Every 30 minutes, Rate

Report at 01:00

ReportRollover at 01:15

--DDL Include Mapped

DiscardFile dirrpt/LSIME1.dsc, Append

DiscardRollover at 02:00

y del “pump”:

extract LSIME1

-- Local Extract para los esquemas de Mensajeria hacia contingencia

SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1")

SETENV (ORACLE_SID = "APTORA")

SETENV (NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252)

userid gguser@APTORA, password xxxxx, ENCRYPTKEY default

TranLogOptions DBLOGREADER

TranLogOptions BUFSIZE 4096000

TranLogOptions DBLOGREADERBUFSIZE 4096000

ExtTrail dirdat/L2

TableExclude NTX_SIME.DR$*;

TableExclude NTX_SIME.DBMS_TABCOMP_TEMP_*

TableExclude NTX_SIME_HIS.DBMS_TABCOMP_TEMP_*

Table NTX_SIME.*;

Table NTX_SIME_HIS.*;

Sequence NTX_SIME.*;

ReportCount Every 30 minutes, Rate

Report at 01:00

ReportRollover at 01:15

--DDL Include Mapped

DiscardFile dirrpt/LSIME1.dsc, Append

DiscardRollover at 02:00

add extract LSIME1, tranlog, threads 2, begin now

add exttrail dirdat/L2, extract LSIME1, MEGABYTES 100

add extract PSIME1, EXTTRAILSOURCE dirdat/L2

add rmttrail dirdat/R3, extract PSIME1, MEGABYTES 100

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 211

Creamos en destino el fichero de configuración para el proceso de replicación de

cambios:

GGSCI (apt-ora3) 1> edit param RSIME1

Replicat RSIME1

-- Replicat para los esquemas de Mensajeria (tablas sin KEYCOLS)

SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1")

SETENV (ORACLE_SID = "APTORA2")

SETENV (NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252)

userid gguser@APTORA2, password xxxxxxx, ENCRYPTKEY default

-- HandleCollisions

AssumeTargetDefs

ReportCount Every 30 minutes, Rate

Report at 01:00

ReportRollover at 01:15

DiscardFile dirrpt/RSIME1.dsc, Append

DiscardRollover at 02:00

SQLEXEC "alter session set time_zone = '+00:00'"

Map NTX_SIME.BERMAN_MEDIDAS_OPE_TB, Target NTX_SIME.BERMAN_MEDIDAS_OPE_TB,

KEYCOLS(OPE_MEDIDA_ID, OPE_MEDIDA_DIM_ID);

Map NTX_SIME.BLOQUEO_HISTORICO_IFCSUM_TB, Target NTX_SIME.BLOQUEO_HISTORICO_IFCSUM_TB,

KEYCOLS(MENSAJE_ID, FECHA_ALTA);

Map NTX_SIME.FORMULARIO_ERROR_TB, Target NTX_SIME.FORMULARIO_ERROR_TB,

KEYCOLS(FORMULARIO_ID, NODO_ID);

Map NTX_SIME.FORMULARIO_MAESTROS_TB, Target NTX_SIME.FORMULARIO_MAESTROS_TB,

KEYCOLS(FORMULARIO_ID, MAESTRO_ID);

Map NTX_SIME.*, Target NTX_SIME.*;

Map NTX_SIME_HIS.*, Target NTX_SIME_HIS.*;

GGSCI (apt-ora3) 3> add replicat RSIME1, exttrail dirdat/R3

REPLICAT added.

Ahora configuramos en origen el fichero de configuración de la replicación inicial:

GGSCI (apt-ora1) 2> edit param LSIMEI

SOURCEISTABLE

-- Initital LOad para los esquemas de Mensajeria hacia contingencia

SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1")

SETENV (ORACLE_SID = "APTORA")

SETENV (NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252)

userid gguser@APTORA, password xxxxxx, ENCRYPTKEY default

RMTHOST apt-ora3, MGRPORT 7840

RMTFILE /data2/init-load/LS, MAXFILES 9999, MEGABYTES 2000, PURGE

TableExclude NTX_SIME.DR$*;

Table NTX_SIME.*;

Table NTX_SIME_HIS.*;

GGSCI (apt-ora1) 3> add extract LSIMEI, SOURCEISTABLE

EXTRACT added.

Seguidamente creamos en destino el fichero de configuración de la replicación

inicial:

GGSCI (apt-ora3) 2> edit param RSIMEI

REPLICAT RSIMEI

-- Replicat inicial para los esquemas de Mensajeria

SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1")

SETENV (ORACLE_SID = "APTORA2")

SETENV (NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252)

USERID gguser@APTORA2, password xxxxx, ENCRYPTKEY default

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 212

AssumeTargetDefs

-- En la replicación inicial parece no aplicarse esta corrección

--SQLEXEC "alter session set time_zone = '+00:00'"

Map NTX_SIME.BERMAN_MEDIDAS_OPE_TB, Target NTX_SIME.BERMAN_MEDIDAS_OPE_TB,

KEYCOLS(OPE_MEDIDA_ID, OPE_MEDIDA_DIM_ID);

Map NTX_SIME.BLOQUEO_HISTORICO_IFCSUM_TB, Target NTX_SIME.BLOQUEO_HISTORICO_IFCSUM_TB,

KEYCOLS(MENSAJE_ID, FECHA_ALTA);

Map NTX_SIME.FORMULARIO_ERROR_TB, Target NTX_SIME.FORMULARIO_ERROR_TB,

KEYCOLS(FORMULARIO_ID, NODO_ID);

Map NTX_SIME.FORMULARIO_MAESTROS_TB, Target NTX_SIME.FORMULARIO_MAESTROS_TB,

KEYCOLS(FORMULARIO_ID, MAESTRO_ID);

Map NTX_SIME.*, Target NTX_SIME.*;

Map NTX_SIME_HIS.*, Target NTX_SIME_HIS.*;

DiscardFile dirrpt/RSIMEI.dsc, Append

GGSCI (apt-ora3) 3> add rep RSIMEI, exttrail /data2/init-load/LS, nodbcheckpoint

REPLICAT added.

Arrancamos la captura de cambios (extract y pump) en origen:

GGSCI (apt-ora1) 6> start ext LSIME1

Sending START request to MANAGER ...

EXTRACT LSIME1 starting

GGSCI (apt-ora1) 8> start ext psime1

Sending START request to MANAGER ...

EXTRACT PSIME1 starting

GGSCI (apt-ora1) 13> dblogin userid gguser password xxxx

Successfully logged into database.

GGSCI (apt-ora1) 14> flush sequence NTX_SIME.*

Successfully flushed 34 sequence(s) NTX_SIME.*

GGSCI (apt-ora1) 15> flush sequence NTX_SIME_HIS.*

ERROR: Sequence NTX_SIME_HIS.* does not exist.

Lanzamos la captura y envío a ficheros destino de la sincronización inicial:

[oracle@apt-ora1 gg]$ ./extract paramfile dirprm/lsimei.prm reportfile dirrpt/LSIMEI.rpt

[oracle@apt-ora1 gg]$ head dirrpt/LSIMEI.rpt

***********************************************************************

Oracle GoldenGate Capture for Oracle

Version 11.2.1.0.5_02 16363018 16576798_FBO

Linux, x64, 64bit (optimized), Oracle 11g on Apr 3 2013 21:32:54

Copyright (C) 1995, 2013, Oracle and/or its affiliates. All rights reserved.

Starting at 2013-06-10 00:29:48

***********************************************************************

Aplicamos el fichero de carga inicial a la base de datos destino

GGSCI (apt-ora3) 1> add rep RSIMEI, exttrail /data2/init-load/LS, nodbcheckpoint

REPLICAT added.

GGSCI (apt-ora3) 2> info all

Program Status Group Lag at Chkpt Time Since Chkpt

MANAGER RUNNING

REPLICAT RUNNING RALFOC31 00:00:00 00:00:02

REPLICAT STOPPED RSIME1 00:00:00 22:52:13

REPLICAT STOPPED RSIMEI 00:00:00 00:00:03

GGSCI (apt-ora3) 2> start rep rsimei

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 213

Sending START request to MANAGER ...

REPLICAT RSIMEI starting

Una vez finalizada la instanciación inicial (duró 4h 30 m) detenemos el extract de la

migración inicial:

Switching to next trail file /data2/init-load/LS000033 at 2013-06-10 23:42:42 due to EOF,

with current RBA 2036991744

Opened trail file /data2/init-load/LS000033 at 2013-06-10 23:42:42

GGSCI (apt-ora3) 2> send RSIMEI, logend

Sending LOGEND request to REPLICAT RSIMEI ...

YES.

Sending STATUS request to REPLICAT RSIMEI ...

Current status: At EOF

Sequence #: 33

RBA: 1676773727

0 records in current transaction

GGSCI (apt-ora3) 8> stop rep RSIMEI

Sending STOP request to REPLICAT RSIMEI ...

Request processed.

Arrancamos la replicación de cambios en la BD origen durante la captura en origen

y posterior replicación en destino (teniendo habilitado el parámetro

HANDLECOLLISIONS):

GGSCI (apt-ora3) 2> add checkpointtable

No checkpoint table specified, using GLOBALS specification (gguser.chkpt)...

Successfully created checkpoint table gguser.chkpt.

GGSCI (apt-ora3) 4> start rep RSIME1

Sending START request to MANAGER ...

REPLICAT RSIME1 starting

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 214

Conclusiones

Una de las ventajas principales de este tipo de proyectos en que se integra hardware

y software es la posibilidad de construir un sistema perfectamente ajustado a las

necesidades del cliente máxime cuando, como en este caso, tanto el software como el

hardware provienen del mismo fabricante.

A nivel personal resulta muy gratificante el poder diseñar y controlar todo el entorno

de gestión de bases de datos Oracle del cliente desde la propia instalación del hardware

hasta la puesta en producción del sistema. Las posibilidades de aprendizaje y las

habilidades multidisciplinares necesarias son, por sí solas, un aliciente importante para

acometer este tipo de proyectos.

Si bien realizar este proyecto de tan amplio espectro resulta gratificante, no se me

escapa comentar las tremendas dificultades que conlleva finalizarlo con éxito. No sólo

hablamos de retos técnicos sino de retos personales. Es preciso conocer detalles de

elementos tan dispares como pueden ser la compatibilidad de los distintos componentes

de hardware entre sí, la forma de acceder y gestionar el almacenamiento remoto, la

forma de sincronizar esquemas de bases de datos con Oracle GoldenGate o el

conocimiento de las “best practices” para maximizar el rendimiento de las bases de

datos Oracle en clúster, por citar sólo unos cuantos.

Como aspecto positivo diría que me ha sorprendido el buen rendimiento del acceso

al almacenamiento a través de iSCSI que superó con creces al rendimiento de acceso a

la cabina existente mediante Fiber Channel. Bien es cierto que se trata de hardware

nuevo no directamente comparable al existente de más de cinco años de antigüedad.

Aun así, el aumento de velocidad en operaciones de uso intensivo de disco como las

exportaciones e importaciones de esquemas de base de datos fue más que notable.

En el lado negativo destacaría que, pese a la opinión del fabricante que indica que es

una solución “para todo”, Oracle GoldenGate no es la herramienta ideal para realizar

migraciones de cierto tipo de esquemas de base de datos y, por supuesto, no lo es para

mantener un entorno de contingencia para ellos. Si bien se trata de una solución muy

versátil para esquemas que cumplen con los relativamente exigentes requisitos de la

herramienta, su uso se me antoja tremendamente complejo y tedioso con aquellos

esquemas que se apartan de los requisitos ideales, particularmente aquellos con tablas

sin claves primarias y/o únicas.

Como reflexión final querría destacar las ventajas que este trabajo ha aportado al

cliente que ahora cuenta con una plataforma de gestión de bases de datos más robusta

habiendo mejorado en disponibilidad y protección contra desastres y, sobre todo,

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 215

disponiendo de una plataforma mucho más potente que entrega un rendimiento varias

veces superior a la existente y que le permitirá acometer sin problema los

requerimientos de acceso a bases de datos de sus aplicaciones a corto y medio plazo.

Actualización consolidación, migración y contingencia de un entorno hardware

y software para la gestión de bases de datos

Página 216

Bibliografía

[1] Ben Prusinski, Steve Phillips y Richard Chung, Expert Oracle GoldenGate. Apress

2011.

[2] John P. Jeffries, Oracle GoldenGate 11g Implementer’s guide. Packt Publishing

2011.

[3] John P. McHugh, Oracle Grid Infrastructure Bundled Agents. Oracle Corporation

2012.

[4] Thomas Kyte, Expert Oracle Database Architecture. Second Edition. Apress 2010.

[5] Christian Antognini, Troubleshooting Oracle Performance. Apress 2008.

[6] Robert G. Freeman y Matthew Hart, Oracle RMAN 11g Backup and Recovery.

Oracle Press 2010.

[7] “My Oracle Support”. Web: https://support.oracle.com