O Oracle Data Pump substituiu os atigos utilitários imp e exp a partir da versão 10g. Vamos falar sobre o Data Pump Export e sobre o Data Pump Import.

Oracle Data Pump Export

Vamos chamá-lo de expdp – que é o nome do arquivo executável deste utilitário. O expdp funciona de modo muito semelhante ao antigo exp, que ainda está disponível, porém obsoleto. Vou listar alguns recursos do expdp abaixo:

  • Permite estimar o tamanho dos arquivos resultantes de uma exportação sem a necessidade de efetivamente gerar os arquivos;
  • Permite “pausar e continuar” uma exportação de dados, e anexar livremente um job a partir de uma exportação em execução;
  • Permite reiniciar execuções que falharam a partir do ponto de falha;
  • Permite uma seleção refinada dos objetos a serem exportados. Exemplo: exportar somente packages e sequences;
  • Oferece processamento paralelo e permite controlar o número de threads utilizados durante a exportação.

O expdp tem dois métodos de acesso a dados disponíveis. Ele pode utilizar tabelas externas ou o acesso direto (direct path). O método utilizado é selecionado automaticamente durante o processo de exportação.  O expdp fornece também suporte a operações de modo de rede, o que permite carregamento a partir de um banco de dados, por meio de um link de banco de dados, diretamente.

O expdp permite controlar a versão do objeto que é exportado. Isso permite exportar dados de uma versão do banco de dados Oracle e assegurar que ela seja compatível com uma versão de nível mais baixo do banco de dados. Por exemplo: exportar dados de uma base 11gR2 já informando que ela deve ser compatível com a versão 10gR2 – para que um banco de dados com esta versão possa fazer a importação dos dados.

O expdp oferece 3 métodos de extração:

  1. extrair somente metadados (exemplo: exportar apenas instruções create table);
  2. extrair somente os dados de uma base;
  3. extrair ao mesmo tempo metadados e dados de um banco de dados.

Utilizando o expdp

Antes de utilizar o expdp, é necessário criar um objeto directory no banco de dados – ou seja, definir o diretório do servidor onde serão gravados os arquivos. Exemplo:

create directory DATA_PUMP_DIR as 'd:oracledumps';
grant read on directory DATA_PUMP_DIR to HR;

Caso queira fazer exportação de dados de um schema cujo owner seja diferente o user que esteja logado, é necessário o privilégio EXP_FULL_DATABASE.

Durante uma operação, pressionar Ctrl+C faz com que o Oracle mova a operação expdp para o segundo plano. O Oracle coloca o expdp em modo interativo, permitindo administrar o trabalho enquanto ele executa em segundo plano, ou que você desconecte completamente o trabalho enquanto ele continua a executar. Cada “trabalho” do data pump recebe um nome, permitindo assim o monitoramento individual de cada trabalho – sendo possível inclusive reconectar a estes trabalhos.

Parâmetros e Exemplos

Exportação de um banco completo:

expdp hr/hr@orcl dumpfile=DATA_PUMP_DIR:milton_%U.dmp filesize=100m
nologfile=y job_name=trab001 full=y estimate_only
  • full define que esta exportação será do banco de dados completo;
  • filesize limita o tamanho dos arquivos. Se for necessário, vários arquivos são criados, sempre com o limite de tamanho definido por este parâmetro;
  • dumpfile formata o nome do arquivo, que será gravado no diretório pré-definido no objeto directory de nome DATA_PUMP_DIR. Neste exemplo, os arquivos começarão sempre com “milton_”, seguido de um número único de sequência (para isso utilizei o %U), e com extensão .dmp – pode ser definida outra extensão, sem problemas, desde que saiba que o arquivo seja um dump gerado pelo data pump.
  • job_name define o “nome de trabalho”. Com isso é possível se desconectar do trabalho para entrar em modo interativo, e se reconectar ao trabalho com o parâmetro attach.
  • nologfile desativa o registro de log da operação;
  • estimate_only – o expdp retorna o tamanho estimado dos arquivos deste trabalho, sem efetuar a exportação.

Exportação de dados de um usuário:

expdp system/senha dumpfile=DATA_PUMP_DIR:hr_%U.dmp schemas=hr
nologfile=y job_name=dump_hr
  • schemas – define os schemas que serão exportados.

Exportação de tabelas específicas:

expdp system/senha dumpfile=DATA_PUMP_DIR:hr_tables_%U.dat
tables=hr.departments, hr.employees nologfile=y job_name=hr_tableslsdk
  • tables – especifica quais tabelas serão exportadas.

Exportação de dados de uma tablespace:

expdp system/senha dumpfile=DATA_PUMP_DIR:tbs_dados01_%U.dat
tablespace=dados01 nologfile=y job_name=expdp_dados01
  • tablespaces – especifica quais tablespaces serão exportadas

Outros parâmetros

  • content [ALL, DATA_ONLY, METADATA_ONLY] – define o conteúdo das exportações: somente dados, somente metadados, ou ambos.
  • parfile – solicita a leitura de um arquivo de parâmetros, cujo conteúdo pode ser todos os outros parâmetros definidos para a exportação. Exemplo:
expdp hr/hr parfile=d:oraclesriptsparfile.txt

Um exemplo de arquivo de parâmetros teria o conteúdo abaixo:

include=FUNCTION
include=PROCEDURE
include=TABLE:"LIKE 'EMP%'"
dumpfile=DATA_PUMP_DIR:teste_%U.dmp
logfile=DATA_PUMP_DIR:log_%U.log
job_name=nonedotrabalho
schemas=HR
  • estimate – informa ao expdp o método de cálculo do tamanho resultante do arquivo de dump. Suas opções:
  • estimate=blocks – calcula o tamanho do dump com base no número de blocos de dados vezes o tamanho do bloco do banco de dados. Este é o padrão caso o parâmetro estimate não seja especificado;
  • estimate=sampling – calcula o tamanho do dump com base em uma amostra do número de linhas por tabela;
  • estimate=statistics – baseia o tamanho do dump nas estatísticas do objeto atual.