Inicio > RMAN > Clonar Base De Datos con RMAN

Clonar Base De Datos con RMAN

Martes, 9 de septiembre de 2008 Dejar un comentario Ir a comentarios

“Necesito una copia exacta de la base de datos”, “Quiero que clonen esta base de datos aquí, allá, y otro clon para comparar versiones y otro clon para…”. ¿Cuántas veces hemos escuchado esas solicitudes?, afortunadamente RMAN tiene la habilidad de clonar una base de datos, el requisito: un backup de la base de datos a clonar realizado con RMAN. A continuación realizaremos un ejemplo de clonación o duplicación de una base de datos.

Para este ejemplo utilizaremos una base de datos llamada PRUEBADB y la clonaremos con el nombre CLONDB.

Requisitos:

Debe existir al menos un backup de la base de datos a clonar, este backup debe ser realizado con RMAN. Si nuestra base de datos no se encuentra bajo un régimen de respaldos tendremos que realizar un backup de esta.
Para este ejemplo el ORACLE_HOME es /u01/app/oracle/

Paso 0:

Modificar el archivo /etc/oratab y agregar al final la siguiente línea:

CLONDB:/u01/app/oracle/db:N

Luego, debemos ambientarnos:

[oracle@nodo1 ~]$ . oraenv
ORACLE_SID = [oracle] ? PRUEBADB
[oracle@nodo1 ~]$

Si no existe un backup, se realizará uno a través de RMAN.
Se crea el directorio /u02/backup

mkdir -p /u02/backup

Es necesario dejar la base de datos en modo ARCHIVELOG:

SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> startup;

Nos conectamos a RMAN:

/u01/app/oracle/db/bin/rman target /

Y ejecutamos el siguiente script:

run {
ALLOCATE CHANNEL d1 DEVICE TYPE disk parms ‘ENV=(OB2BARLIST=PRUEBADB)’;
ALLOCATE CHANNEL d2 DEVICE TYPE disk parms ‘ENV=(OB2BARLIST=PRUEBADB)’;
ALLOCATE CHANNEL d3 DEVICE TYPE disk parms ‘ENV=(OB2BARLIST=PRUEBADB)’;
ALLOCATE CHANNEL d4 DEVICE TYPE disk parms ‘ENV=(OB2BARLIST=PRUEBADB)’;
backup incremental level 0
format ‘/u02/backup/backup<PRUEBADB_%s:%t:%p>.dbf’
database;
backup
format ‘/u02/backup/backup<PRUEBADB_%s:%t:%p>.alf’
archivelog all;
backup
format ‘/u02/backup/backup<PRUEBADB_%s:%t:%p>.ctf’
current controlfile;
}

Paso 1:

Creamos un pfile para extraer los parámetros de inicialización de la base de datos PRUEBADB:

SQL> create pfile=’/u01/app/oracle/db/dbs/initCLONDB.ora’ from spfile;

Modificamos el pfile generado, para este caso el pfile contiene los siguientes parámetros:

[oracle@nodo1 dbs]$ cat /u01/app/oracle/db/dbs/initCLONDB.ora
PRUEBADB.__db_cache_size=188743680
PRUEBADB.__java_pool_size=4194304
PRUEBADB.__large_pool_size=4194304
PRUEBADB.__shared_pool_size=79691776
PRUEBADB.__streams_pool_size=0
*.audit_file_dest=’/u01/app/oracle/admin/PRUEBADB/adump’
*.background_dump_dest=’/u01/app/oracle/admin/PRUEBADB/bdump’
*.compatible=’10.2.0.1.0′
*.control_files=’/u02/oradata/PRUEBADB/control01.ctl’, ‘/u02/oradata/PRUEBADB/control02.ctl’, ‘/u02/oradata/PRUEBADB/control03.ctl’
*.core_dump_dest=’/u01/app/oracle/admin/PRUEBADB/cdump’
*.db_block_size=8192
*.db_domain=”
*.db_file_multiblock_read_count=16
*.db_name=’PRUEBADB’
*.db_recovery_file_dest=’/u01/app/oracle/flash_recovery_area’
*.db_recovery_file_dest_size=2147483648
*.dispatchers=’(PROTOCOL=TCP) (SERVICE=PRUEBADBXDB)’
*.job_queue_processes=10
*.open_cursors=300
*.pga_aggregate_target=94371840
*.processes=150
*.remote_login_passwordfile=’EXCLUSIVE’
*.sga_target=285212672
*.undo_management=’AUTO’
*.undo_tablespace=’UNDOTBS1′
*.user_dump_dest=’/u01/app/oracle/admin/PRUEBADB/udump’

Modificamos el archivo initCLONDB.ora cambiando donde referencia PRUEBADB por CLONDB y agregar las siguientes líneas para indicar que los archivos acepten una estructura diferente a como vienen en el backup., luego el archivo initCLONDB.ora debe quedar de la siguiente forma:

[oracle@nodo1 CLONDB]$ cat /u01/app/oracle/db/dbs/initCLONDB.ora
CLONDB.__db_cache_size=188743680
CLONDB.__java_pool_size=4194304
CLONDB.__large_pool_size=4194304
CLONDB.__shared_pool_size=79691776
CLONDB.__streams_pool_size=0
*.audit_file_dest=’/u01/app/oracle/admin/CLONDB/adump’
*.background_dump_dest=’/u01/app/oracle/admin/CLONDB/bdump’
*.compatible=’10.2.0.1.0′
*.control_files=’/u02/oradata/CLONDB/control01.ctl’, ‘/u02/oradata/CLONDB/control02.ctl’, ‘/u02/oradata/CLONDB/control03.ctl’
*.core_dump_dest=’/u01/app/oracle/admin/CLONDB/cdump’
*.db_block_size=8192
*.db_domain=”
*.db_file_multiblock_read_count=16
*.db_name=’CLONDB’
*.db_recovery_file_dest=’/u01/app/oracle/flash_recovery_area’
*.db_recovery_file_dest_size=2147483648
*.dispatchers=’(PROTOCOL=TCP) (SERVICE=CLONDBXDB)’
*.job_queue_processes=10
*.open_cursors=300
*.pga_aggregate_target=94371840
*.processes=150
*.remote_login_passwordfile=’EXCLUSIVE’
*.sga_target=285212672
*.undo_management=’AUTO’
*.undo_tablespace=’UNDOTBS1′
*.user_dump_dest=’/u01/app/oracle/admin/CLONDB/udump’
DB_FILE_NAME_CONVERT=(/u02/oradata/PRUEBADB/,/u02/oradata/CLONDB/)
LOG_FILE_NAME_CONVERT=(/u02/oradata/PRUEBADB/,/u02/oradata/CLONDB/)

Seguido, es necesario crear los directorios que utilice el archivo de parámetros:

[oracle@nodo1 dbs]$ mkdir -p /u01/app/oracle/admin/CLONDB/adump
[oracle@nodo1 dbs]$ mkdir -p /u01/app/oracle/admin/CLONDB/bdump
[oracle@nodo1 dbs]$ mkdir -p /u02/oradata/CLONDB/
[oracle@nodo1 dbs]$ mkdir -p /u01/app/oracle/admin/CLONDB/cdump
[oracle@nodo1 dbs]$ mkdir -p /u01/app/oracle/admin/CLONDB/udump

Paso 2:

Se crea un archivo de password para la nueva base de datos CLONDB:

orapwd file=/u01/app/oracle/db/dbs/orapwCLONDB password=password entries=10;

Paso 3

Modificar listener.ora y tnsnames.ora para la nueva base de datos:

[oracle@nodo1 admin]$ cat listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/db/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/app/oracle/db)
(PROGRAM = extproc))
(SID_DESC =
(SID_NAME = PRUEBADB)
(ORACLE_HOME = /u01/app/oracle/db))
(SID_DESC =
(SID_NAME = CLONDB)
(ORACLE_HOME = /u01/app/oracle/db)))
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = nodo1)(PORT = 1521))))
[oracle@nodo1 admin]$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/db/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
PRUEBADB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = nodo1)(PORT = 1521)))
(CONNECT_DATA =
(SERVICE_NAME = PRUEBADB)))

CLONDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = nodo1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = CLONDB)))

EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)

Reload el listener

lsnrctl reload

Paso 4

Nos ambientarnos como CLONDB y conectamos vía sqlplus:

[oracle@nodo1 admin]$ . oraenv
ORACLE_SID = [PRUEBADB] ? CLONDB
[oracle@nodo1 admin]$ sqlplus sys/password@CLONDB as sysdba

Luego creamos un SPFILE:

SQL> CREATE SPFILE FROM PFILE=’/u01/app/oracle/db/dbs/initCLONDB.ora’;

Luego levantamos la base de datos en modo nomount:

SQL> startup nomount force;

Paso 5

Con la base de datos clon montada podemos conectarnos a RMAN, es necesario conectarse a la base de datos original (PRUEBADB) y a la clonada como AUXILIARY:

[oracle@nodo1 admin]$ . oraenv
ORACLE_SID = [CLONDB] ?
[oracle@nodo1 admin]$ /u01/app/oracle/db/bin/rman TARGET sys/password@PRUEBADB AUXILIARY sys/password@CLONDB
Recovery Manager: Release 10.2.0.1.0 – Production on Tue Sep 9 17:09:13 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
connected to target database: PRUEBADB (DBID=428612040)
connected to auxiliary database: CLONDB (not mounted)
RMAN>

Paso 6

En RMAN ejecutamos la siguiente instrucción para clonar la base de datos:

RMAN> DUPLICATE TARGET DATABASE TO CLONDB;

Listo, base de datos duplicada!

pdf Clonar Base De Datos con RMANDescargar Articulo Completo Formato PDF

Saludos!
Jimy Godoy.

share save 171 16 Clonar Base De Datos con RMAN
  1. J Arriaga
    Jueves, 11 de septiembre de 2008 a las 01:01 | #1

    Excelente manual, funciona!, que dolores de cabeza he evitado con los export.

  2. Lunes, 15 de septiembre de 2008 a las 14:54 | #2

    Buenas quisiera saber si la base de datos clonada se puede actualizar diariamente???

  3. Lunes, 15 de septiembre de 2008 a las 16:01 | #3

    La clonación de BD no pretende mantener una base de datos actualizada, duplica una base de datos al día y la hora que tú quieras. Si quieres actualizar la BD diariamente deberías clonarla todos los días o mejor aun armar una solución de base de datos standby, la base de datos stanby se puede abrir en modo read only para que pueda ser accedida por las aplicaciones o usuarios.

    Saludos!

  4. Martes, 16 de septiembre de 2008 a las 19:51 | #4

    OK y como puedo mantener mis tablas actualizadas??? diariamente para no hacer el procedimiento de clonacion diariamente.

  5. Miércoles, 17 de septiembre de 2008 a las 04:10 | #5

    Si no son muchas tablas las puedes mantener actualizadas con vistas materializadas, si quieres mantener actualizada toda la base mi recomendación es un dataguard.

  6. Miércoles, 17 de septiembre de 2008 a las 13:44 | #6

    OK y como es eso de las vistas materializadas tienes algun script o algun link donde me pueda guiar???? si fueras tan amable gracias.

  7. Miércoles, 17 de septiembre de 2008 a las 13:46 | #7

    Ahhhh me olvidaba tambien pense en eso del dataguard o un stand by pero en mi caso tengo 2 sistemas operativos diferentes, la de prod=AIX y la de contingencia=RH4, es por eso que no puedo hacer un dataguard.

  8. Miércoles, 17 de septiembre de 2008 a las 15:00 | #8

    Aquí un ejemplo donde la tabla countries es traída vía DBLINK desde otra base de datos:

    CREATE MATERIALIZED VIEW foreign_customers FOR UPDATE
    AS SELECT * FROM sh.customers@remote cu
    WHERE EXISTS
    (SELECT * FROM sh.countries@remote co
    WHERE co.country_id = cu.country_id);

    Más sobre vistas materializadas en http://igor.gold.ac.uk/oracle/9i/server.920/a96540/statements_63a.htm.

  9. Miércoles, 17 de septiembre de 2008 a las 13:37 | #9

    OK y en caso tuviera muchas tablas que me recomendarias hacer en mi caso???

  10. Miércoles, 17 de septiembre de 2008 a las 13:39 | #10

    OK pero si tuviera gran cantidad de tablas que me recomendarias en mi caso???

  11. Jueves, 18 de septiembre de 2008 a las 09:43 | #11

    OK y si tendria varias tablas como podria actualizar mi base.

  12. Martes, 21 de abril de 2009 a las 05:29 | #12

    Joé, que pesao. ¿Has probado con un curso de Oracle?

  13. Maikol
    Miércoles, 15 de julio de 2009 a las 23:07 | #13

    Hola amigo un excelente aporte tu pagina muy bueno, estoy recien comenzando con Oracle y me parecio muy interesante me gustaria tener mas informacion sobre lo basico de Oracle actualmente estoy con un proyecto en la universidad de instalar un servidorde Base de datos Oracle Server 10g R2 y ahun no puedo encontrar una guia de instalación una ultima consulta como pueo crear un respaldo de la base de datos 10g en modo NOARCHIVELOG? bueno compañero gracias por el material.
    si tienes algun material que me puedas ayudar te dejo el mail m_fuentesmasnava@hotmail.com
    saludos bye!!

  14. Viernes, 17 de julio de 2009 a las 23:37 | #14

    Maikol :

    Hola amigo un excelente aporte tu pagina muy bueno, estoy recien comenzando con Oracle y me parecio muy interesante me gustaria tener mas informacion sobre lo basico de Oracle actualmente estoy con un proyecto en la universidad de instalar un servidorde Base de datos Oracle Server 10g R2 y ahun no puedo encontrar una guia de instalación una ultima consulta como pueo crear un respaldo de la base de datos 10g en modo NOARCHIVELOG? bueno compañero gracias por el material.
    si tienes algun material que me puedas ayudar te dejo el mail m_fuentesmasnava@hotmail.com
    saludos bye!!

    Documentaciòn sobre instalaciòn de productos Oracle en tahiti.oracle.com.

    Una base de datos que no esta en modo archivelog se puede respaldar con export: EXP o EXPDP. Màs informaciòn en:

    http://wiki.oracle.com/page/Data+Pump+Export+(expdp)+and+Data+Pump+Import(impdp)

    http://wiki.oracle.com/page/Oracle+export+and+import+

    Saludos!

  15. Domingo, 26 de julio de 2009 a las 07:14 | #15

    @JAHEDSOn

    Estimado,

    Dale una mirada en la documentacion Oracle en Oracle Tahiti en el topico llamado “Oracle Streams”, lo otro te recomendaria echarle un ojo en ciertas notas en “My Oracle Support” ex-Metalink ;)

    Un gran saludo,

    Francisco Munoz Alvarez

  16. Roger Cortes
    Miércoles, 27 de octubre de 2010 a las 11:30 | #16

    Excelente manual,clonaba la base de datos con respaldos en frio pero con Rman y este manual me quedo igual o mejor.
    Muchas gracias.

  1. Sin trackbacks aún.