Valew Chiappa! Eu nao vi o erro apresentado pelo Oracle. Mas tenho 
certeza que o banco nao parou pq quem viu o erro nao teria como volta-lo 
rsrs Nao sei exatamento o que houver.

Vou seguir o conselho do Raul e do Eduardo Amaral em comitar a cada 1000 
registros.

Vamos ver o que acontece





Em 12-07-2010 14:54, José Laurindo escreveu:
> Oi, Samuel : primeiro de tudo, rigorosamente Não Existe isso de "o script 
> parar" quando redo log file enche : o que pode acontecer nesse sentido é , se 
> o banco est;a programado para arquivar/copiar os redo log files cheios 
> (archive mode) E não há espaço em disco não é a sessão, mas sim o banco 
> TODINHO que para - isso é Bem difícil de acontecer, mas o seu DBA é 
> Totalmente capaz de solucionar isso, uma mensagem BEM ESPECÍFICA é gerada no 
> alert do banco quando isso ocorre... COnsulte o seu DBA pra que isso seja 
> verificado.
>   Caso não seja esse o caso, aí pra mim o que está acontecendo é simples (e 
> esperada) ** LENTIDÃO ** por causa da (via de regra totalmente INAPROPRIADA) 
> programação e processamento uma iinha/registro por vez que vc está fazendo 
> (também conhecida como row-by-row, oo slow-by-slow, slow aqui por motivos 
> óbvios)...
>    Se vc quer performance máxima num SQL, dê os recursos necessários e deixa 
> o banco trabalhar : isso implicaria num primiro momento em acionar o DBA, 
> para que ele crie área de rollback/undo suficiente e (se adequado) ative 
> paralelismo e (se possível) desative eventuais triggers e índices (com 
> REBUILD em modo NOLOGGING posterior), E no segundo passo vc JOGA FORA esse 
> loop e faz o comando num UPDATE só, esse é o mantra, é o caminho, é a Melhor 
> Coisa quando vc quer máxima performance num SQL...
>   Dá uma pesquisada em http://asktom.oracle.com por SQL ROW BY ROW 
> PERFORMANCE que vc acha várias refs e dicas sobre isso...
>
>   []s
>
>     Chiappa
>
>
> --- Em oracle_br@yahoogrupos.com.br, Samuel Corradi<corrad...@...>  escreveu
>>
>> Ola pessoal!
>>
>> Tenho que faz update em um campo do tipo VARCHAR2.
>>
>> Para isso fiz um PL que abre um cursor e percorrer todas linhas
>> alterando os valores.
>>
>> Agora, estou tendo um problema durante a atualizacao. Aparentemente, os
>> redo logs enchem e o sript para. Nao sei dizer exatamente o que estah
>> acontecendo, mas acredito que tenho que fazer um controle maior durante
>> esse update.
>>
>> Alguem tem alguma sugestao do que pode estar acontecendo? Alguem jah
>> passou por esse trabalho de atualizar muitos registros de uma tabela?
>>
>> Segue meu PL para referencia:
>>
>> ================================================
>>
>> DECLARE
>> CURSOR c1 IS select * from sadig.mod0046;
>> flag BOOLEAN DEFAULT false;
>> tamanho PLS_INTEGER DEFAULT 0;
>> codigo VARCHAR2(45);
>> nome VARCHAR2(85);
>> BEGIN
>>      FOR registro IN C1
>>      LOOP
>>              codigo := TRIM(SUBSTR(registro.f14, INSTR(registro.f14,'-',-1) 
>> + 2,
>> LENGTH(registro.f14)));
>>              nome := TRIM(SUBSTR(registro.f14, 1, INSTR(registro.f14,'-',-1) 
>> - 2 ));
>>              UPDATE sadig.mod0046 SET f14=nome || '[' || codigo || ']' WHERE
>> f1=registro.f1 and f6=registro.f6;
>>      END LOOP;
>> END;
>>
>> =================================================
>>
>> Obrigado!
>>
>
>
>

Responder a