Oracle Data Pump: How to Speed Up LOB Export and Import.

Este mês, precisei migrar uma tabela de um ambiente Oracle 11g executando em Solaris SPARC para Linux. Durante a análise da tabela, identifiquei que ela possuía campos do tipo LOB. Ao investigar o impacto desses LOBs no processo de exportação, encontrei a documentação da Oracle “DataPump Export/Import Of LOBs Are Not Executed in Parallel” (Doc ID 1467662.1). Sabemos que, quando uma tabela possui LOBs do tipo **BasicFile**, o Data Pump não executa o processamento desses LOBs em paralelo. Ou seja, mesmo utilizando o parâmetro PARALLEL, o processamento dos LOBs ocorre de forma serial. Ao estimar o tempo necessário para realizar o export dessa tabela, percebi que o processo levaria aproximadamente 10 dias para ser concluído devido à quantidade de dados armazenados nos LOBs. Ao ver essa estimativa, fiquei bastante preocupado e comecei a buscar alternativas que permitissem, de alguma forma, executar o export dessa tabela utilizando paralelismo. Depois de analisar algumas possibilidades e realizar alguns testes, encontrei uma alternativa que permitiu contornar essa limitação e reduzir significativamente o tempo de execução. Abaixo, compartilho a dica e a estratégia utilizada. /p>

Link do script utilizado para realizar o export e import com paralalelismo da tabela com LOB:

https://www.linkedin.com/pulse/optimising-lob-export-import-performance-via-oracle-datapump-arya/

Fiz uma pequena modificação no script original para o export, coloquei o paralelismo para 24 threads, exclude das estatísticas e o parâmetro de consistência para a tabela ADMNFE.NFE_XML_DOCUMENTO_FISCAL:

#!/bin/bash
chunk=24
for ((i=0;i<=23;i++));
do
expdp \'/ as sysdba\' TABLES=ADMNFE.NFE_XML_DOCUMENTO_FISCAL QUERY=ADMNFE.NFE_XML_DOCUMENTO_FISCAL_2:\"where mod\(dbms_rowid.rowid_block_number\(rowid\)\, ${chunk}\) = ${i}\" directory=DUMP_MIGRACAO dumpfile=NFE_XML_DOCUMENTO_FISCAL_${i}.dmp logfile= NFE_XML_DOCUMENTO_FISCAL_${i}.log consistent=y EXCLUDE=STATISTICS &
sleep 5
echo $i
done 

Gerei a ddl da tabela, recriei sem os indices e executei o import da tabela ADMNFE.NFE_XML_DOCUMENTO_FISCAL:

#!/bin/bash
chunk=24
for ((i=0;i<=23;i++));
do
impdp \'/ as sysdba\' TABLES=ADMNFE.NFE_XML_DOCUMENTO_FISCAL directory=DUMP_MIGRACAO dumpfile=NFE_XML_DOCUMENTO_FISCAL_${i}.dmp logfile= IMPORTE_NFE_XML_DOCUMENTO_FISCAL_${i}.log DATA_OPTIONS=DISABLE_APPEND_HINT  CONTENT=DATA_ONLY &
sleep 5
echo $i
done 

Execução dos scripts:

# Export:/
[oracle@oracles ]$ nohup ./export_LOB_NFE_XML_DOCUMENTO_FISCAL.sh &

# Import:
[oracle@oraclesold ]$ nohup ./import_LOB_NFE_XML_DOCUMENTO_FISCAL.sh &

Monitorar o export com percentual e data aproximada de conclusão:

select x.job_name,b.state,b.job_mode,b.degree
, x.owner_name,z.sql_text, p.message
, p.totalwork, p.sofar
, round((p.sofar/p.totalwork)*100,2) "%CONCLUSION"
, p.time_remaining conclusao_segundos
, CAST(p.time_remaining/3600 AS NUMBER(6,2)) conclusion_hrs
, p.time_remaining/3600 conclusao_hrs
,sysdate+CAST((p.time_remaining/3600/24) AS NUMBER(6,2)) conclusion_date
from dba_datapump_jobs b
left join dba_datapump_sessions x on (x.job_name = b.job_name)
left join v$session y on (y.saddr = x.saddr)
left join v$sql z on (y.sql_id = z.sql_id)
left join v$session_longops p ON (p.sql_id = y.sql_id)
WHERE y.module='Data Pump Worker' and p.message is not null
AND p.time_remaining > 0;

Com a solução deste script, o tempo do export caiu de 10 dias para apenas 36 horas. Quero agradecer ao Vineet Arya pela contribuição e compartilhar esta solução.

Links used for this post:

#Original post of the solution and script used:
#Optimising LOB Export and Import Performance via Oracle DataPump
https://www.linkedin.com/pulse/optimising-lob-export-import-performance-via-oracle-datapump-arya/
https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_ROWID.html#GUID-66872807-DA5F-4AD8-B447-69BCB258D69B

#Oracle export and import Lob documentation:
#DataPump Export/Import Of LOBs Are Not Executed in Parallel (Doc ID 1467662.1)
https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=373148215424840&parent=EXTERNAL_SEARCH&sourceId=PROBLEM&id=1467662.1&_afrWindowMode=0&_adf.ctrl-state=11y5w22huf_4
search previous next tag category expand menu location phone mail time cart zoom edit close