tablespace undo cheia

DBA Geral (instalação, configuração do banco, scripts do Sql*Plus, shell scripts, batch scripts, etc...)
Responder
marciob
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 48
Registrado em: Qui, 17 Set 2009 3:47 pm
Localização: rio de janeiro

Informações do Ambiente: oracle 9i
* Versão do Oracle: 9i
* Sistema Operacional:solaris 10 (UNIX)


Senhores,
Estou deletando dados de uma tabela que é muito grande, e com isso, acaba o espaço na tablespace undo. Ela está limpando mas demora de uma dia para o outro praticamente. Gostaria de saber como posso forçar a limpeza dessa tablespace undo.


Fico no aguardo
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

a undo não precisa limpar, conforme o parametro undo_retetion se esta configurado ela vai eliminando,

o que você pode fazer é, se você estiver limpando a tabela inteira, sem especificar clausula WHERE, é trocar a instrucao para TRUNCATE TABLE, o qual não irá gerar undo.

Selecionar tudo

TRUNCATE TABLE SUATABELA;
veja a possibilidade de por a tabela em nologging.
marciob
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 48
Registrado em: Qui, 17 Set 2009 3:47 pm
Localização: rio de janeiro

bem o comando que estou usando é o seguinte:

Selecionar tudo

delete EMAIL_MESSAGES WHERE EXISTS (SELECT ID FROM EMAIL_MESSAGES_OLD) AND ROWNUM <= 1000000 and create_date <= '31/12/2009 23:59;59';

commit;
pOSSO usar o TRUNCATE?

No Aguardo.
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

Não dá, poderia fazer um loop na tabela, e então ir excluindo de 10 mil em 10 mil, porque ai você iria comitando de 10 mil em 10 mil, assim seu undo não crescera forá do controle, isso se a garantia de retencao da sua tablespace de undo estiver desabilitada,

caso você esteja na politica de retencao de undo, diminua o tempo para o undo retetion, padrão 900 segundos, 15 minutos,
marciob
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 48
Registrado em: Qui, 17 Set 2009 3:47 pm
Localização: rio de janeiro

É o que está acontecendo ele está retendo e por um periodo de 5 horas, isto é, 18000 minutos
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

pode mudar para não garantir retencao, aí pode por tamanho fixo na tablespace UNDO.
CarlosStetner
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 16
Registrado em: Sex, 14 Mai 2010 8:06 pm
Localização: São José dos Campos - SP
O Primeiro passo não vale nada se você não chegar ao final.

Amigo quanto a UNDO estar cheia, não quer dizer que você não pode usa-la.

Como já disseram o Oracle tentar manter as informações na UNDO de acordo com o valor do RETENTION, mas ele TENTA, caso algum outro processo precise de UNDO o oracle libera o que estava guardando por causa do retention.

Como você esta no 9i, é certeza que o oracle não garante o retention, já no 10g da pra configurar para o retention ser garantido, mas como você esta no 9i pode continuar executando seu processo independente do espaço livre na UNDO.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante