Executando DATAPUMP EXPORT (expdp) no Oracle RDS

 em AWS RDS Oracle
-- Execucao do Datapump Export via API DBMS_DATAPUMP
-- Onde executar : NA ORIGEM, BANCO DE DADOS ONDE DESEJA EXECUTAR O EXPORT
-- IMPORTANTE : ESTA CHAMADA SERA EXECUTADA DE FORMA ASSINCRONA, OU SEJA, O EXPORT ESTARA RODANDO E O PROMPT DO SQLPLUS IRA SERA DEVOLVIDO NA EXECUCAO.

DECLARE

Bkp NUMBER;
s varchar2(30000);

BEGIN

Bkp := DBMS_DATAPUMP.OPEN( operation => 'EXPORT', job_mode => 'SCHEMA', job_name=>null);
-- FILE
DBMS_DATAPUMP.ADD_FILE( handle => Bkp, filename => 'datapump_source_DATA_F.dmp', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file,reusefile => 1);
-- LOG
DBMS_DATAPUMP.ADD_FILE( handle => Bkp, filename => 'datapump_source_DATA_F.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file);
-- METADATA ONLY
-- DBMS_DATAPUMP.DATA_FILTER(handle => Bkp, name => 'INCLUDE_ROWS', value => 0);
-- SELECAO DE OWNERs EXPORTADOS
SELECT listagg(''''||owner||'''', ', ') WITHIN GROUP (ORDER BY owner) INTO s
FROM (
-- EXCLUSAO DOS OWNERs NO DATAPUMP - EXPORT
SELECT username AS owner
FROM dba_users
WHERE username NOT IN ( 'ANONYMOUS', 'SYS', 'SYSTEM', 'SYSAUX',
'APPQOSSYS', 'AUDSYS', 'CTXSYS', 'DBSNMP',
'DIP', 'GSMADMIN_INTERNAL', 'GSMCATUSER', 'GSMUSER',
'ORACLE_OCM', 'SYSBACKUP', 'SYSDG', 'SYSKM',
'XDB', 'XS$NULL', 'RDSADMIN', 'SYSRAC',
'SYS$UMF', 'REMOTE_SCHEDULER_AGENT', 'GGSYS',
'DBSFWUSER' ) 
) ;
DBMS_DATAPUMP.metadata_filter(Bkp, 'SCHEMA_LIST', s);
-- START
DBMS_DATAPUMP.START_JOB(Bkp);
END;
/





-- Acompanhar andamento do EXPORT (expdp)
-- Onde executar : NA ORIGEM, BANCO DE DADOS ONDE DESEJA EXECUTAR O EXPORT
SELECT text
FROM TABLE(rdsadmin.rds_file_util.Read_text_file (
p_directory => 'DATA_PUMP_DIR',
p_filename => 'datapump_source_DATA_F.log')); 



-- Verificar o arquivo gerado no DIRECTORY
-- Onde executar : NA ORIGEM, BANCO DE DADOS ONDE DESEJA EXECUTAR O EXPORT
set lines 200 pages 200
col filename format a100
SELECT filename ,
Round(filesize / 1024 / 1024 / 1024) as SIZE_GB
FROM Table(rdsadmin.rds_file_util.Listdir('DATA_PUMP_DIR'))
WHERE filename like 'datapump_source_DATA_F%'
ORDER BY mtime;




-- Como transferir o dump (arquivo .dmp) para o ambiente de DESTINO ? 
-- Utilizando o DBMS_FILE_TRANSFER 
-- https://docs.oracle.com/database/121/ARPLS/d_ftran.htm#ARPLS095

-- How to transfer oracle dump in RDS to EC2 ? DBMS_FILE_TRANSFER


-- Criacao do DBLINK no banco de dados ORIGEM que aponta para o banco de dados DESTINO
-- Onde executar : NA ORIGEM, BANCO DE DADOS ONDE DESEJA EXECUTAR O EXPORT
CREATE PUBLIC DATABASE LINK REMOTE 
CONNECT TO "<USER>" IDENTIFIED BY "<PASSWORD>" 
USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.10)(PORT=1521)))';

-- O DBLINK cujo nome é REMOTE ira apontar para o banco de dados DESTINO, portanto, você deve ajustar o USING para este apontamento.


-- Criacao do DIRECTORY no banco de dados DESTINO 
-- Onde executar : NO DESTINO, BANCO DE DADOS ONDE DESEJA EXECUTAR O IMPORT

CREATE OR REPLACE DIRECTORY DATAPUMP AS '/backup/DATAPUMP';
GRANT READ, WRITE ON DIRECTORY DATAPUMP TO public;


-- Execucao da TRANSFERENCIA do arquivo dump via DBMS_FILE_TRANSFER para o Banco de Dados DESTINO
-- Onde executar : NO DESTINO, BANCO DE DADOS ONDE DESEJA EXECUTAR O IMPORT
-- IMPORTANTE : ESTA CHAMADA SERA EXECUTADA DE FORMA SINCRONA, OU SEJA, A TRANSFERENCIA ESTARA RODANDO E O PROMPT DO SQLPLUS NÃO SERÁ DEVOLVIDO NA EXECUCAO.

BEGIN
DBMS_FILE_TRANSFER.put_file(
source_directory_object => 'DATA_PUMP_DIR',
source_file_name => 'datapump_source_DATA_F.dmp',
destination_directory_object => 'DATAPUMP',
destination_file_name => 'datapump_target_DATA.dmp',
destination_database => 'REMOTE');
END;
/

Por Carlos Furushima

Postagens Recentes

Deixe um Comentário