Acredito que a ferramenta para backup lógico do banco de dados, hoje funciona como apoio para diversas tarefas cotidianas do DBA. Sua utilização vai desde um “refresh” de base de dados, schema, objetos ou mesmo para restaurar “erros humanos” de forma que sua infraestrutura não permita a configuração de tecnologia de recuperação mais adequada.
Neste artigo, colocarei uma forma de gerar os famosos dumps, através da API DBMS_DATAPUMP. Com isso, você pode gerar dinamicamente e agendar seus backups através do banco de dados, sem muita interação com sistemas operacionais para utilização da ferramenta EXPDP.
Como premissas, considerem o cenário da seguinte forma:
SCHEMA UTILIZADO: DENILSON
DIRETORIO UTILIZADO: BKP_DATA_PUMP
Executando Backup de um SCHEMA específico:
declare h1 NUMBER; begin h1 := dbms_datapump.open (operation => 'EXPORT', job_mode => 'SCHEMA', job_name => 'BKP_SCHEMA01', version => 'COMPATIBLE'); dbms_datapump.set_parallel(handle => h1, degree => 1); dbms_datapump.add_file(handle => h1, filename => 'BKP_SCHEMAS.LOG', directory => 'BKP_DATA_PUMP', filetype => 3); dbms_datapump.set_parameter(handle => h1, name => 'KEEP_MASTER', value => 0); dbms_datapump.metadata_filter(handle => h1, name => 'SCHEMA_EXPR', value => 'IN(''DENILSON'')'); dbms_datapump.add_file(handle => h1, filename => 'BKP_SCHEMAS.DMP', directory => 'BKP_DATA_PUMP', filetype => 1); dbms_datapump.set_parameter(handle => h1, name => 'INCLUDE_METADATA', value => 1); dbms_datapump.set_parameter(handle => h1, name => 'DATA_ACCESS_METHOD', value => 'AUTOMATIC'); dbms_datapump.set_parameter(handle => h1, name => 'COMPRESSION', value => 'ALL'); dbms_datapump.set_parameter(handle => h1, name => 'ESTIMATE', value => 'BLOCKS'); dbms_datapump.start_job(handle => h1, skip_current => 0, abort_step => 0); dbms_datapump.detach(handle => h1); end; /
Executando Backup Completo do Banco de Dados:
declare h1 NUMBER; begin h1 := dbms_datapump.open (operation => 'EXPORT', job_mode => 'FULL', job_name => 'BKP_FULL01', version => 'COMPATIBLE'); dbms_datapump.set_parallel(handle => h1, degree => 1); dbms_datapump.add_file(handle => h1, filename => 'BKP_FULL.LOG', directory => 'BKP_DATA_PUMP', filetype => 3); dbms_datapump.set_parameter(handle => h1, name => 'KEEP_MASTER', value => 0); dbms_datapump.add_file(handle => h1, filename => 'BKP_FULL.DMP', directory => 'BKP_DATA_PUMP', filetype => 1); dbms_datapump.set_parameter(handle => h1, name => 'INCLUDE_METADATA', value => 1); dbms_datapump.set_parameter(handle => h1, name => 'DATA_ACCESS_METHOD', value => 'AUTOMATIC'); dbms_datapump.set_parameter(handle => h1, name => 'COMPRESSION', value => 'ALL'); dbms_datapump.set_parameter(handle => h1, name => 'ESTIMATE', value => 'BLOCKS'); dbms_datapump.start_job(handle => h1, skip_current => 0, abort_step => 0); dbms_datapump.detach(handle => h1); end; /
Executando Backup de uma tabela específica do Banco de Dados:
declare h1 NUMBER; begin h1 := dbms_datapump.open (operation => 'EXPORT', job_mode => 'TABLE', job_name => 'EXPORT000048', version => 'COMPATIBLE'); dbms_datapump.set_parallel(handle => h1, degree => 1); dbms_datapump.add_file(handle => h1, filename => 'BKP_TABLES.LOG', directory => 'BKP_DATA_PUMP', filetype => 3); dbms_datapump.set_parameter(handle => h1, name => 'KEEP_MASTER', value => 0); dbms_datapump.metadata_filter(handle => h1, name => 'SCHEMA_EXPR', value => 'IN(''DENILSON'')'); dbms_datapump.metadata_filter(handle => h1, name => 'NAME_EXPR', value => 'IN(''TABELA1'')'); dbms_datapump.add_file(handle => h1, filename => 'BKP_TABLES.DMP', directory => 'BKP_DATA_PUMP', filetype => 1); dbms_datapump.set_parameter(handle => h1, name => 'INCLUDE_METADATA', value => 1); dbms_datapump.set_parameter(handle => h1, name => 'DATA_ACCESS_METHOD', value => 'AUTOMATIC'); dbms_datapump.set_parameter(handle => h1, name => 'COMPRESSION', value => 'ALL'); dbms_datapump.set_parameter(handle => h1, name => 'ESTIMATE', value => 'BLOCKS'); dbms_datapump.start_job(handle => h1, skip_current => 0, abort_step => 0); dbms_datapump.detach(handle => h1); end; /
Observações:
A linha a qual se refere a compactação, funciona somente a partir da versão 11g, onde foi implementada a ZLIB.
dbms_datapump.set_parameter(handle => h1, name => 'COMPRESSION', value => 'ALL');
Referências
http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_datpmp.htm#BABHBEHH
Abraço

Atuando como DBA Oracle por mais de 14 anos e diversas certificações, possui experiência em administração de banco de dados Oracle desde a versão 7, desenvolvimento de sistemas, tuning de banco de dados, alta disponibilidade, servidores de aplicação. Especialista em Oracle eBusiness Suite desde a versão 11, participando de diverso projetos de Implantação e Migração em diversos setores. Atualmente trabalha na empresa Jupiter, atuando em órgãos de Governo de Angola em projetos de Portais, Gestão de Conteúdo e integrações utilizando a Suite Oracle Webcenter e Oracle SOA