Está en la página 1de 10

ADMINISTRACIN AVANZADA EN ORACLE 11G.

CLONACIN DE UNA BASE DE DATOS ORACLE 11G A PARTIR DE UNA COPIA DE RMAN.
Versin 1.0

FERMIN MAYOR GARCA INGENIERO EN INFORMTICA.

FERMN MAYOR GARCA

HISTORIAL DE CAMBIOS RESUMEN DE CAMBIOS PRODUCIDOS 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.

FERMN MAYOR GARCA

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

3 10:17 . 3 10:04 .. 3 10:17 backupBOLSA_htnf4hhu_1 3 10:17 backupBOLSA_hunf4hmo_1 3 10:17 backupBOLSA_hvnf4hn3_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

Tambin se obtiene al conectarnos a RMAN:

[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.

connected to target database: BOLSA (DBID=2954155647)

FERMN MAYOR GARCA

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:

[oracle@mortadelo /BOLSA/backup]: strings backupBOLSA_htnf4hhu_1_1 | grep MAXVALUE,

Este comando acabar dando una salida tal que as:


MAXVALUE, MAXVALUE MAXVALUE, MAXVALUE, MAXVALUE, MAXVALUE 2954155647, MAXVALUE, 2954155647, MAXVALUE, 2954155647, MAXVALUE, 2954155647, MAXVALUE, 2954155647, MAXVALUE,

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

FERMN MAYOR GARCA

Database Buffers Redo Buffers RMAN>

67108864 bytes 5529600 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

Ya podemos recuperar el spfile de la instancia:


RMAN> restore spfile from '/BOLSA/backup/backupBOLSA_hunf4hmo_1_1'; Starting restore at 03/07/12 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=115 device type=DISK channel ORA_DISK_1: restoring spfile from AUTOBACKUP /BOLSA/backup/backupBOLSA_hunf4hmo_1_1 channel ORA_DISK_1: SPFILE restore from AUTOBACKUP complete Finished restore at 03/07/12

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

FERMN MAYOR GARCA

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.

Una vez modificado, generamos el nuevo spfile a partir del pfile:


SQL> create spfile from pfile='/BOLSA/backup/pfileBOLSA.ora'; File created.

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

Restauramos los ficheros de control:


RMAN> restore controlfile from '/BOLSA/backup/backupBOLSA_hunf4hmo_1_1'; Starting restore at 03/07/12 using channel ORA_DISK_1 channel ORA_DISK_1: restoring control file channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 output file name=/BOLSA/oractl/control01.ctl output file name=/BOLSA/oractl/control02.ctl output file name=/BOLSA/oractl/control03.ctl Finished restore at 03/07/12

Y, desde SQLPLUS montamos la base de datos con startup mount:


SQL> startup mount; ORACLE instance started. Total System Global Area 1653518336 bytes Fixed Size 2138744 bytes Variable Size 1174408584 bytes Database Buffers 469762048 bytes Redo Buffers 7208960 bytes Database mounted.

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';

FERMN MAYOR GARCA

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.

Y generamos el script para restaurar en la nueva ubicacin.


[oracle@mortadelo /orasw/app/oracle]: cat restoreBOLSA.rm run { set set set set set set newname newname newname newname newname newname for for for for for for datafile datafile datafile datafile datafile datafile 1 2 3 4 5 6 to to to to to to '/BOLSA/oradat/system01.dbf'; '/BOLSA/oradat/sysaux01.dbf'; '/BOLSA/orarbs/undotbs01.dbf'; '/BOLSA/oradat/users01.dbf'; '/BOLSA/oradat/bolsa_01.dbf'; '/BOLSA/oraind/bolsai_01.dbf';

restore database; switch datafile all; }

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 drop logfile group 1; Database altered.

FERMN MAYOR GARCA

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.

Ahora s tenemos en su ubicacin correcta los ficheros de redolog:


SQL> select group#,member from v$logfile; GROUP# ---------3 2 1 MEMBER ---------------------------------------/BOLSA/orardl/redo03.log /BOLSA/orardl/redo02.log /BOLSA/orardl/redo01.log

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

FERMN MAYOR GARCA

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

Ya podemos abrir la base de datos con alter database open resetlogs:


SQL> alter database open resetlogs; Database altered. SQL> select status from v$instance; STATUS -----------OPEN

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

Vemos el nombre del tablespace temporal:


SQL> select * from v$tablespace where ts#=3; TS# NAME INC BIG FLA ENC ---------- ---------------------------------------- --- --- --- --3 TEMP NO NO YES

Aadimos un nuevo tempfile al tablespace temporal:


SQL> alter tablespace temp add tempfile '/BOLSA/oratemp/temp02.dbf' size 50M; Tablespace altered.

Ponemos offline el tempfile anterior y lo eliminamos:


SQL> alter database tempfile '/foradat/oradata/BOLSA/temp01.dbf' offline; Database altered. SQL> alter database tempfile '/foradat/oradata/BOLSA/temp01.dbf' drop; Database altered.

Y con esto ltimo, tenemos la instancia lista para trabajar.


SQL> select tablespace_name,status from dba_tablespaces; TABLESPACE_NAME -----------------------------SYSTEM SYSAUX UNDOTBS1 TEMP USERS BOLSA_DATA BOLSA_IND STATUS --------ONLINE ONLINE ONLINE ONLINE ONLINE ONLINE ONLINE

FERMN MAYOR GARCA

7 rows selected.

FERMN MAYOR GARCA

También podría gustarte