Clonar Base De Datos con RMAN
“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:
Luego, debemos ambientarnos:
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
Es necesario dejar la base de datos en modo ARCHIVELOG:
SQL> startup mount;
SQL> alter database archivelog;
SQL> startup;
Nos conectamos a RMAN:
Y ejecutamos el siguiente script:
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:
Modificamos el pfile generado, para este caso el pfile contiene los siguientes parámetros:
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:
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/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:
Paso 3
Modificar listener.ora y tnsnames.ora para la nueva base de datos:
# 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
Paso 4
Nos ambientarnos como CLONDB y conectamos vía sqlplus:
ORACLE_SID = [PRUEBADB] ? CLONDB
[oracle@nodo1 admin]$ sqlplus sys/password@CLONDB as sysdba
Luego creamos un SPFILE:
Luego levantamos la base de datos en modo nomount:
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_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:
Listo, base de datos duplicada!
Descargar Articulo Completo Formato PDF
Saludos!
Jimy Godoy.

Últimos comentarios