Cara, uma coisa que ajuda muito é desativar todos os índices da tabela2,
pois a cada update que o oracle dá ele automaticamente atualiza a arvore de
índices, ou seja, se vc for dar 15000 updates em uma tabela, ele ira
atualizar 15000 vezes os índices, consumindo recurso da maquina.

 

Tente desabilitar os índices, fazer a migração, depois criar os índices
novamente.. Com certeza vc terá um ganho de perfomence..

 

Outra coisa que vc pode estar utilizando é o comando MERGE.. de uma olhada
no google de como utilizá-lo.

 

Abraço,

 

_______________________________________

Renato Ribeiro Ricci

Analista de Sistemas

 

 

  _____  

De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de euripedes.junior
Enviada em: quarta-feira, 18 de junho de 2008 14:33
Para: oracle_br@yahoogrupos.com.br
Assunto: [oracle_br] Problema com atualização pesada em tabela

 

Olá pessoal tudo bom????

Bom tenho uma dúvida eu preciso atualizar um campo tabela x com
referencia ao campo da tabela y. Meu problema é o seguinte está
demorando muito pra finalizar a procedure. Eu estou pegando os
resultados da tabela y e jogando para um cursor do tipo ROWTYPE e
depois estou colocando o UPDATE dentro de um LOOP para atualizar a
tabela x, não sei se essa e a melhor forma de fazer, as segestões q
vcs tiverem eu agradeco.

##### INFO TABELAS #####

TABELA1 (17598 Linhas)

Tabela2 (17045 Linhas)

##### PROCEDURE #####

create or replace
PROCEDURE "TESTE" AS
BEGIN
DECLARE

COUNTER NUMBER := 0;
CURSOR c_sb IS 

SELECT B1_COD, B1_CUTMAN 
FROM TABELA1
WHERE B1_TIPO IN ('01','02','03','04'); 
atualiza c_sb%ROWTYPE;

BEGIN

OPEN c_sb;
LOOP
FETCH c_sb INTO atualiza;
EXIT WHEN c_sb%NOTFOUND;

COUNTER := COUNTER + 1;

UPDATE TABELA2 TB2 SET
TB2.B9_CUTMAN = atualiza.B1_CUTMAN
WHERE TB2.B9_DATA = '20080131'
AND TB2.B9_COD = atualiza.B1_COD; 

IF COUNTER > 1000 THEN 
COUNTER := 0;
COMMIT;
END IF; 

END LOOP; 
CLOSE c_sb;
END;
COMMIT;
END TESTE;

 



[As partes desta mensagem que não continham texto foram removidas]

Responder a