quinta-feira, 14 de maio de 2009

Undo tablespace corrompida

A dias atras recebi uma ligação de um profissional desesperado porque o DB travou durante a madrugada e mesmo após 'startar' novamente continuava indisponível para o usuário.

A primeira coisa que pensei foi como e onde ele obteve meu telefone, mas dada a emergência da situação isso se tornou um problema menor. Deixando os pormenores de lado, vamos direto ao ponto:

- Entrei em conexão no servidor da empresa e acessei o BD. A principio a base estava disponível. Fiz alguns testes, todos bem suscedidos e portanto, o problema não era tão desesperador quanto parecia.

Peguei os log's de erros gerados pela base e vi que se trava de erro ao acessar a undo tablespace. Chequei os status das tablespaces, e estavam todas on-line, em seguida verifiquei os status dos segmentos de rollback e bingo, TODOS corrompidos:

SQL> select segment_name, status from dba_rollback_segs
where tablespace_name='UNDOTBS1'

SEGMENT_NAME STATUS
------------------------------ -------------------
_SYSSMU1$ NEED RECOVERY

Solução:

- Criar uma nova Undo tablespace:
SQL> Create undo tablespace undotbs1 datafile '/u02/oradata/undotbs2.dbf' size 2000m
reuse;
- Alterar a undo tablespace padrão do banco:
SQL> Alter system set undo_management='undotbs2' scope=spfile;
- Tornar offline o segmento de rollback corrompido:
SQL> Alter system set "_offline_rollback_segments"="_SYSSMU1$" scope=spfile;
- Restartar o banco e apagar o segmento corrompido:
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> Startup
SQL> startupORACLE instance started.
Total System Global Area 353863224 bytes

Fixed Size 742968 bytes
Variable Size 285212672 bytes
Database Buffers 67108864 bytes
Redo Buffers 798720 bytes
Database mounted.
Database opened.
SQL> Drop rollback segment "_SYSSMU1$";


- Apagar a undo corrompida:

SQL> Drop tablespace undotbs1 including contents and datafiles;

Pronto, feito isso a base está disponivel novamente para DML.

[]'s

Marcio Almeida

2 comentários:

  1. Ola marcio,

    Paraben voce me tirou de uma enrrascada grande, agora vou descobir pq essa tablespace corrompeu, mas o pior ja passou.


    Caso un dia precise de alguma ajuda em linux da uma passada uma la no meu blog, defendendoolinux.blogspot.com e me contata.

    ResponderExcluir
  2. Que bom que meu artigo lhe ajudou. Se precisa ajuda pode me contatar no email marciojalmeida1@gmail.com. Vou adiciona-lo na minha lista de blogs favoritos.
    []'s

    ResponderExcluir