Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Clonacion de Bases de Datos-Oracle 11g A Partir de Rman
Clonacion de Bases de Datos-Oracle 11g A Partir de Rman
CLONACIN DE UNA BASE DE DATOS ORACLE 11G A PARTIR DE UNA COPIA DE RMAN.
Versin 1.0
NOMBRE DEL FICHERO CLONACION DE BASES DE DATOS ORACLE 11G A PARTIR DE RMAN.odt
VERSIN
FECHA 03/07/12
CONTROL DE DIFUSIN AUTOR/ES : Fermn Mayor Garca. DISTRIBUCION: Fermn Mayor Garca. Agencia Sanitaria Hospital de Poniente.
1.-INTRODUCCIN. El siguiente documento tiene como objetivo realizar una clonacin completa a partir de una copia de la base de datos realizada con RMAN. Por tanto, para realizar la copia, o la restauracin incompleta en otro servidor diferente, necesitamos solamente los ficheros que ha generado RMAN en el backup completo. Simulamos una catstrofe completa en la que slo tenemos estos ficheros guardados en cinta. Vamos a usar como base de datos la de la BOLSA y cuya instancia se llama as (BOLSA). 2.- SITUACIN INICIAL. Slo tenemos los siguientes ficheros obtenidos de la copia en cinta de la noche anterior y que hemos pasado al servidor donde vamos a hacer la copia:
[oracle@mortadelo /BOLSA/backup]: ls -la total 6696304 drwxr-xr-x 2 oracle oinstall 256 Jul drwxr-xr-x 4 oracle oinstall 256 Jul -rw-r----1 oracle oinstall 3417841664 Jul _1 -rw-r----1 oracle oinstall 8290304 Jul _1 -rw-r----1 oracle oinstall 2371584 Jul _1
Como vemos, tenemos tres ficheros. Estos ficheros corresponden a la copia de los dbf's en s (el de mayor tamao), a la copia del spfile y del fichero de control (el siguiente) y al fichero de log generado tras acabar la copia. Este backup se ha realizado con el siguiente comando de rman:
[oracle@filemon /usr/local/bin/copias]: cat backupfull.rm run { allocate channel oem_backup_disk1 type disk format '/forabackup/BOLSA/backupBOLSA_%U'; backup database include current controlfile plus archivelog delete all input tag 'Copia Diaria.'; delete obsolete; release channel oem_backup_disk1; }
Para poder realizar la recuperacin es importantsimo que tengamos el DBID de la base de datos. Sin l, no podemos hacer nada. Este DBID se puede obtener de las siguientes formas. (recomiendo tenerlo siempre anotado antes de que se produzca algn problema): Si tenemos la base de datos abierta antes de que se produzca un problema se puede obtener mediante la sentencia:
SQL> select dbid from v$database; DBID ---------2954155647
[oracle@filemon /usr/local/bin/copias]: rman target=/ Recovery Manager: Release 11.1.0.6.0 - Production on Mar Jul 3 11:17:22 2012 Copyright (c) 1982, 2007, Oracle. All rights reserved.
Si no tenemos el DBID tras producirse el desastre, podemos obtenerlo en Linux y en AIX aplicando el comando strings sobre uno de los ficheros de RMAN que contenga datafiles, como vemos a continuacin:
Otro paso que hay que hacer antes de nada es generar un fichero de password para el usuario sys para la nueva instancia. Sin este fichero, tampoco va a arrancar la instancia. El fichero de password debe estar en $ORACLE_HOME/dbs y debe tener el formato orapwSID (En nuestro caso BOLSA). Para generar el fichero Oracle11g dispone de la aplicacin orapwd que lo genera, en concreto:
[oracle@mortadelo /]: cd $ORACLE_HOME/dbs [oracle@mortadelo /orasw11g/app/oracle/product/11.1.0/db_2/dbs]: orapwd file=orapwBOLSA password=XXXXX
Este fichero genera un fichero de password llamado orapwBOLSA con la contrasea XXXXX para el usuario SYS. 3.-RECUPERACION. Bien, con el DBID y con los ficheros generados con RMAN podemos comenzar con la recuperacin de la base de datos. Lo primero que debemos recuperar es el SPFILE de la instancia. Para ello, lo primero que hay que hacer es levantar la instancia en modo nomount y sin spfile. Esto slo lo puede hacer RMAN que, al ver que no existe el fichero spfile, utiliza un fichero con parmetros genricos:
[oracle@mortadelo /BOLSA]: rman target=/ Recovery Manager: Release 11.1.0.6.0 - Production on Mar Jul 3 11:57:12 2012 Copyright (c) 1982, 2007, Oracle. All rights reserved.
connected to target database (not started) RMAN> startup nomount; startup failed: ORA-01078: failure in processing system parameters LRM-00109: could not open parameter file '/orasw11g/app/oracle/product/11.1.0/db _2/dbs/initBOLSABACKUP.ora' starting Oracle instance without parameter file for retrieval of spfile Oracle instance started Total System Global Area Fixed Size Variable Size 158662656 bytes 2136296 bytes 83887896 bytes
Vemos que el mismo RMAN nos indica que levanta la instancia sin spfile para poder recuperarlo. Vemos tambin que utiliza un tamao de memoria de unos 158M para la SGA. Una vez conectados, debemos indicarle a RMAN el DBID de la instancia a recuperar:
RMAN> set DBID 2954155647 executing command: SET DBID
Esto ha generado un fichero spfileBOLSA.ora en el directorio $ORACLE_HOME/dbs. Con la opcin TO lo podemos generar en el directorio que deseemos:
RMAN> restore spfile to '/BOLSA/backup/spfileBOLSABACKUP.bak' from '/BOLSA/backup/backupBOLSA_hunf4hmo_1_1'; Starting restore at 03/07/12 using channel ORA_DISK_1 channel ORA_DISK_1: restoring spfile from AUTOBACKUP /BOLSA/backup/backupBOLSA_h unf4hmo_1_1 channel ORA_DISK_1: SPFILE restore from AUTOBACKUP complete Finished restore at 03/07/12
Ya podemos generar un fichero pfile desde el spfile para poder modificar parmetros de inicializacin de la instancia:
[oracle@mortadelo /BOLSA]: sqlplus /nolog SQL*Plus: Release 11.1.0.6.0 - Production on Mar Jul 3 12:07:01 2012 Copyright (c) 1982, 2007, Oracle. All rights reserved.
SQL> conn sys as sysdba Enter password: Connected. SQL> create pfile='/BOLSA/backup/pfileBOLSABACKUP.ora' from spfile; File created. SQL> exit Disconnected from Oracle Database 11g Release 11.1.0.6.0 - 64bit Production [oracle@mortadelo /BOLSA/backup]: ls -la pfile* -rw-r--r-1 oracle oinstall 1167 Jul 3 12:07 pfileBOLSABACKUP.ora
Una vez generado el fichero pfile, para generar la nueva instancia de desarrollo, hay que tocar varios parmetros. Si el esquema de directorios fuera el mismo, no habra que hacer nada. En concreto, vamos a citar los siguientes:
*.control_files='/BOLSA/oractl/control01.ctl','/BOLSA/oractl/control02.ctl','/BOLSA/orac tl/control03.ctl' ; Nueva situacin de Controlfiles; *.log_archive_dest_1='LOCATION=/BOLSA/oraarch' ; Nueva situacin de los ficheros de log archivado.
Antes de arrancar la instancia con el nuevo spfile hay que generar los directorios de traza de la instancia en $ORACLE_BASE/admin/BOLSA:
[oracle@mortadelo [oracle@mortadelo [oracle@mortadelo [oracle@mortadelo [oracle@mortadelo [oracle@mortadelo [oracle@mortadelo /BOLSA/backup]: cd $ORACLE_BASE /orasw11g/app/oracle]: cd admin /orasw11g/app/oracle/admin]: mkdir BOLSA /orasw11g/app/oracle/admin]: cd BOLSA/ /orasw11g/app/oracle/admin/BOLSABACKUP]: mkdir adump /orasw11g/app/oracle/admin/BOLSABACKUP]: mkdir bdump /orasw11g/app/oracle/admin/BOLSABACKUP]: mkdir pfile
Ya podemos recuperar los ficheros de la base de datos e incluso, desde rman, ver los backupsets que tiene el fichero de control con list backupset. Sin embargo, como hemos restaurado los backupset en un directorio diferente al original, para que RMAN pueda utilizarlos debemos recatalogarlos. Esto se hace desde RMAN con catalog backuppiece Nombre_Fichero. Debemos recatalogar los tres backupset que hemos extraido de cinta. OJO! Esto slo sirve para Oracle 11g, en Oracle 9i hay que restaurar los backuppiece en su localizacin original, sino, no se puede realizar la restauracin.
RMAN> catalog backuppiece '/BOLSA/backup/backupBOLSA_htnf4hhu_1_1';
using target database control file instead of recovery catalog cataloged backup piece backup piece handle=/BOLSA/backup/backupBOLSA_htnf4hhu_1_1 RECID=572 STAMP=78773 7835 RMAN> catalog backuppiece '/BOLSA/backup/backupBOLSA_hunf4hmo_1_1'; cataloged backup piece backup piece handle=/BOLSA/backup/backupBOLSA_hunf4hmo_1_1 RECID=573 STAMP=78773 7951 RMAN> catalog backuppiece '/BOLSA/backup/backupBOLSA_hvnf4hn3_1_1'; cataloged backup piece backup piece handle=/BOLSA/backup/backupBOLSA_hvnf4hn3_1_1 RECID=574 STAMP=78773 8034
Una vez realizado, debemos poder ver los backupsets con list backup. Dado que estamos restaurando en una mquina diferente y vamos a restaurar los dbf's en directorios diferentes, antes de restaurar, tenemos que renombrar los dbf's con la nueva localizacin de estos. Vemos los dbf's que tenemos:
SQL> column name format a40; SQL> select file#,name from v$datafile; FILE# ---------1 2 3 4 5 6 NAME ---------------------------------------/foradat/oradata/BOLSA/system01.dbf /foradat/oradata/BOLSA/sysaux01.dbf /foradat/oradata/BOLSA/undotbs01.dbf /foradat/oradata/BOLSA/users01.dbf /foradat/oradata/BOLSA/bolsa_01.dbf /foraind/oradata/BOLSA/bolsai_01.dbf
6 rows selected.
Ejecutamos el script y genera todos los dbf's en su sitio. A continuacin, debemos renombrar los ficheros de redolog. Primero, vemos su localizacin original:
SQL> column member format a40 SQL> select group#,member from v$logfile; GROUP# ---------3 2 1 MEMBER ---------------------------------------/forardl/oradata/BOLSA/redo03.log /forardl/oradata/BOLSA/redo02.log /forardl/oradata/BOLSA/redo01.log
SQL> alter database add logfile group 1 '/BOLSA/orardl/redo01.log' size 50M; Database altered.
Hacemos lo mismo con todos menos con el que est activo pues al estar activo no podemos eliminarlo. Para cambiar la ubicacin vamos a usar alter database rename file, pero para poder usarlo tenemos que tener el fichero creado. Usamos uno de los ficheros de redolog generados en el paso anterior dado que para abrir la base de datos vamos a usar la opcin resetlogs:
[oracle@mortadelo /BOLSA/orardl]: ls redo01.log redo03.log [oracle@mortadelo /BOLSA/orardl]: cp redo01.log redo02.log SQL> alter database rename file '/forardl/oradata/BOLSA/redo02.log' to '/BOLSA/orardl/redo02.log'; Database altered.
Ya podemos hacer el recover de la base de datos. Hay que ver hasta qu secuencia vamos a restaurar. Para ello, desde rman hacemos list backup y vemos en el backupset del log archivado guardado en el backup su nmero de secuencia:
BS Key Size Device Type Elapsed Time Completion Time ------- ---------- ----------- ------------ --------------573 2.26M DISK 00:00:00 03/07/12 BP Key: 574 Status: AVAILABLE Compressed: NO Tag: COPIA DIARIA. Piece Name: /BOLSA/backup/backupBOLSA_hvnf4hn3_1_1 List Thrd ---1 of Archived Logs in backup set 573 Seq Low SCN Low Time Next SCN Next Time ------- ---------- -------- ---------- --------1208 43082580 03/07/12 43083591 03/07/12
Vemos que es 1208, por tanto, el recover hay que hacerlo hasta el nmero de secuencia 1209. El recover se hace con el siguiente script:
RMAN> run { 2> set until sequence 1209 thread 1; 3> recover database; 4> } executing command: SET until clause Starting recover at 04/07/12 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=170 device type=DISK starting media recovery channel ORA_DISK_1: starting archived log restore to default destination channel ORA_DISK_1: restoring archived log archived log thread=1 sequence=1208 channel ORA_DISK_1: reading from backup piece /BOLSA/backup/backupBOLSA_hvnf4hn3 _1_1 channel ORA_DISK_1: piece handle=/BOLSA/backup/backupBOLSA_hvnf4hn3_1_1 tag=COPI
A DIARIA. channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 archived log file name=/BOLSA/oraarch1_1208_777384770.dbf thread=1 sequence=1208 media recovery complete, elapsed time: 00:00:05 Finished recover at 04/07/12
La base de datos est levantada y operativa. Slo faltara ubicar correctamente el tablespace temporal. Para ello, miramos los ficheros que son temporales:
SQL> column name format a40; SQL> select ts#,name from v$tempfile; TS# NAME ---------- ---------------------------------------3 /foradat/oradata/BOLSA/temp01.dbf
7 rows selected.