É 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. 🙂
Muito bom. Resolveu, muito bem, um problema muito comum no dia-a-dia.
Bah, muito interessante o script. Fácil e eficaz. Resolveu completamente meu problema!
Parabéns!
Nossa… vc manja muito de oracle para estar escrevendo um artigo heim!!
Ja pensou em utilizar o comando: DROP USER “usuario” cascade ??
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?
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
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.
sei que o post é antigo mas vou tentar mesmo assim, com esse comando é só executar o imp novamente?