Exportação de Dados no Oracle

Quando precisamos transferir os dados de um servidor Oracle para outro, ou para realizarmos cópias de segurança, uma das alternativas é utilizar a ferramenta exp, que está presente em todas as versões do Oracle.

Esta ferramenta normalmente executada em linha de comando, possui diversos parâmetros para definir o que deve ser exportado. O objetivo deste artigo é explicar alguns destes parâmetros.

No final serão abordadas algumas informações sobre a ferramenta imp que realiza o oposto do exp, ela importa os objetos para o banco de dados.

Exportando dados no Oracle com o Exp

O utilitário exp irá gerar um arquivo (dump) binário com os objetos e as estruturas dos mesmos.

Este arquivo pode ser enviado para outro servidor, com sistema operacional distinto que mesmo assim será possível realizar a importação dos dados. Somente é necessário cuidar para que a versão do programa importador (imp) não seja anterior a versão que foi empregada para gerar o arquivo.

É possível usar este utilitário de forma interativa, neste artigo serão mostrados os parâmetros mais comuns quando executado em linha de comando.

String de conexão com o banco de dados

Para conectar com o Oracle precisamos informar o usuário, a senha e a instância do Oracle. Conforme no Código 1

usuário/senha@instância

Código 1. Conexão ao banco de dados Oracle
Nota: Caso seja executado o comando diretamente no servidor, onde exista somente uma instância do Oracle, não precisaremos informar a instância.

Arquivo de destino

O arquivo que iremos gerar deve ser informado no parâmetro file. Veremos no Código 2 como informar o arquivo no file.

file = caminho\arquivo.dmp

Código 2. Arquivo de destino
Nota: Normalmente a extensão utilizada é dmp.

Log da exportação

Caso seja interessante gerar um log com informações sobre a exportação dos objetos, veremos no Código 3 como criar um arquivo de log.

log = caminho\arquivo.log

Código 3. Arquivo de Log

Exportação do banco de dados inteiro

Quando for necessário exportar todo o banco de dados utilize o parâmetro full. Conforme no Código 5:

full = y

Código 4. Exportar banco de dados inteiro

Exportação de Grants (direitos)

Normalmente o exp grava os grants relacionados a cada objeto, porém se estiver exportando somente alguns objetos e/ou usuários, muitas vezes os direitos atribuídos em um ambiente não tenham sentido no servidor de destino dos objetos. Veja no Código 6

grants = n

Código 5. Exportar grants

Exportação de Índices

Caso não seja necessário enviar os índices para o Oracle de destino.

indexes = n

Código 6. Exportar indexes

Seleção de Tabelas

Para selecionar somente algumas tabelas para exportar, informe o parâmetro table. Conforme o Código 7:

tables = (Tabela1,Tabela2,...,TabelaN)

Código 7. Seleção de tabelas

Exportação de Triggers

Caso não seja necessário enviar as triggers para o Oracle de destino. Veja no Código 8:

triggers = n

Código 8. Exportar triggers

Importando com o Imp

Algumas considerações são importantes no momento de importar os dados em versões diferentes do Oracle:

  • Usar um programa imp com a mesma versão do exp usado para exportar os dados.
  • Quando o banco de destino possuir uma versão menor do que a origem, exportar os dados com o exp da versão do destino.
  • Se o usuário que exportou os dados tiver direitos de DBA, será necessário importar os dados com um usuário que também tenha direitos de DBA.
  • Considere a tabela de caracteres configurada na Origem e no Destino, dependendo da combinação a acentuação e caracteres especiais podem ser perdidos.
  • String de conexão com o banco de dados

Da mesma forma como no exp precisamos informar a string de conexão com o banco de dados de destino.

usuário/senha@instância

Código 9. Conexão com o Banco de dados Oracle

Arquivo de origem

O arquivo de onde serão lidas as informações deve ser especificado no parâmetro file. Conforme no Código 10:

file = caminho\arquivo.dmp

Código 10. Arquivo de origem

Log da importação

Para registrar as ocorrências da importação das informações utilize o parâmetro log.

log = caminho\arquivo.log

Código 11. Log de importação

Troca de usuário

Caso o usuário de destino dos objetos seja diferente do usuário de origem, precisaremos indicar isto para o importador através de dois parâmetros: fromuser e touser.

fromuser = usuarioorigem touser = usuariodestino

Código 12. Troca de usuários

Importação do arquivo inteiro

Para importarmos todos os objetos exatamente como foi exportado, basta informar o parâmetro full.

full = y

Código 13. Importar arquivo inteiro

Ignorar erros

Para desprezar os erros de criação dos objetos informe o parâmetro Ignore. Caso este parâmetro não seja informado e alguma tabela que estiver sendo importada, já existir, será gerado um erro e os dados desta tabela não serão incluídos. Veja no Código 14:

ignore = y

Código 14. Ignorar erros

Importar os dados das tabelas

Caso seja necessário somente importar a estrutura dos objetos informe o parâmetro rows, assim os dados das tabelas não serão inseridos. Conforme no Código 15:

rows = n

Código 15. Importar dados de tabelas

Visualização do conteúdo do arquivo

Para consultar o conteúdo do arquivo de importação. Conforme o Código 16:

show = y

Código 16. Visualizar conteúdo

Seleção de Tabelas

Para selecionar somente algumas tabelas para importar, utilize o parâmetro tables. Conforme o Código 17:

tables = (Tabela1,Tabela2,...,TabelaN)

Código 17. Selecionar tabelas

Exemplos de Exportação e Importação

Para estes exemplos será considerado o seguinte ambiente:

  • Usuário do banco de dados: Exemplo
  • Senha do banco de dados: Senha123
  • Instância do Oracle: ORCL
  • Arquivo a ser gerado/importado: C:\tmp\DadosExemplo.dmp

Exportar todos os objetos do usuário Exemplo:

exp Exemplo/Senha123@ORCL file=c:\tmp\DadosExemplo.dmp

Código 18. Exportar todos os objetos

Exportar somente as tabelas Empresas e Clientes do usuário Exemplo:

exp Exemplo/Senha123@ORCL file = c:\tmp\DadosExemplo.dmp tables = (Empresas,Clientes)

Código 19. Exportar tabelas Empresas e Clientes

Importar todos os objetos do usuário Exemplo:

imp Exemplo/Senha123@ORCL file = c:\tmp\DadosExemplo.dmp full= y

Código 20. Importar todos os objetos

Importar somente as tabelas Empresas e Clientes do usuário Exemplo:

imp Exemplo/Senha123@ORCL file = c:\tmp\DadosExemplo.dmp  fromuser = Exemplo tables = (Empresas,Clientes)

Código 21. Importar tabelas Empresas e Clientes

Importar todos os objetos do usuário Exemplo e gravar no usuário Producao:

imp Producao/Senha123@ORCL file = c:\tmp\DadosExemplo.dmp fromuser =Exemplo touser = Producao

Código 22. Importar todos os objetos e gravar em Producao

Conclusão

Os utilitários exp e imp são usados com bastante frequência em ambientes com Oracle, neste artigo foram apresentadas somente as opções mais triviais.

Caso utilize como solução para backup, mantenha as opções tradicionais do Oracle e use somente como um complemento a estes utilitários.