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:
- extrair somente metadados (exemplo: exportar apenas instruções create table);
- extrair somente os dados de uma base;
- 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:
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:
- 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:
- schemas – define os schemas que serão exportados.
Exportação de tabelas específicas:
- tables – especifica quais tabelas serão exportadas.
Exportação de dados de uma tablespace:
- 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:
Um exemplo de arquivo de parâmetros teria o conteúdo abaixo:
- 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.
Como fazer para reiniciar a extração a partir do ponto de falha?
Olá Flávia
Que eu saiba, não existe esse recurso. Em caso de falha, apague o arquivo gerado e faça o export novamente!
Mas está no artigo
“Permite reiniciar execuções que falharam a partir do ponto de falha;”
É verdade Flávia, me perdoe!
Escrevi esse artigo em 2011 e já tinha me esquecido desse recurso – principalmente por eu nunca tê-lo usado.
Dê uma olhada neste artigo, que fala especificamente sobre isso:
http://oracledbascratchpad.blogspot.com.br/2009/10/using-oracle-database-10g-data-pump.html
Abraço!
Milton,boa tarde.
Muito bom o seu post. Me deu esperanças de resolver um problema,com o”%U”. Estou utilizando Oracle 11g e 12c.
Estou tentando adicionar o nome do database ao nome do dumpfile.
Exemplo: …. dumpfile=schemas_GED_gedprd_20151026.dmp , onde “gedprd” seria a variável externa $ORACLE_DATABASE.
Tentei criar uma varíavel interna DATABASE=$ORACLE_DATABASE ,mas não funcionou. A execução do expdp simplesmente ignora a variável $DATABASE.
Eu consegui criar a data como variável interna ( DT1=`date ‘+%Y%m%d_%H%M’`), no script para executar o expdp. O comando aqui funciona:
“expdp system/******** directory=DATA_PUMP logfile=schemas_GED_$DT1.log dumpfile=schemas_GED_$DT1.dmp schemas=$SCHEMAS”
Como possuo homologação e produção, desejo utilizar uma varíavel para ambos ambientes.
Você sabe como posso buscar uma varíavel externa ou interna para o script funcionar com uma variável para obter o nome do database ?
Desde já, agradeço.
Milton, consegui resolver. Ficou assim:
Variável interna no script:
DATABASE=$ORACLE_DATABASE
E o comando dentro do script:
expdp system/******** directory=DATA_PUMP logfile=schemas_GED_”$DATABASE”_$DT1.log dumpfile=schemas_GED_”$DATABASE”_$DT1.dmp schemas=$SCHEMAS