miércoles, 31 de marzo de 2010

Como copiar/clonar de forma rápida un base de datos?

La tarea de clonación de de una base de datos es algo bastante frecuente para un DBA ya que muchas veces es necesario tener ambientes de desarrollo o testeo actualizados con los datos que tenemos en ambientes productivos. Por lo tanto y al ser algo frecuente sería bueno contar con un procedimiento rápido y fácil para llevarlo a cabo.

Para realizar dicho procedimiento vamos a realizar una serie de pasos que detallo a continuación:

1- En nuestra base origen (a partir de ahora PROD) nos conectamos al SQL*Plus y ejecutamos:

SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;

Con esta sentencia obtenemos la sintaxis para realizar el “CREATE CONTROLFILE” (este archivo lo podemos encontrar dentro del directorio de trace, user_dump_dest). El archivo cuenta con la siguiente forma:

STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "PROD" NORESETLOGS
NOARCHIVELOG
MAXLOGFILES 12
MAXLOGMEMBERS 2
MAXDATAFILES 280
MAXINSTANCES 1
MAXLOGHISTORY 120
LOGFILE
GROUP 1 ('/u01/oradata/PROD/log1a.dbf',
'/u01/oradata/PROD/log1b.dbf') SIZE 50M,
GROUP 2 ('/u01/oradata/PROD/log2a.dbf',
'/u04/oradata/PROD/log2b.dbf') SIZE 50M
DATAFILE
'/u01/oradata/PROD/system01.dbf',
'/u01/oradata/PROD/prueba.dbf'
;
# Recovery is required if any of the datafiles are restored
# backups, or if the last shutdown was not normal or immediate.
RECOVER DATABASE
# Database can now be opened normally.
ALTER DATABASE OPEN;


2- Realizamos un shutdown en la base PROD

SQL> SHUTDOWN IMMEDIATE;

3- Ahora es momento de copiar todos los ‘data files’ y ‘log files’ al nuevo server o a la nueva ubicación. Si cambiamos el nombre de los ‘data files’ debemos realizar también los cambios en el controlfile. A modo de ejemplo supongamos que tenemos todos los ‘data files’ dentro de /u01/oradata/PROD/ y los vamos a llevar al servidor TESTER en la ubicación /u01/oradata/TEST/

rcp /u01/oradata/PROD/* TESTER:/u01/oradata/TEST

4- Copiar el archivo que obtuvimos en el punto 1 (de ahora en adelante lo llamaremos clona.sql) y modificar la siguiente línea

CREATE CONTROLFILE REUSE DATABASE "PROD" NORESETLOGS

Por la siguiente línea

CREATE CONTROLFILE SET DATABASE "TEST" RESETLOGS

5- Quitar las siguientes líneas de clona.sql:

- RECOVER DATABASE

- ALTER DATABASE OPEN


6- Siguiendo con los cambios en clona.sql, es el turno de modificar el directorio de los ‘data files’ y ‘log files’, a modo de ejemplo:

'/u01/oradata/PROD/system01.dbf'
'/u01/oradata/PROD/prueba.dbf'


Por las siguientes línea

'/u01/oradata/TEST/system01.dbf'
'/u01/oradata/TEST/prueba.dbf'


7- En este paso podríamos crear los directorios necesarios para los ´dump´ de Oracle, a modo de ejemplo:

TEST@TESTER ] cd $ORACLE_BASE/admin
TEST@TESTER ] mkdir TEST
TEST@TESTER ] cd TEST
TEST@TESTER ] mkdir bdump
TEST@TESTER ] mkdir cdump
TEST@TESTER ] mkdir udump
TEST@TESTER ] mkdir pfile


8- Copiar el archivo de parámetro (pfile.ora), a modo de ejemplo

cd $ORACLE_BASE/admin/PROD/pfile/
rcp *.ora TESTER:/u01/oracle/admin/TEST/pfile


9- Corremos desde el sqlplus en TESTER el archivo clona.sql

SQL> @db_create_controlfile.sql

10- Luego deberíamos abrir la base de datos.

Espero que les haya servido

Saludos!
Gondalf

No hay comentarios:

Publicar un comentario