Post on 28-Sep-2018
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