Página Inicial > Backup > Backup: Utilizando Data Pump (EXPDP E IMPDP)

Backup: Utilizando Data Pump (EXPDP E IMPDP)

O banco de dados Oracle fornece uma variedade de procedimentos e opções de backup que ajudam a proteger o banco. Não adianta ter ótimas ferramentas e não implementar de maneira adequada e que possa recuperá-los facilmente, com isso, devemos sempre efetuar testes de backup e restore regularmente.

Neste poste vou falar sobre o utilitário Data Pump (impdp e expdp) que realiza backup lógico de um banco de dados que envolve a leitura de um conjunto de registros do banco de dados e a gravação destes em um arquivo. Esses registros são lidos independente das suas localizações físicas.

Você pode exportar todo o banco de dados, tablespaces, usuários específicos (schemas), espaços de tabelas ou tabelas especificas. O arquivo gravado pelo Data Pump export conterá os comandos necessários para recriar completamente todos os objetos e dados escolhidos. Depois que os dados foram exportados por meio do Data Pump Export, eles poderão ser importados por meio do utilitário Data Pump Import. O Data Pump Import lê o arquivo dump criado pelo Data Pump Export e executa os comandos localizados ali. Por exemplo, esses comandos podem incluir um comando create table, create indice e vários inserts.

Vejamos alguns exemplos de como usar o Data Pump como backup.

Criando um diretório no Sistema Operacional Linux:

mkdir /u01/backup/

Logando no Oracle com sysdba:

sqlplus / as sysdba

Criando um objeto de pasta no Oracle:

CREATE OR REPLACE DIRECTORY funcionarios AS ‘/u01/backup/’;
Directory created.

Utilizando o utilitário EXPDP

Exportando todo o banco de dados:

expdp system DIRECTORY=funcionarios DUMPFILE=funcionario.dmp FULL=y LOGFILE=expfull.log

Exportando uma tablespace:

expdp system DIRECTORY=funcionarios DUMPFILE=funcionarios_TB.dmp TABLESPACES=USERS

Exportando um schema:

expdp system DIRECTORY=funcionarios DUMPFILE=funcionarios_schema.dmp SCHEMAS=hr

Exportando uma tabela:

expdp system tables=hr.employees directory=funcionarios dumpfile=funcionario_tabela.dmp logfile=FUNCIONARIO.log

 

Utilizando o utilitário IMPDP
Importando o banco de dados inteiro:

impdp system DIRECTORY=funcionarios DUMPFILE=funcionario.dmp FULL=y

Importando uma tablespace:

impdp system DIRECTORY=funcionarios DUMPFILE=funcionarios_TB.dmp TABLESPACES=USERS

Importando um schema, remapeando com um novo usuario (schema), chamado amanda:

impdp system DIRECTORY=funcionarios DUMPFILE=funcionarios_schema.dmp remap_schema=hr:amanda remap_tablespace=HR:USERS

Importando uma tabela

impdp system DIRECTORY=funcionarios DUMPFILE=funcionario_tabela.dmp TABLES=amanda.employees;

Alguns parâmetros:
EXPDP: comando para exportar
IMPDP: Comando para importar
SYSTEM: usuário que estou usando para exportar e importar.
TABLES: Informa qual vai ser a tabela importada e exportada.
TABLESPACES: Informa qual vai ser a tablespace que será exportada ou importada.
DIRECTORY: nome do objeto que criamos no oracle, ele aponta para o /u01/backup
DUMPFILE: informo qual será o nome do arquivo exportado.
FULL: informo que o backup é completo
LOGFILE: Nome do arquivo de log, fica localizado na pasta do directory.
TRANSPORT_FULL_CHECK: Especifica se os espaços de tabela sendo importados devem primeiro ser verificados como conjunto contido.
FULL: Opção de Y/N, utilizado para especificar que voce quer importar o arquivo por completo
REMAP_DATAFILE: Altera o nome do arquivo de dados de origem para o arquivo de dados alvo nos comandos create tablespace, create table, etc.
REMAP_SCHEMA: Altera o nome do schema de origem para o destino, separando por dois pontos (:).
REMAP_TABLESPACE: Altera o a tablespace de origem para o destino, separando por dois pontos.
REUSE_DATAFILES: Re-utiliza os datafiles, se já existirem.

 

Alguns GRANTs importantes, em caso de exportar ou importar com o usuário sem perfil de dba, conceda essas permissções
GRANT READ, WRITE ON DIRECTORY funcionarios TO amanda;
GRANT READ, WRITE ON DIRECTORY funcionarios TO hr;
GRANT IMP_FULL_DATABASE to amanda;
GRANT EXP_FULL_DATABASE to hr;

Um abraço.

Tags:
  1. Helber
    22, maio, 2012 em 16:17 | #1

    William,

    Boa tarde.
    Tudo bem?
    Estou planejando uma migração Oracle de um servidor HPUX para Servidor AIX.
    meu gerente ainda não me passou o tamanho da base de dados, apenas me informou que o servidor temHPUX tem 4 instancias.
    Este tipo de migração é possivel fazer utilizando o EXPDP IMPDP, ou utilizar outra ferramenta?

    Muito Obrigado

    Abraços

    Helber

  2. THIAGO
    11, junho, 2012 em 12:06 | #2

    Olá, eu tenho uma base do oracle no linux e exportei a mesma usando EXPDP, o arquivo foi gerado normalmente, mas quando tento importar essa minha base pelo cmd do windows utilizando IMP ele diz que o arquivo dmp não é válido, poderia me ajudar com isso..???

    Desde já, grato!

  3. Tuco
    12, junho, 2012 em 13:20 | #3

    Perfeito! Parabêns pelo post, me ajudou muito e ajudará muitos outros..

  4. 14, agosto, 2012 em 10:38 | #4

    @THIAGO
    Você para utilizar o impdp e expdp tem que ser no mesmo sistema operacional e na mesma versão.

  5. pablo
    22, agosto, 2012 em 22:28 | #5

    Muito bom este post. Bem esclarecedor!

  6. 5, novembro, 2012 em 18:03 | #6

    Boa tarde.
    Agradeço pelas postagens, que me auxiliaram muito quanto ao expdp.
    Se possível poderia me informar a sintaxe para eu exportar várias tabelas ( não todas ) de uma mesma tablespace ?
    MUito obrigado.
    Olair

  7. Jayme
    20, novembro, 2012 em 17:36 | #7

    Sua postagem foi decisiva para que eu pudesse importar algumas tabelas contidas em um dump que recebi.

    Obtive alguns erros acusando a falta de tablespaces, como faço para redirecionar varias tablespaces para uma única ? Obrigado. Parabéns pelo artigo.

  8. Rafael
    19, fevereiro, 2013 em 11:21 | #9

    Utilizando a opção logfile, teria como direcionar para um outro caminho como era feito no imp e no exp?

    Pergunto isso, pois gostaria de manter os logs em um diretório separado dos backups lógicos.

  9. 20, abril, 2013 em 20:57 | #10

    Estou com um cenário SO WINDOWS 2000 BANCO-ORACLE 9i, o mesmo foi gerado um exp com tamanho de 34G. 2º cenário um servidor com RHEL5.7 foi usado o oracle valitade para fazer toda a validação. Foi instalado o oracle 10GR2 10.2.1.0 e aplicado o patch para 10.2.5.0.

    Estou subindo o imp com o exp gerado pelo 9i SO WINDOWS 2000 até tranquilo só que leva 12 horas para subir, isso é muita coisa. Teria como eu minimizar essa situação? Espero ter explicado corretamente.

  10. Sidnei
    2, julho, 2013 em 22:59 | #11

    Prezado William, sou iniciante em Oracle e suas dicas têm me ajudado muitíssimo, porém venho tentando a vários dias exportar dados do banco usando expdp porém não consigo de jeito nenhum, a mensagem que recebo é esta:

    Erro ao iniciar na linha 1 no comando
    expdp system…

    Comando desconhecido.

    Se puder me ajudar ficarei muito agradecido.
    Grato

  11. Lucas
    10, julho, 2013 em 18:00 | #12

    Simples e prático, cada dia mais oracle deixa de ser magia negra graças a profissionais como você,

    Brigadão cara!

  12. 16, julho, 2013 em 12:31 | #13

    É o seguinte,
    Preciso fazer uma conversão de algumas informalções de um banco de Dados Oracle para Firebird, e para isso me enviaram um arquivo que imagino ser de backup (.dmp) para fazer a restauração em minha maquina, esse backup foi gerado em uma maquina Linux e pelo que vi e presenciei, para fazer essa restauração preciso de usar um sistema Linux também.
    Mas uma das minhas dúvidas é, precisa ser a mesma versão do database? Pois não tenho certeza de que o banco Oracle é da versão i9 ou 10g , e o database express que utilizo é o XE11(11g), ou posso utilizar essa versão normalmente para fazer a restauração?

    Desde já agradeço, aguardo respostas!

  13. Rafael Assis
    18, julho, 2013 em 13:10 | #14

    Agora com um pouco mais de experiência com data pump, eu tenho a resposta para a minha própria pergunta. Eu posso gerar dois directory diferentes deixando um para os dados exportados e o outro para logs.

  14. Luiz
    13, agosto, 2013 em 05:55 | #15

    Bom dia,William.

    Estou executando o comando expdp dentro do sqlplus, e está me retornando que o comando não é reconhecido, tem alguma váriavel de ambiente que tenho que setar.

    Obrigado pela ajuda.
    Luiz

  15. Gabriel Pescara
    17, março, 2014 em 17:36 | #16

    Tenho uma duvida quanto a importação por datapump de arquivos divididos. Ex: Dump_01.dmp, Dump_02.dmp …

    Qual é a maneira correta de fazer essa importação?

  16. Fabi Alves
    21, novembro, 2014 em 10:47 | #17

    Tenho a mesma dúvida do Gabriel a importação não é realizada com sucesso quando faço o backup divido em dois arquivos.

  17. Alex
    20, fevereiro, 2015 em 23:19 | #18

    Excelente artigo, parabéns.

  18. Steinle-Oracle
    14, maio, 2015 em 10:46 | #19

    Poderia informar uma forma de exportar e importar diferente do EXP e IMP, já ouvi o pessoal falar que tem formas mais rápidas e mais compactadas de exportação e da sua estração de 9i para 10g e deste para 11, mas ainda não encontrei essa informação e gostaria de entender, se puder ajudar. Agradeço.

  19. 13, agosto, 2015 em 20:22 | #20

    @williamdocarmo
    Otima explicação

  20. Willian Sardinha
    25, setembro, 2015 em 10:36 | #21

    Olá William, estou tendo a mesma dificuldade de outros iniciantes no Oracle. Estou tentando importar uma base de dados com o comando impdp e está dando a seguinte mensagem:

    “Erro ao iniciar na linha 1 no comando
    impdp system…

    Comando desconhecido.”

    Estou utizando o windows 7 32 bits.

    Este é o comando que estou utilizando.

    impdp system/********@XE schemas=SISWEB directory=backup dumpfile=*.DMP logfile=*.log

    Abrigado se puder me ajudar.

  21. Pamella
    13, novembro, 2015 em 10:45 | #22

    Parabéns pela post, objetivo, íntegro, claro, me ajudou muito. Adorei, mais uma vez parabéns.
    Pamella.

  22. Brunno
    23, fevereiro, 2016 em 17:41 | #23

    Olá boa tarde,

    Show, obrigado pelas dicas. Que Deus te abençoi

  23. Daniel
    30, maio, 2016 em 09:45 | #24

    @THIAGO
    Voce deve no linux dar permissão chmod 777 antes de importar no windows. Verifique se a versão dos bancos de dados sao iguais.. select * from v$instance

  1. Nenhum trackback ainda.