Dando continuidade ao post anterior, sobre expdp, vou falar hoje sobre o impdp.

Assim como o expdp, o impdp é uma evolução do antigo imp. Alguns de seus recursos:

  • Tem a capacidade de fazer carga de dados para um banco de dados inteiro, um esquema específico, uma tablespace específica e até mesmo alguns objetos específicos (como tabelas e store procedures);
  • É utilizado ao transportar tablespaces para o banco de dados;
  • Suporta filtros de dados, permitindo assim selecionar os dados a serem carregados;
  • Suporta filtro de metadados, permitindo controlar os tipos de objetos a serem carregados;
  • Permite “pausar e continuar” trabalhos de importação – semelhante ao expdp;
  • Permite conectar/desconectar de um trabalho de importação em execução;
  • Permite reiniciar trabalhos que falharam a partir do ponto de falha;
  • Suporta paralelismo e permite atribuir um número de threads que será utilizado durante a importação;
  • Suporta operações de modo de rede, permitindo carregamento a partir de outro banco de dados diretamente;
  • Permite ter controle sobre a versão relacionada ao banco de dados do objeto que é importado, assegurando que seja compatível com uma versão de nível mais baixo de banco de dados.

Utilizando o impdp

Na maioria dos casos, o user precisa ter apenas os mesmos privilégios que o user que criou o arquivo de dump, ou seja, o user que executou o expdp. Se a importação for feita utilizando o parâmetro full, o user deverá ter o privilégio IMP_FULL_DATABASE.

Parâmetros e Exemplos

Importação completa de banco de dados:

impdp hr/hr dumpfile=dumps_dir:all_db_%U.dat nologfile=y
job_name=imp_full full=y
  • full: importa todo o arquivo (dump) para o banco de dados
  • 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
  • nologfile: desativa o registro de log da operação
  • dumpfile formata o nome do arquivo, que será gravado no diretório pré-definido no objeto directory de nome DUMPS_DIR

Importação de tabespace:

impdp hr/hr dumpfile=dumps_dir:tbs_users_%U.dat nologfile=y
job_name=imp_tbs_users tablespaces=users table_exists_action=truncate
  • tablespaces: especifica quais tablespaces serão importadas
  • table_exists_action: determina qual ação deve ser tomada quando a tabela a ser importada já existir na base de dados. As opções são:
    • table_exists_action=append – “adiciona” aos dados já existentes na tabela;
    • table_exists_action=replace – exclui a tabela, recria, e carrega os dados;
    • table_exists_action=skip – não carrega os dados e pula para o próximo objeto (DEFAULT);
    • table_exists_action=truncate – remove todas as linhas antes da carga.

Importação de dados específicos de uma tabela

impdp hr/hr dumpfile=dumps_dir:table_data_%U.dat content=data_only
job_name=imp_dados logfile=dumps_dir:imp_dados.log tables=hr.employees
  • tables: especifica quais tabelas serão importadas
  • content [ALL, DATA_ONLY, METADATA_ONLY] – define o conteúdo das importações: somente dados, somente metadados, ou ambos.

Importação de tipos de objetos específicos

Neste exemplo vou usar um arquivo de parâmetros. Considere um arquivo chamado parfile.txt com o conteúdo abaixo:

INCLUDE=FUNCTION
INCLUDE=PROCEDURE
INCLUDE=TABLE:"LIKE 'EMP%'"
DUMPFILE=dumps_dir:hr_objs_%U.dat
NOLOGFILE=Y
JOB_NAME=imp_objetos
FULL=Y

E agora executamos a importação fazendo uso do arquivo de parâmetros:

impdp hr/hr parfile=d:oracledumpsparfile.txt
  • include: define os tipos de objetos que serão importados, permitindo filtros.