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
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
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
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
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
Exportação de Índices
Caso não seja necessário enviar os índices para o Oracle de destino.
indexes = n
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)
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
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
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
Log da importação
Para registrar as ocorrências da importação das informações utilize o parâmetro log.
log = caminho\arquivo.log
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
Importação do arquivo inteiro
Para importarmos todos os objetos exatamente como foi exportado, basta informar o parâmetro full.
full = y
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
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
Visualização do conteúdo do arquivo
Para consultar o conteúdo do arquivo de importação. Conforme o Código 16:
show = y
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)
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
Exportar somente as tabelas Empresas e Clientes do usuário Exemplo:
exp Exemplo/Senha123@ORCL file = c:\tmp\DadosExemplo.dmp tables = (Empresas,Clientes)
Importar todos os objetos do usuário Exemplo:
imp Exemplo/Senha123@ORCL file = c:\tmp\DadosExemplo.dmp full= y
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)
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
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.