DELETE lento no Oracle

Se você está tentando fazer um DELETE de uma tabela muito grande, e está achando que está demorando muito, esta é a solução:
Não faça o DELETE.

Calma, calma! Não precisa ofender.
Você não irá fazer o DELETE, irá fazer o CTAS (Create Table As Select).
Teste e verá que será muito mais rápido, ainda mais se você especificar NOLOGGING (depois deverá fazer um backup completo da TABLESPACE onde está esta tabela, pois ela até então não poderá ser recuperada via ARCHIVEs).

Por exemplo, para apagar todos registros da tabela T que contem a coluna ID_T = ‘N’:

SQL> CREATE TABLE SCOTT.T2 AS SELECT * FROM SCOTT.T WHERE ID_T != 'N' NOLOGGING;
SQL> DROP TABLE SCOTT.T;
SQL> RENAME TABLE SCOTT.T2 TO T;

Depois, você terá que recriar Índices e Constraints, mas esta pode ser sua única saída em uma tabela muito grande.

2 comentários em “DELETE lento no Oracle”

  1. Bom dia Portilho,

    fiquei na dúvida sobre a sintaxe do comando. Pesquisando na internet, achei a seguinte sintaxe:

    CREATE TABLE NOLOGGING
    AS SELECT…

    (com a cláusula NOLOGGING imediatamente depois do nome da tabela temporária)

    Uma outra dúvida, quando crio uma tabela com o CTAS, ela cria as constraints nessa tabela também?

    Responder

Deixe um comentário

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detectado !

Verificamos que está usando alguma extensão para bloquear os anúncios. O GPO (Grupo de Profissionais Oracle) obtém a sua renda através dos anúncios, para assim manter toda a estrutura dedicada a universalização do conhecimento.

Se você gosta de nosso trabalho, pedimos por gentileza que desabilite o ads blocker. Trabalhamos somente com o Google Adsense e tentamos ao máximo exibir apenas o necessário.

Agradecemos de antemão ! :)

Powered By
Best Wordpress Adblock Detecting Plugin | CHP Adblock