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! >