Apagando todos objetos de um esquema

É muito comum ter várias aplicações numa única base do Oracle organizadas por esquemas. Se for este o seu caso, você se verá com alguma frequência para migrar um esquema inteiro da base de produção para homologação, do teste para homologação e por aí vai. Exportar os objetos e importar é muito simples, tanto com utilizando o IMP e EXP comuns até a versão 9i como com o Data Pump no 10g em diante:

Com o imp e exp:

exp usuario@nome_base_origem file=dump_esquema.dmp owner=nome_esquema
imp usuario@nome_base_destino file=dump_esquema.dmp fromuser=nome_esquema touser=nome_esquema

Com o data pump:

expdp usuario@nome_base_origem dumpfile=data_pump_dir dumpfile=dump_esquema.dmp schemas=nome_esquema
impdp usuario@nome_base_destino dumpfile=data_pump_dir dumpfile=dump_esquema.dmp schemas=nome_esquema

Bom, até aí não há muito motivo para espanto, é algo trivial. O detalhe é quando você precisa apagar todos os objetos já existentes antes de importar os novos. Para isso, um pouco de SQL sempre ajuda:

SELECT 'DROP TABLE ' || owner || '.' || table_name || ' CASCADE CONSTRAINTS;'
  FROM dba_tables
  WHERE owner = 'NOME_ESQUEMA'';

SELECT 'DROP ' || object_type || ' ' || owner || '.' || object_name || ';'
  FROM dba_objects
  WHERE
    object_type != 'PACKAGE BODY' AND
    owner = 'NOME_ESQUEMA';

É claro que você poderia criar uma função para fazer tudo isso (limpar os objetos e importar o dump) numa tacada só. Mas eu diria que dois comandos SQLs não são motivo para tanto. 🙂

Comentários

7 respostas para “Apagando todos objetos de um esquema”

  1. Avatar de Duarte
    Duarte

    Muito bom. Resolveu, muito bem, um problema muito comum no dia-a-dia.

  2. Avatar de Alex

    Bah, muito interessante o script. Fácil e eficaz. Resolveu completamente meu problema!

    Parabéns!

  3. Avatar de Luiz
    Luiz

    Nossa… vc manja muito de oracle para estar escrevendo um artigo heim!!
    Ja pensou em utilizar o comando: DROP USER “usuario” cascade ??

  4. Avatar de telles

    Já pensei sim. Em alguns casos isso é uma boa alternativa. Em outros não. Aqui o objetivo é importar objetos atualizados para o mesmo usuário. Se eu apagar ele, vou ter de recriar com a mesma senha, perfil, permissões e db-links. Já não é tão simples assim.

    Você deveria ser mais cuidadoso ao postar comentários. Sim escrevo artigos há muito tempo. Já passei por muita coisa como DBA. Sei que em alguns momentos escrevo besteira e eu até já me corrigi publicamente. Mas acho que não foi o caso aqui. Não sei se eu manjo muito de Oracle, estou sempre aprendendo coisas novas. Uma coisa que eu aprendi é que temos que conhecer bem nossos limites como DBA. E saber até onde estamos seguros com o que estamos fazendo. Ter ciência dos nossos limites. Quando eu era ainda um DBA Júnior, tomei a decisão mais importante da minha vida como DBA. Avisei que não sabia resolver o problema e chamei uma pessoa mais experiente para ajudar. Isso é o que me torna um bom profissional, entende?

  5. Avatar de Vinicius Martins Rosa

    Melhor que o artigo foi a resposta que deu ao sabichão acima!
    Parabéns, me ajudou bastante!

    obs.: Eu sei que o artigo é bem antigo, mas só vi o mesmo hoje rs

  6. Avatar de Antonio Pereira
    Antonio Pereira

    Luiz, você é um imbecil! Deveria procurar o melhor ponto turístico de sua cidade e cometer o suicídio lá, sem esquecer, é claro, de evidenciar que o motivo foi esse seu comentário infeliz aqui. Poderia optar também em se retratar publicamente, é claro. Se você não tem capacidade de criar uma vírgula sequer em prol da comunidade, não queira ofuscar o brilho alheio.
    Parabéns, Telles! São pessoas como você que nos orgulha. Tanto pela simplicidade quanto pela disponibilidade em ajudar. Por fim, pela humildade frente aos ataques de pessoas que só pensam em pisar os outros.

  7. Avatar de Fabio Busnello
    Fabio Busnello

    sei que o post é antigo mas vou tentar mesmo assim, com esse comando é só executar o imp novamente?

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress