Hace algunos días dentro de mis tareas diarias, tenia pendiente una clonacion de una bd, quizá la mas grande bd que he clonado, alrededor de 20 TB, asi que hice mi tarea, prepare el ambiente target, revise que la base de datos target se registrara en el listener, valide los paths o rutas de directorios, revise varias veces el init.ora a utilizar, y cuando crei que había hecho un triple check de todos los pre-requisitos, lance la clonacion, el restore como pueden imaginarse tomo aproximadamente 36/40 horas, el problema es que cuando habia terminado de hacer el restore y la recuperación (point in time recovery), al intentar abrir la base de datos con el open resetlogs, obtuve el siguiente error en el alert log y la base de datos no se pudo abrir.
[bash]
Errors in file /u01/app/oracle/admin/CLONEDDB/udump/CLONEDDB_ora_10021.trc:
ORA-30012: undo tablespace ‘UNDOTBS1’ does not exist or of wrong type
Wed Feb 11 14:15:46 2015
Error 30012 happened during db open, shutting down database
USER: terminating instance due to error 30012
Instance terminated by USER, pid = 10021
ORA-1092 signalled during: alter database open resetlogs…
[/bash]
Después de checar este error, me llego un poco de frustración porque el error fue justo al final, ya me veia en un escenario repitiendo el proceso completo, gastando otras 36/40 hrs.
Como pueden darse cuenta lo primero que revise fue el parametro de UNDO y resulto que aunque lo revise varias veces, el UNDO tbs de source se llamaba UNDOTBS1 y el parametro que habia especificado en mi init.ora se llamaba «UNDOTBS», después de unos momentos, cuando llego un poco de cordura, me puse a revisar en metalink si estaba documentado el error, me encontre la siguiente nota.
RMAN Duplicate fails to open CLONE with ORA-01139 when the wrong undo tablespace is specified for the auxiliary (Doc ID 1536368.1)
Basicamente lo que sugiere es lo siguiente:
1. Recrear el control file, si no lo has hecho esta nota te puede ayudar.
How to Recreate a Controlfile (Doc ID 735106.1)
[pgsql]
SYS> select instance_name from v$instance;
INSTANCE_NAME
—————-
CLONEDDB
SYS> shutdown immediate;
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SYS> startup nomount;
ORACLE instance started.
Total System Global Area 1.1811E+10 bytes
Fixed Size 2202168 bytes
Variable Size 788374984 bytes
Database Buffers 1.1006E+10 bytes
Redo Buffers 14729216 bytes
SYS> @/tmp/ctrlcreate.sql
Control file created.
[/pgsql]
Ya con tu control file creado, solo tienes que aplicar recover con lo que tienes en tus redologs.
[pgsql]
SYS> recover database using backup controlfile;
ORA-00279: change 68184058615 generated at 02/11/2015 14:15:45 needed for thread 1
ORA-00289: suggestion : /u138/ora_db/CLONEDDB/arch/arch_t1_s1_r871395177.arc
ORA-00280: change 68184058615 for thread 1 is in sequence #1
Specify log: {=suggested | filename | AUTO | CANCEL}
/u138/ora_db/CLONEDDB/database/redo01_01.rdo
Log applied.
Media recovery complete.
[/pgsql]
Y listo, ya puedes abrir la base de datos con open resetlogs.
[pgsql]
SYS> alter database open resetlogs;
Database altered.
[/pgsql]
Como puedes ver, como DBAs tenemos que ser muy cuidadosos con las tareas que realizamos, no basta con checar dos veces o tres, a veces un pequeño detalle nos puede echar a perder el día y consecuentemente las horas trabajadas en vano.
Por mi parte yo te puedo decir que jamas se me vuelve a pasar un nombre distinto en el tablespace de undo al clonar un bd, bueno.. quien sabe.. al menos ya conozco el fix.
Saludos.
HSRC.