Curitiba/PR Contato
Administração e Suporte em Ti

Em alguns dias tive problemas com um banco de Dados Oracle na versão 10 que iniciava normalmente e depois de alguns minutos a conexão com o banco caia, verificamos também que a instância estava em idle. Se fosse iniciado novamente o banco montava e no momento de abrir a base ocorria erro do tipo ORA-0600, ORA-0603.
Após alguma análise constatou-se que a tablespace UNDO estava corrompida, apesar de não ocorrer nenhum erro ao iniciar o banco pela primeira vez.
Estranhamente não encontrei nada nos registros de logs, pois acredito que não deveria existir mesmo, pois a base não estava montada/aberta. É uma pena que o Oracle 10 ainda não tenh o ADRCI. Decedi eliminar a tablespace antiga e criar uma nova, pois foram realizadas algumas tentativas de recuperação sem sucesso justamente por causa da tablespace corrompida.
Segue procedimento/;

Com o banco em shutdown
SQL> startup mount;

Verificando o status da tablespace corrente
SQL> select instance_name from v$instance;
SQL> show parameter undo_tablespace;
SQL> shutdown immediate;

Como desejava verificar os processo de inicialização passo a passo, renomei o spfile para que o banco fosse iniciado pelo pfile, editando-se alguns parâmetros primeiramente para reconstrução da tablespace UNDO
no meu caso…
cd /dados/app/oracle/product/10.2.0/orahome/dbs/
mv spfileBASE.ora spfileBASE.ora.02092016
vi initBASE.ora

Alterei para os parametros descomentados
###########################################
# System Managed Undo and Rollback Segments
###########################################
#undo_management=AUTO
undo_management=MANUAL
#undo_tablespace=UNDOTBS1
undo_tablespace=SYSTEM

SQL> startup mount pfile=’/dados/app/oracle/product/10.2.0/orahome/dbs/initBASE.ora’;
SQL> alter database open;

Elimine a tablespace antiga
SQL> drop tablespace undotbs1 including contents and datafiles;

SQL> select segment_name,status,tablespace_name from  dba_rollback_segs where status not in(‘ONLINE’,’OFFLINE’);
no rows selected

Crie uma nova tablespace de UNDO
SQL> Create undo tablespace undo datafile ‘/dados/app/oracle/product/10.2.0/orahome/dbs/undo1.dbf’ size 1024M autoextend on;

Faca um novo shutdown
SQL> shutdown immediate;

Retorne a configuracao do arquivo initBASE.ora (pfile) conforme abaixo, utilizando-se da nova tablespace de UNDO

###########################################
# System Managed Undo and Rollback Segments
###########################################
undo_management=AUTO
#undo_management=MANUAL
#undo_tablespace=UNDOTBS1
undo_tablespace=UNDO

Conecte-se novamente:

sqlplus / as sysdba

SQL> create spfile from pfile;
SQL> startup mount;
SQL> alter database open;

Verifique o uso da tablespace se esta correto.
SQL> show parameter undo_tablespace;

 

______

O processo abaixo segue sem editar o pfile, mas nao cheguei a testar…
Usando o spfile existente

SQL> shutdown immediate;
SQL> Startup nomount ;
SQL> Create pfile=’/tmp/initcorrupt.ora’ from spfile ;
SQL> Shutdown immediate;
SQL> startup mount pfile=’/tmp/initcorrupt.ora’;
SQL> Show parameter undo;
Verifique se o processo esta em MANUAL;
caso necessário:

Altere o parametro undo_management para MANUAL
SQL> alter system set undo_management=’MANUAL’ scope=spfile;

Faça um shutdown e um startup, acompanhe os processos
SQL> shutdown immediate;
SQL> startup mount pfile=’/tmp/initcorrupt.ora’;
SQL> Alter database open ;

Altere a default tablespace UNDO para o novo valor
SQL> alter system set undo_tablespace=’NEWUNDOTBS’ scope=spfile;

Altere novamente a undo_management para AUTO
SQL> alter system set undo_management=’AUTO’ scope=spfile;

Faca um shutdown e inicie normalmente
SQL> shut immediate;
SQL> startup;

Verifique o uso da tablespace se esta correto.
SQL> show parameter undo_tablespace;