Como migrar/copiar una base de datos a otro servidor.

Un pequeño parentesis antes de comenzar con el post.
Después de mucho tiempo (wow! casi un año), aqui vuelvo a las andadas. La verdad no había escrito algo por que no tenia ganas, o me entretenía haciendo otras cosas (WEBeando/surfeando), o no encontraba algún tema que tratar sobre Oracle; pero el día de hoy recibí una pregunta de Paula sobre la migración de una base de datos a otro servidor y me pareció interesante escribir al respecto de manera rápida y sin mucho rodeo técnico, ademas sirve de pretexto para comenzar de nuevo a escribir…espero y así sea.

Bueno, ahora a lo que interesa, como le hago para mover/migrar una base de datos de un servidor a otro, la respuesta como todo en Oracle es muy sencilla…depende.

Bueno, depende de la información que tengamos. Basado en la información de Paula “Tengo una bd oracle 10g y la quiero “mover” a otro servidor”, pues la siguientes preguntas serian:

  1. El nuevo servidor es también 10g y la misma versión que el fuente, esto quiere decir que si es 10.0.2 a 10.0.2 y si ambas son de la misma edición (standard, enterprise, etc) ?
  2. La versión del sistema operativo es la misma?
  3. De que tamaño es la base de datos?
  4. Hay posibilidad de detener la base de datos durante la migración o tienen que ser en tiempo real?
  5. que mas…? mas detalles. No se me ocurren mas preguntas por el momento…

Que opciones tengo para la migración?

Afortunadamente Oracle provee muchos métodos para realizar esta tarea, de nuevo, todo depende como la queramos hacer y depende de los requerimientos que tengamos. Pero existen soluciones sencillas y soluciones complejas, vamos a ver algunas de ellas de manera general y sin entrar en los detalles de cada una.

Sencillas

Copia Directa

Suponiendo que el nuevo servidor es exactamente igual que el anterior respecto a versiones de software (sistema operativo, base de datos, parches, etc) en teoría si copiamos todos los archivos de datos, control files, redo logs, etc la base de datos debería de funcionar correctamente. Personalmente yo no utilizaría esta opción por que siempre falta algo, un parche, un parámetro,  etc.

Export/Import (DataPump en 10g)

Este podría ser también complejo pero normalmente se hace un export del usuario(s) de la aplicación y se importa en la otra base de datos, creo que es de las mas sencillas que puede existir ademas que podemos hacer el export de una versión anterior a la nueva base de datos por ejemplo de 9i a 10g. El único problema de esta opción es que debemos tener mas o menos el mismo espacio en disco que la base de datos actual para poder hacer el export; por ejemplo en una base de datos de 10Gb tal vez si es conveniente hacerlo pero en una de 600Gb o de Tb ya no es tan practico hacerlo, y si ademas se tiene que transferir el archivo(s) del export pues seria muchísimo mas tardado.

Complejas

RMAN Duplicate.

RMAN es una utilitaria de Oracle para realizar backups/restore. Una opcion que es muy interesante es el “duplicate” y como su nombre lo dice duplica una base de datos a otro servidor. Básicamente como funciona es de la siguiente manera: se hace un backup de la base de datos “fuente/original”, una vez con el backup guardado en el tape/disco/etc el resto del trabajo se hace en el servidor “destino/nuevo”, en el destino se debe tener el software de Oracle instalado, hay que configurar el tnsnames.ora para tener acceso a la base “fuente”, se copia el init.ora del fuente al destino (para tener la misma configuración) y se hacen los cambios necesarios al archivo (cambiar el destino de los control files, memoria, etc), se agregan al init.ora 2 parámetros para el duplicate (db_file_name_convert y log_file_name_convert), se crea el spfile y se crea un script de RMAN para duplicar la base de datos.
El script se ejecuta en la base de datos destino y básicamente el script o RMAN buscan el backup que hicimos de la fuente y hace un restore al destino de todos los archivos, hace un recover de la base hasta la hora/scn/etc que le digamos y deja la nueva base de datos lista para trabajar con ella.
Personalmente este es un método preferido para hacer “refresh” de ambientes por ejemplo de produccion a QA o desarrollo, es rápido (bueno depende de ciertos factores red/servidor/discos/etc) y sencillo ya que una vez teniendo los scripts es solo cuestión de ejecutarlos y RMAN se encarga de todo.

NOTA.- Muchísimos pasos no son mencionados y cierta configuracion se tiene que hacer para que esto funcione correctamente.

Backup/Restore

Es muy similar al Duplicate pero casi todos los pasos los tenemos que hacer manualmente, hacer un backup del fuente, hacer el restore en el destino, recrear control files, hacer recover,etc.

Copy a nivel SAN.

Esta opción es ideal cuando se tienen bases de datos grandes (GB a TB+), en esencia la copia de la información se hace a nivel de hardware/discos. Si la base de datos fuente y destino están en una SAN entonces solo hay que copiar los discos que contienen la base de datos fuente a los discos que van a contener la base de datos destino. Todo esto se hace por medio del sistema operativo y regularmente lo hacen los encargados de los servidores. La participación del DBA en esta opción es mínima, solo hay que poner los tablespaces en la base de datos fuente en modo backup, se hace la copia a nivel hardware, una vez terminada la copia se quita el modo backup de la fuente, se envian los archivos del archive de la fuente al destino (de preferencia se hace un log switch) y en el destino se recrean los control files si es necesario y se hace un recover (aquí va a preguntar por los archives que acabamos de copiar) y listo, la BD queda funcional.

Y estas son las opciones que conozco para migrar/mover/copiar una base de datos de un lado a otro. No entre en detalles técnicos ya que cada sitio puede tener una configuración diferente y hardware diferente, por ejemplo donde trabajo actualmente tenemos un servidor de backups y eso facilita mucho hacer el duplicate de una base de datos en USA a Canadá por medio de la red (algo tardado). También faltan muchos detalles sobre que comandos usar para RMAN y para hacer la copia a nivel SAN, pero todos esos los pueden encontrar en la red en Google.

Si alguien conoce algún método diferente puede agregarlo a los comentarios…

Saludos.

About these ads
  1. #1 by Paula on 13 July, 2009 - 21:08

    Me llamó mucho la atención el uso de rman (duplicate)
    Y bueno, abusando de su nobleza … quizá pueda escribir respecto a oas/portal y/o data guard .
    Saludos

  2. #2 by carlos on 20 September, 2009 - 17:46

    Esta bueno el articulo. solo considero que el titulo no es el adecuado.

    deberia ser Formas de migrar/copiar una base de datos a otro servidor.

    dado que no se esplica realmente como hacer la migracion. solo se esplica las formas que se pueden utilizar para hacer la migracion.

    saludos.

  3. #3 by delfinonunez on 29 September, 2009 - 15:13

    Es cierto Carlos, no digo exactamente “como” hacer la migración…

    Saludos, gracias por pasar por el blog.

  4. #4 by delfinonunez on 29 September, 2009 - 15:15

    Paula,
    Desgraciadamente no tengo experiencia con esas herramientas asi que no podria escribir al respecto… :(

  5. #5 by Cesar on 5 November, 2009 - 15:33

    Me parece una perdedera de tiempo leer una “guia” como estas. Lo mismo dice wikipedia. Esperaba indicaciones PUNTUALES de como hacer una migracion. Las generalidades se encuentran en cualquier lado.

    Esperaba mas de ti…

  6. #6 by delfinonunez on 5 November, 2009 - 20:44

    Hola Cesar,
    Aquí están todas las respuestas a todas tus preguntas puntuales: tahiti.oracle.com

    No esperes por mi, como puedes ver yo publico muy poco, no tan seguido…si quieres una respuesta rápida y puntual puedes ir a forums.oracle.com, ahí hay muchos voluntarios que pueden ayudarte.

    Saludos

  7. #7 by edgar on 8 March, 2012 - 21:39

    Saludos :

    creo que es relativo , yo por lo menos necesitaba saber cuales opciones tengo para migrar !!! y fijate me sirvio la poca informacion que colocaste ! teniendo claro cuales son los caminos pues no queda otra que armar la propuesta , ofrecerlo y dependiendo de lo que aprueben los BOSS !! es que se procede armar el plan de accion a seguir !!

    Gracias …..

  8. #8 by Jaime on 28 March, 2012 - 13:33

    Cordial Saludo

    Tengo una BD en Oracle 10G de mas de 6GB, la copia de seguridad se genera con exp/imp, pero el script con imp se demora 3 horas, si le preguntara cual de las opciones que explicaste es la mas rapida? buscando que la migracion se me demore menos tiempo.

    Gracias

  9. #9 by delfinonunez on 28 March, 2012 - 14:07

    Hola Jaime,
    Sin conocer los detalles de tu export/import y de tu ambiente es un poco dificil decir. 6GB no es una base de datos grande y 3hrs si parece demasiado, de nuevo, tal vez se deba al hardware (CPU/memoria/discos) asignados a la base de datos.

    Pero algunas recomendaciones al hacer el import:
    1-Remueve el archiving en la base de datos donde estas haciendo el import. Si se puede.
    2-No importes los indices, esto ayudara a importar los datos mas rapido y una vez terminado el import tu puedes crear los indices.
    parametros que puedes usar para esto: IGNORE=Y INDEXES=N INDEXFILE=misindixes.sql
    despues del import ejecutas misindice.sql para recrear los indices.
    http://docs.oracle.com/cd/B19306_01/server.102/b14215/exp_imp.htm#i1021478

    3- Este articulo es un poco viejito y toma en cuenta exp/imp, pero si estas usando Oracle 10G tal vez la mejor idea seria utilizar DATAPUMP para exportar e importar. Data pump es muchisimo mas rapido que el viejo exp/imp ademas puedes hacer la importacion con procesos paralelos (necesitas las version Enterprise Edition) lo cual lo hace muchisimo mas rapido.
    Yo he hecho exportaciones de 100GB con 4 procesos en paralelo en 5 minutos.

    http://docs.oracle.com/cd/B19306_01/server.102/b14215/dp_overview.htm#SUTIL100

    La opcion de RMAN duplicate o un backup/restore tambien puede ser otra manera debido a que tu base de datos no es muy grande, pero estas opciones van a reemplazar TODA la base de datos no nada mas un usuario en especificio como el exp/imp.

    Espero que estas ideas te sirvan.

    Saludos

  10. #10 by Jaime on 11 April, 2012 - 22:29

    Cordial Saludo

    En primer lugar gracias por contestar mi pregunta la vez anterior con tanta prontitud, hoy vuelvo a escribirle para decirle que ejecute el viejo imp, creando los indices despues de la importaciòn y trabajando con impdp (no pude utilizar parallel, porque la version es oracle standard), y la verdad los tiempos a mi no me mejoraron mucho, es mas los tiempos en ambos comandos son muy parecidos, 2 horas 20 min aproximadamente. Las exportaciones las hice de la siguiente forma:

    con IMP:

    IMP CUNOEEADMON/****@cunoee file=unoeeadmon.dmp log=unoeeadmon.log fromuser=UNOEEADMON touser=CUNOEEADMON ignore=y indexes=n indexfile=indices.sql
    IMP CUNOEEADMON/****@cunoee file=unoeeadmon.dmp log=unoeeadmon.log fromuser=UNOEEADMON touser=CUNOEEADMON indexes=n
    SQLPLUS CUNOEEADMON/****@cunoee @indices.sql

    con IMPDP:

    impdp CUNOEEADMON/****@cunoee DIRECTORY=cbackup_dir SCHEMAS=UNOEEADMON DUMPFILE=CUNOEEADMON.dmp LOGFILE=CUNOEEADMONBDEXP.log REMAP_SCHEMA=UNOEEADMON:CUNOEEADMON

    El hardware es:
    Dell PowerEdge r710
    Procesador: Intel Xeon X5560 CPU 2.8GHz
    Memoria: 8GB (4x2GB), 1066MHz Dual Ranked RDIMMs
    Disco: 500GB 7.2K RPM Near Line SAS 3.5in Hot Plug Hard Drive (341-8721)

    Soy nuevo en Oracle, podria darme otro consejo?
    Gracias

  11. #11 by delfinonunez on 13 April, 2012 - 03:28

    Hola Jaime,
    Al parecer el tiempo se redujo 40 minutos, es bueno. Debido a que no puedes hacer procesos paralelos por la versión que tienes es difícil de hacer el import mas rápido ya que la importación es serial.

    Pensé que seria mejor crear un post al respecto…ahi puedes encontrar unos ejemplos de como reducir un poco el tiempo.
    http://delfinonunez.wordpress.com/2012/04/13/como-hacer-mas-rapida-la-importacion-de-datos/

    Voy a crear otro post sobre como hacer backup/restore y como transportar tablespaces…tal vez eso ayude un poco a reducir el tiempo.

    Saludos.

  1. Como migrar/copiar una base de datos a otro servidor. - DbRunas
  2. Como hacer mas rapida la importacion de datos. « Delfino en la Güeb

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: