Importação e exportação de dados no Oracle

Em: 12/08/2008 Tags: Referencie do seu blog (Trackback)

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.

Artigos relacionados:

Uma resposta para “Importação e exportação de dados no Oracle”

  1. Luis F. Heckler disse:

    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).

Escreva um comentário (utilize o formato Markdown)