clonacion de bases de datos-oracle 11g a partir de rman

10
ADMINISTRACIÓN AVANZADA EN ORACLE 11G. CLONACIÓN DE UNA BASE DE DATOS ORACLE 11G A PARTIR DE UNA COPIA DE RMAN. Versión 1.0 FERMIN MAYOR GARCÍA INGENIERO EN INFORMÁTICA. FERMÍN MAYOR GARCÍA

Upload: somaten

Post on 28-Apr-2015

355 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Clonacion de Bases de Datos-Oracle 11g a Partir de Rman

ADMINISTRACIÓN AVANZADA EN ORACLE 11G.

CLONACIÓN DE UNA BASE DE DATOS ORACLE 11G A PARTIR DE UNA COPIA DE RMAN.

Versión 1.0

FERMIN MAYOR GARCÍAINGENIERO EN INFORMÁTICA.

FERMÍN MAYOR GARCÍA

Page 2: Clonacion de Bases de Datos-Oracle 11g a Partir de Rman

HISTORIAL DE CAMBIOS

NOMBRE DEL FICHERO VERSIÓNRESUMEN DE CAMBIOS

PRODUCIDOSFECHA

CLONACION DE BASES DEDATOS ORACLE 11G APARTIR DE RMAN.odt

Versión 1.0 03/07/12

CONTROL DE DIFUSIÓN

AUTOR/ES : Fermín Mayor García.DISTRIBUCION: Fermín Mayor García.Agencia Sanitaria Hospital de Poniente.

FERMÍN MAYOR GARCÍA

Page 3: Clonacion de Bases de Datos-Oracle 11g a Partir de Rman

1.-INTRODUCCIÓN.

El siguiente documento tiene como objetivo realizar una clonación completa a partir de una copia de la base de datos realizada con RMAN. Por tanto, para realizar la copia, o la restauración incompleta en otro servidor diferente, necesitamos solamente los ficheros que ha generado RMAN en el backup completo. Simulamos una catástrofe completa en la que sólo 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.- SITUACIÓN INICIAL.

Sólo 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 -latotal 6696304drwxr-xr-x 2 oracle oinstall 256 Jul 3 10:17 .drwxr-xr-x 4 oracle oinstall 256 Jul 3 10:04 ..-rw-r----- 1 oracle oinstall 3417841664 Jul 3 10:17 backupBOLSA_htnf4hhu_1_1-rw-r----- 1 oracle oinstall 8290304 Jul 3 10:17 backupBOLSA_hunf4hmo_1_1-rw-r----- 1 oracle oinstall 2371584 Jul 3 10:17 backupBOLSA_hvnf4hn3_1_1

Como vemos, tenemos tres ficheros. Estos ficheros corresponden a la copia de los dbf's en sí (el de mayor tamaño), 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.rmrun { 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 recuperación es importantísimo 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 algún 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

• También 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)

FERMÍN MAYOR GARCÍA

Page 4: Clonacion de Bases de Datos-Oracle 11g a Partir de Rman

• 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 continuación:

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

Este comando acabará dando una salida tal que así:MAXVALUE, MAXVALUEMAXVALUE, MAXVALUE,MAXVALUE, MAXVALUE2954155647, 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 aplicación 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 contraseña XXXXX para el usuario SYS.

3.-RECUPERACION.

Bien, con el DBID y con los ficheros generados con RMAN podemos comenzar con la recuperación 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 sólo lo puede hacer RMAN que, al ver que no existe el fichero spfile, utiliza un fichero con parámetros genéricos:[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 parametersLRM-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 158662656 bytes

Fixed Size 2136296 bytesVariable Size 83887896 bytes

FERMÍN MAYOR GARCÍA

Page 5: Clonacion de Bases de Datos-Oracle 11g a Partir de Rman

Database Buffers 67108864 bytesRedo Buffers 5529600 bytes

RMAN>

Vemos que el mismo RMAN nos indica que levanta la instancia sin spfile para poder recuperarlo. Vemos también que utiliza un tamaño 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/12using target database control file instead of recovery catalogallocated channel: ORA_DISK_1channel ORA_DISK_1: SID=115 device type=DISK

channel ORA_DISK_1: restoring spfile from AUTOBACKUP /BOLSA/backup/backupBOLSA_hunf4hmo_1_1channel ORA_DISK_1: SPFILE restore from AUTOBACKUP completeFinished restore at 03/07/12

Esto ha generado un fichero spfileBOLSA.ora en el directorio $ORACLE_HOME/dbs. Con la opción 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/12using channel ORA_DISK_1

channel ORA_DISK_1: restoring spfile from AUTOBACKUP /BOLSA/backup/backupBOLSA_hunf4hmo_1_1channel ORA_DISK_1: SPFILE restore from AUTOBACKUP completeFinished restore at 03/07/12

Ya podemos generar un fichero pfile desde el spfile para poder modificar parámetros de inicialización 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 sysdbaEnter password:Connected.SQL> create pfile='/BOLSA/backup/pfileBOLSABACKUP.ora' from spfile;

File created.

SQL> exitDisconnected 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

FERMÍN MAYOR GARCÍA

Page 6: Clonacion de Bases de Datos-Oracle 11g a Partir de Rman

Una vez generado el fichero pfile, para generar la nueva instancia de desarrollo, hay que tocar varios parámetros. Si el esquema de directorios fuera el mismo, no habría que hacer nada. En concreto, vamos a citar los siguientes:*.control_files='/BOLSA/oractl/control01.ctl','/BOLSA/oractl/control02.ctl','/BOLSA/oractl/control03.ctl' ; Nueva situación de Controlfiles;

*.log_archive_dest_1='LOCATION=/BOLSA/oraarch' ; Nueva situación 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 /BOLSA/backup]: cd $ORACLE_BASE[oracle@mortadelo /orasw11g/app/oracle]: cd admin[oracle@mortadelo /orasw11g/app/oracle/admin]: mkdir BOLSA[oracle@mortadelo /orasw11g/app/oracle/admin]: cd BOLSA/[oracle@mortadelo /orasw11g/app/oracle/admin/BOLSABACKUP]: mkdir adump[oracle@mortadelo /orasw11g/app/oracle/admin/BOLSABACKUP]: mkdir bdump[oracle@mortadelo /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/12using channel ORA_DISK_1

channel ORA_DISK_1: restoring control filechannel ORA_DISK_1: restore complete, elapsed time: 00:00:01output file name=/BOLSA/oractl/control01.ctloutput file name=/BOLSA/oractl/control02.ctloutput file name=/BOLSA/oractl/control03.ctlFinished 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 bytesFixed Size 2138744 bytesVariable Size 1174408584 bytesDatabase Buffers 469762048 bytesRedo Buffers 7208960 bytesDatabase 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 sólo sirve para Oracle 11g, en Oracle 9i hay que restaurar los backuppiece en su localización original, sino, no se puede realizar la restauración.

RMAN> catalog backuppiece '/BOLSA/backup/backupBOLSA_htnf4hhu_1_1';

FERMÍN MAYOR GARCÍA

Page 7: Clonacion de Bases de Datos-Oracle 11g a Partir de Rman

using target database control file instead of recovery catalogcataloged backup piecebackup piece handle=/BOLSA/backup/backupBOLSA_htnf4hhu_1_1 RECID=572 STAMP=787737835

RMAN> catalog backuppiece '/BOLSA/backup/backupBOLSA_hunf4hmo_1_1';

cataloged backup piecebackup piece handle=/BOLSA/backup/backupBOLSA_hunf4hmo_1_1 RECID=573 STAMP=787737951

RMAN> catalog backuppiece '/BOLSA/backup/backupBOLSA_hvnf4hn3_1_1';

cataloged backup piecebackup piece handle=/BOLSA/backup/backupBOLSA_hvnf4hn3_1_1 RECID=574 STAMP=787738034

Una vez realizado, debemos poder ver los backupsets con list backup. Dado que estamos restaurando en una máquina diferente y vamos a restaurar los dbf's en directorios diferentes, antes de restaurar, tenemos que renombrar los dbf's con la nueva localización de estos. Vemos los dbf's que tenemos:

SQL> column name format a40;SQL> select file#,name from v$datafile;

FILE# NAME---------- ---------------------------------------- 1 /foradat/oradata/BOLSA/system01.dbf 2 /foradat/oradata/BOLSA/sysaux01.dbf 3 /foradat/oradata/BOLSA/undotbs01.dbf 4 /foradat/oradata/BOLSA/users01.dbf 5 /foradat/oradata/BOLSA/bolsa_01.dbf 6 /foraind/oradata/BOLSA/bolsai_01.dbf

6 rows selected.

Y generamos el script para restaurar en la nueva ubicación.

[oracle@mortadelo /orasw/app/oracle]: cat restoreBOLSA.rmrun {

set newname for datafile 1 to '/BOLSA/oradat/system01.dbf';set newname for datafile 2 to '/BOLSA/oradat/sysaux01.dbf';set newname for datafile 3 to '/BOLSA/orarbs/undotbs01.dbf';set newname for datafile 4 to '/BOLSA/oradat/users01.dbf';set newname for datafile 5 to '/BOLSA/oradat/bolsa_01.dbf';set newname for datafile 6 to '/BOLSA/oraind/bolsai_01.dbf';

restore database;switch datafile all;}

Ejecutamos el script y genera todos los dbf's en su sitio. A continuación, debemos renombrar los ficheros de redolog. Primero, vemos su localización original:SQL> column member format a40SQL> select group#,member from v$logfile;

GROUP# MEMBER---------- ---------------------------------------- 3 /forardl/oradata/BOLSA/redo03.log 2 /forardl/oradata/BOLSA/redo02.log 1 /forardl/oradata/BOLSA/redo01.log

SQL> alter database drop logfile group 1;

Database altered.

FERMÍN MAYOR GARCÍA

Page 8: Clonacion de Bases de Datos-Oracle 11g a Partir de Rman

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 ubicación 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 opción resetlogs:[oracle@mortadelo /BOLSA/orardl]: lsredo01.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 ubicación correcta los ficheros de redolog:

SQL> select group#,member from v$logfile;

GROUP# MEMBER---------- ---------------------------------------- 3 /BOLSA/orardl/redo03.log 2 /BOLSA/orardl/redo02.log 1 /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 número 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 of Archived Logs in backup set 573 Thrd Seq Low SCN Low Time Next SCN Next Time ---- ------- ---------- -------- ---------- --------- 1 1208 43082580 03/07/12 43083591 03/07/12

Vemos que es 1208, por tanto, el recover hay que hacerlo hasta el número 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/12allocated channel: ORA_DISK_1channel ORA_DISK_1: SID=170 device type=DISK

starting media recovery

channel ORA_DISK_1: starting archived log restore to default destinationchannel ORA_DISK_1: restoring archived logarchived log thread=1 sequence=1208channel ORA_DISK_1: reading from backup piece /BOLSA/backup/backupBOLSA_hvnf4hn3_1_1channel ORA_DISK_1: piece handle=/BOLSA/backup/backupBOLSA_hvnf4hn3_1_1 tag=COPI

FERMÍN MAYOR GARCÍA

Page 9: Clonacion de Bases de Datos-Oracle 11g a Partir de Rman

A DIARIA.channel ORA_DISK_1: restored backup piece 1channel ORA_DISK_1: restore complete, elapsed time: 00:00:01archived log file name=/BOLSA/oraarch1_1208_777384770.dbf thread=1 sequence=1208media recovery complete, elapsed time: 00:00:05Finished 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. Sólo faltaría 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

Añadimos 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 STATUS------------------------------ ---------SYSTEM ONLINESYSAUX ONLINEUNDOTBS1 ONLINETEMP ONLINEUSERS ONLINEBOLSA_DATA ONLINEBOLSA_IND ONLINE

FERMÍN MAYOR GARCÍA

Page 10: Clonacion de Bases de Datos-Oracle 11g a Partir de Rman

7 rows selected.

FERMÍN MAYOR GARCÍA