Pues eso amig@s, ya ha pasado antes, pero les dejo varias soluciones para recuperar el tablespace de UNDO en oracle 10g (puede que en la 11g) tambien.
SOLUCION 1:
1-Buscamos la copia del init.ora que tengamos, si no lo tenemos podemos crearlo de la siguiente manera:
1.1 Nos conectamos al SQLPLUS:
C:\> sqlplus /nolog
SQL> conn sys/sys as sysdba
SQL> startup nomount;
SQL> create pfile='c:\init.ora' from spfile;
SQL> exit
(nota: si el fichero esta corrupto, es decir el UNNDOTBS.DBF lo eliminamos).
1.2 Con esto hemos creado una copia del archivo de arranque de nuestra base de datos, nos vamos a la unidad C:\ y editamos el fichero init.ora y agregamos la siguiente linea:
rollbacksegment=(SYSTEM)
1.3 Guardamos el fichero y ahova volvemos a ejecutar el SQLPLUS:
C:\> sqlplus /nolog
SQL> conn sys/sys as sysdba
SQL> startup mount pfile='c:\init.ora';
SQL> recover database using backup controlfile until cancel;
1.4 Una vez que la base de datos este abierta, vamos a recrear el UNDOTBS con el siguiente comando:
CREATE UNDO TABLESPACE UNDOTBS01 DATAFILE 'C:\oracle\product\10.2.0\oradata\orcl\UNDOTBS01.DBF' SIZE 2M REUSE AUTOEXTEND ON;
1.5 Una vez que hemos creado el undo tablespace, editamos el init.ora y eliminamos la linea rollbacksegment=(SYSTEM) del init.ora.
1.6 Ahora debemos hacer los cambios permanentes para ello, ejecutamos la siguiente sentencia:
C:\> sqlplus /nolog
SQL> conn sys/sys as sysdba
SQL> create spfile from pfile='c:\init.ora';
SQL> shutdown immediate;
SQL> conn sys/sys as sysdba
SQL> startup;
SOLUCION 2:
Primero nos conectamos con sys y arrancamos la bbdd con el init.ora, asi:
C:\> sqlplus /nolog
SQL> conn sys/sys as sysdba
SQL> startup mount pfile='c:\init.ora';
Comprobamos que datafile es:
SQL> select file#, status from v$datafile;
FILE# STATUS
---------- -------
1 SYSTEM
2 RECOVERY
3 ONLINE
4 ONLINE
5 ONLINE
6 ONLINE
7 ONLINE
8 ONLINE
9 ONLINE
10 ONLINE
11 ONLINE
Como podemos ver nuestro undo es el nº 2 asi que lo vamos a poner offline:
SQL> alter database datafile 2 offline;
SQL> select file#, status from v$datafile;
FILE# STATUS
---------- -------
1 SYSTEM
2 OFFLINE
3 ONLINE
4 ONLINE
5 ONLINE
6 ONLINE
7 ONLINE
8 ONLINE
9 ONLINE
10 ONLINE
11 ONLINE
Ahora paramos la base de datos y editamos el fichero init.ora:
SQL> shutdown immediate;
SQL> exit;
Editamos el init.ora y buscamos las siguientes lineas:
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS_01'
Y la cambiamos a:
*.undo_management='MANUAL'
#*.undo_tablespace='UNDOTBS_01'
Volvemos a arrancar la bbdd y ya se abrira por arte de magia:
C:\> sqlplus /nolog
SQL> conn sys/sys as sysdba
SQL> startup pfile='c:\init.ora';
Ahora debemos crear otro tablespace de undo con el siguiente comando:
SQL> CREATE UNDO TABLESPACE undotbs_02 DATAFILE 'C:\oracle\product\10.2.0\oradata\orcl\UNDOTBS02.DBF' SIZE 2M AUTOEXTEND ON;
SQL> select file#, name, status from v$datafile;
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS02.DBF
FILE#
----------
NAME
-------------------------------------------------------------------------
STATUS
-------
ONLINE
Ya tenemos nuestro UNDOTBS recuperado....
Por ultimo debemos modificar el init.ora, y cambiar las lineas que hemos modificado antes:
*.undo_management='MANUAL'
#*.undo_tablespace='UNDOTBS_01'
Lo cambiamos a:
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS_02'
Hacemos un shutdown immediate y luego un startup:
SQL> shutdown immediate;
SQL> startup pfile='c:\init.ora';
Con estos pasos ya hemos recupedo el bendito undotbs.
Espero que les sirva...
lunes 28 de diciembre de 2009
Suscribirse a:
Enviar comentarios (Atom)

0 comentarios:
Publicar un comentario en la entrada