En la entrada anterior vimos como recuperar un spfile desde el backup con rman.
Desgraciadamente no siempre todo funciona a la primera, y , como Murphy nunca falla, el error inusual siempre tiene que tocarnos a nosotros. La teoría nos dice que para recuperar un spfile o un controlfile de rman solamente hay que hacer
RMAN> restore spfile from autobackup;
Pero que ocurre si no funciona?
La recuperacion tanto del controlfile como del spfile puede complicarse si recibimos un RMAN-06172 . La salida del comando será algo similar a esto :
Starting restore at 28/09/12
allocatedchannel: ORA_DISK_1
channel ORA_DISK_1: sid=85 instance=pruebas devtype=DISK
recovery area destination: +DG_FRA
database name (ordatabaseuniquename) used for search: PRUEBAS
channel ORA_DISK_1: no autobackupsfound in the recovery area
channel ORA_DISK_1: looking for autobackup on day: 20120928
channel ORA_DISK_1: looking for autobackup on day: 20120927
channel ORA_DISK_1: looking for autobackup on day: 20120926
channel ORA_DISK_1: looking for autobackup on day: 20120925
channel ORA_DISK_1: looking for autobackup on day: 20120924
channel ORA_DISK_1: looking for autobackup on day: 20120923
channel ORA_DISK_1: looking for autobackup on day: 20120922
Channel ORA_DISK_1: no autobackup in 7 daysfound
RMAN-00571: =================================
RMAN-00569: == ERROR MESSAGE STACK FOLLOWS
RMAN-00571: ===================================
RMAN-03002: failure of restorecommand at 09/28/2012 11:40:37
RMAN-06172: no autobackup found or specified handle is not a valid copy or piece
Llegados a este punto lo primero que tenemos que comprobar es si reamente tenemos algún backup de nuestro spfile.
RMAN por defecto hace una copia de controlfile y spfile cada vez que se lleva a backup el tablespace system, así pues, si tenemos un backup válido en cinta de este tablespace deberemos de tener un backup del spfile. Para consultar donde está esta backup, nos conectaremos desde rman y ejecutaremos la consulta
RMAN >List backup;
Este comando nos volcará mucha información ordenada cronológicamente, con lo que nosotros tendremos que buscar en la parte inferior el registro del último día de backup donde esté el spfile.
El registro dirá algo como:
BS Key Type LV SizeDeviceTypeElapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
797503 Incr 0 5.44G SBT_TAPE 00:03:52 27/09/12
BP Key: 797556 Status: AVAILABLE Compressed: NO Tag: TAG20120926T210038
Handle: intranet_backup<pruebas_8084:795042038:1>.dbf Media:
List of Datafiles in backup set 797503
File LV TypeCkp SCN Ckp Time Name
---- -- ---- ---------- -------- ----
1 0 Incr 139540429 26/09/12 +DG_DAT/pruebas/datafile/system.257.713298945
2 0 Incr 139540429 26/09/12 +DG_DAT/pruebas/datafile/undotbs1.262.713298945
3 0 Incr 139540429 26/09/12 +DG_DAT/pruebas/datafile/sysaux.261.713298945
4 0 Incr 139540429 26/09/12 +DG_DAT/pruebas/datafile/undotbs2.264.713298947
5 0 Incr 139540429 26/09/12 +DG_DAT/pruebas/datafile/users.345.713298947
6 0 Incr 139540429 26/09/12 +DG_DAT/pruebas/datafile/pruebas.260.730901167
BS Key Type LV SizeDeviceTypeElapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
797504Incr 0 15.00M SBT_TAPE 00:00:06 27/09/12
BP Key: 797557 Status: AVAILABLE Compressed: NO Tag: TAG20120926T210038
Handle:pruebas_backup<pruebas_8085:795042273:1>.dbf Media:
Control File Included: Ckp SCN: 139541276 Ckp time: 27/09/12
SPFILE Included: Modification time: 27/09/12
Aquí podemos ver como el 27 del 9 hicimos backup del tablespace system en el backupset 797504 lo que provoca que el RMAN haga backup de el SPFILE en el backupset 797504 en un fichero que el software de backup tiene identificado como “pruebas_backup<pruebas_8085:795042273:1>.dbf”
Luego, si que tenemos respaldado el spfile.
¿Que hacemos ahora para recuperarlo?
Simplemente tendremos que ejecutar el comando de restauración indicando exactamente desde el fichero en el que queremos hacer la copia.
Vamos a rizar un poco mas el rizo y hagamos que la copia no esté ya en la FRA,sino que el contenido ya está en cinta. Lo primero que tendremos que hacer es localizar un canal a cinta, para ello lo más sencillo es buscar el script de backup y copiar los parámteros específicos de la línea del allocate channel .
En nuestro caso el resultado será :
allocate channel 'dev_0' type 'sbt_tape'
parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=pruebas,OB2BARLIST=pruebas_backup)';
Así pues, ya tenemos la línea que nos conectará con el software de backup, ahora tenemos que indicarle el nombre del fichero del cual queremos sacar el spfile, en nuestro caso hemos visto que era “pruebas_backup<pruebas_8085:795042273:1>.dbf” .
Con esto solamente nos queda hacer un bloque run de RMAN que nos recupere el spfile a una ubicación alternativa:
run {
allocate channel 'dev_0' type 'sbt_tape'
parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=pruebas,OB2BARLIST=pruebas_backup)';
restore spfile to '/tmp/spfile_restaurado_cinta.ora' from 'pruebas_backup<pruebas_8085:795042273:1>.dbf';
}
Nos conectaremos a nuestra base de datos target y catálogo y ejecutamos nuestro bloque run,con el resultado:
run {
allocate channel 'dev_0' type 'sbt_tape'
parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=pruebas,OB2BARLIST=pruebas_backup)';
restore spfile to '/tmp/spfile_restaurado_cinta.ora' from 'pruebas_backup<pruebas_8085:795042273:1>.dbf';
}
3>allocatechannel 'dev_0' type 'sbt_tape'
parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=pruebas,OB2BARLIST=pruebas_backup)';
4>restorespfileto '/tmp/spfile_restaurado_cinta.ora' from 'pruebas_backup<pruebas_8085:795042273:1>.dbf';
5> }
allocatedchannel: dev_0
channel dev_0: sid=147 instance=pruebas1 devtype=SBT_TAPE
channel dev_0: Data Protector A.06.11/PHSS_40470/PHSS_40471/DPSOL_00391/DPLNX_
Startingrestore at 28/09/12
channel dev_0: autobackupfound: pruebas_backup<pruebas_8085:795042273:1>.dbf
[Normal] From: OB2BAR_SBT_CHANNEL@server.local "pruebas" Time: 09/28/12 12:29:09
Starting OB2BAR Restore: server.local:pruebas_backup<pruebas_8085:795042273:1>.dbf "Oracle8"
[Normal] From: OB2BAR_SBT_CHANNEL@server.local "pruebas" Time: 09/28/12 12:29:09
Starting OB2BAR Restore: server.local:pruebas_backup<pruebas_8085:795042273:1>.dbf "Oracle8"
[Normal] From: OB2BAR_SBT_CHANNEL@server.local "pruebas" Time: 09/28/12 12:29:10
Completed OB2BAR Restore: server.local:pruebas_backup<pruebas_8085:795042273:1>.dbf "Oracle8"
[Normal] From: OB2BAR_SBT_CHANNEL@server.local "pruebas" Time: 09/28/12 12:29:10
Completed OB2BAR Restore: server.local:pruebas_backup<pruebas_8085:795042273:1>.dbf "Oracle8"
channel dev_0: SPFILE restorefromautobackup complete
Finishedrestore at 28/09/12
releasedchannel: dev_0
Recovery Manager complete..
Ahora solamente tenemos que buscar el fichero /tmp/spfile_restaurado_cinta.ora donde tenemos la imagen del spfile recuperada del backup.