Executando DATAPUMP EXPORT (expdp) no Oracle RDS
-- 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