Importação e exportação de dados no Oracle
Que saudade do MySQL.
Se usar um console interativo altamente capenga como o SQLPlus não te faz odiar o Oracle, os mecanismos de importação e exportação de dados certamente farão.
Como eu descobri recentemente que era possível, via SQL, descobrir a DDL original de uma tabela, pensei: deve ser possível exportar a definição de todas as tabelas, índices, seqüências etc. para um arquivo SQL, certo?
Até aí sim, tudo certo, a coisa funciona. É só digitar uma seqüência super simples de comandos: desligar a paginação, configurar o tamanho das linhas, definir o arquivo de saída, definir quando a saída deve ser impressa em arquivo, quando ela deve deixar de ser, além de dizer que, sim, senhor Oracle, você deve colocar um ponto-e-vírgula ao fim de cada instrução (pra quê mais eu estaria pedindo a DDL, pra colar na minha testa?).
Bom, o problema é que não fica muito claro que essas definições não podem ser utilizadas para criar um novo banco de dados, pois as tabelas não podem ser importadas em uma ordem tal que as restrições de integridade entre as tabelas sejam respeitadas no momento de sua re-criação (se duvida, saiba que isso já é sabido desde 2003 por consultores muito bons em Oracle). Minhas buscas pelo Google me deixaram concluir que nada mudou de lá pra cá.
Então, como exportar e importar “coisas” no Oracle, de verdade? exp e imp.
O exp serve para exportar objetos e dados. Para descobrir todas as opções possíveis
do comando, faça:
$ exp help=yes
Se você quiser exportar tudo o que existe em uma schema/usuário, faça:
$ exp usuario/senha@//host/banco owner=\(schema-que-voce-quer-exportar\) file=dump.dos.dados
Então o Oracle exporta tudo o que ele conseguir para o arquivo dump.dos.dados. Ah, você
achou que ia conseguir olhar o código SQL desse arquivo, né? Esqueça, o arquivo é binário.
Valeu, Oracle! O procedimento pode não funcionar corretamente para todos os seus objetos
(hoje, por exemplo, todas as minhas visões foram corrompidas, mas por serem visões nem
me incomodou muito).
Bom, ao menos o Oracle te deixa exportar tudo menos os dados (ideal quando você começar tudo do zero em uma nova base):
$ exp usuario/senha@//host/banco owner=\(schema-que-voce-quer-exportar\) rows=no file=dump.dos.dados
Depois de exportar, cedo ou tarde você precisará importar os dados. Aí entra o imp.
Você deve indicar de qual schema você quer importar (eu já não disse isso para o exp?),
e para onde quer importar:
$ imp usuario/senha@//host/banco fromuser=schema-de-onde-voce-exportou touser=schema-para-onde-deseja-importar file=dump.dos.dados
Não é garantido que o Oracle conseguirá importar tudo, fique de olho nas mensagens que ele vai exibir durante o processo (coisas como “erros de compilação” não podem ser bom sinal).
Para saber quais as opções válidas do imp, faça:
$ imp help=yes
De hoje em diante, sempre que eu puder escolher, já sei que SGBD não vou utilizar em um projeto.

October 8th, 2008 às 12:42 pm
Concordo que as ferramentas de administração do BD Oracle não evoluiram com o restante da aplicação, então ficam algumas dicas:
Podes utilizar a ferramenta DDL Wizard (http://www.ddlwizard.com/) para acessar o conteúdo de arquivos .dmp que tenham sido exportados sem dados (opção rows=no).
Sobre a exportação de tabelas com dados, podes sim exportar os dados utilizando a opção rows=yes. Apesar da interface não ser amigável, o exp/imp possuem vários parâmetros que os tornam bem úteis (imho).