oracle 加快expdp clob大字段导出速度的两种方式

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)
公众号:老苏畅谈运维
欢迎关注本人公众号,更多精彩与您分享。

在做数据迁移、还原测试库以及其他需要导出、导入数据的需求下,我们常用到数据泵来进行数据的导出操作,但如果数据库中clob字段非常多,导出就会比较慢。数据库进行迁移时,如果停机窗口时间较短,那如何加快这个导出速度呢?

可能你会说,多开几个并行不就行了吗?事实上当你数据库中大对象数据量占用较大时候,你会发现开并行没有任何用,那么怎么解决这个问题呢?

那么解决方案是先排除大对象的表,然后这些大对象的表再通过rowid切片,使用多个进程进行导出导入,下面来详细介绍两种方式。

方法1:利用记录rowid的中间表
–创建一个表用于记录要导出表的rowid并分批,这里分成3批
–假设要导出的大字段表为SZR.T_CLOB

create table szr.exp_rowid as select mod(rownum,3) sou_seq,rowid sou_rowid from SZR.T_CLOB;

–根据分批次数生成对应的parfile文件

cat > expdp_t_clob_seq0.par << EOF
userid="/ as sysdba"
directory=dump_dir
dumpfile=expdp_t_clob0.dmp
logfile=expdp_t_clob0.log
cluster=no
tables=szr.t_clob
query=szr.t_clob:"where rowid in (select sou_rowid from szr.exp_rowid where sou_seq=0)"
EOF

cat > expdp_t_clob_seq1.par << EOF
userid="/ as sysdba"
directory=dump_dir
dumpfile=expdp_t_clob1.dmp
logfile=expdp_t_clob1.log
cluster=no
tables=szr.t_clob
query=szr.t_clob:"where rowid in (select sou_rowid from szr.exp_rowid where sou_seq=1)"
EOF

cat > expdp_t_clob_seq2.par << EOF
userid="/ as sysdba"
directory=dump_dir
dumpfile=expdp_t_clob2.dmp
logfile=expdp_t_clob2.log
cluster=no
tables=szr.t_clob
query=szr.t_clob:"where rowid in (select sou_rowid from szr.exp_rowid where sou_seq=2)"
EOF

执行导出
–执行导出

nohup expdp parfile=expdp_t_clob_seq0.par > expdp_t_clob_seq0.par.out &
nohup expdp parfile=expdp_t_clob_seq1.par > expdp_t_clob_seq1.par.out &
nohup expdp parfile=expdp_t_clob_seq2.par > expdp_t_clob_seq2.par.out &

在这里插入图片描述
方法2: 利用dbms_rowid进行分割,生成导出脚本

原理:ROWID_BLOCK_NUMBER函数(该函数返回输入ROWID的数据块编号)

语法:
DBMS_ROWID.ROWID_BLOCK_NUMBER(
row_id IN ROWID,
ts_type_in IN VARCHAR2 DEFAULT ‘SMAILLFILE’)

返回值是number类型。

执行导出脚本:
chunk=3
for ((i=0;i<=2;i++));
do
nohup expdp ‘/ as sysdba’ tables=SZR.T_CLOB query=SZR.T_CLOB:"where mod(dbms_rowid.rowid_block_number(rowid),${chunk}) = KaTeX parse error: Expected group as argument to '\"' at position 6: {i}\" ̲directory=dump_…{i}.dmp logfile=T_CLOB_${i}.log &
echo $i
done

在这里插入图片描述
在这里插入图片描述
如果要导入,则执行:

impdp \'/ as sysdba\'  directory=dump_dir dumpfile=T_CLOB_0.dmp logfile=implog_T_CLOB0.log DATA_OPTIONS=DISABLE_APPEND_HINT CONTENT=DATA_ONLY
impdp \'/ as sysdba\'  directory=dump_dir dumpfile=T_CLOB_1.dmp logfile=implog_T_CLOB1.log DATA_OPTIONS=DISABLE_APPEND_HINT CONTENT=DATA_ONLY
impdp \'/ as sysdba\'  directory=dump_dir dumpfile=T_CLOB_2.dmp logfile=implog_T_CLOB2.log DATA_OPTIONS=DISABLE_APPEND_HINT CONTENT=DATA_ONLY

关注我,学习更多的数据库知识。
请添加图片描述

相关推荐

  1. SVN忽略文件方式

    2024-07-16 14:52:02       56 阅读
  2. html引入ECharts方式

    2024-07-16 14:52:02       58 阅读
  3. Springboot使用kafka方式

    2024-07-16 14:52:02       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 14:52:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 14:52:02       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 14:52:02       58 阅读
  4. Python语言-面向对象

    2024-07-16 14:52:02       69 阅读

热门阅读

  1. 树莓派使用蓝牙设置wifi网络

    2024-07-16 14:52:02       17 阅读
  2. Spring Boot项目中,对接口请求参数打印日志

    2024-07-16 14:52:02       22 阅读
  3. 第二十一条:为传诸后世而设计接口

    2024-07-16 14:52:02       19 阅读
  4. 墨烯的C语言技术栈-C语言基础-015

    2024-07-16 14:52:02       19 阅读
  5. JWT令牌认证介绍及安全风险

    2024-07-16 14:52:02       21 阅读
  6. 导航专业入门,高考/考研假期预习指南

    2024-07-16 14:52:02       20 阅读
  7. Zookeeper + Kafka 消息队列群集部署

    2024-07-16 14:52:02       21 阅读
  8. 常见的排序方法

    2024-07-16 14:52:02       22 阅读