暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

linux和window下基于rowid分片,加快进行导出和导入clob大字段的脚本

原创 szrsu 2024-07-21
446

在做数据迁移、还原测试库以及其他需要导出、导入数据的需求下,我们常用到数据泵来进行数据的导出操作,但如果数据库中clob字段非常多,导出就会比较慢。如何加快导出导入速度呢?我们可以将大对象的表通过rowid切片,使用多个进程进行导出导入,接下来分享一下针对linux和window下基于rowid分片,加快进行导出和导入clob大字段的相关脚本。

1、linux 下基于rowid分片的导出脚本 expdp_clob.sh

#!/bin/bash #环境变量设置 export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db export ORACLE_SID=dbbbed #这里指的并行数 chunk=3 #3个并行(0~2) for ((i=0;i<=2;i++)); do expdp system/oracle TABLES=szr.t_clob QUERY=szr.t_clob:\"where mod\(dbms_rowid.rowid_block_number\(rowid\)\, ${chunk}\) = ${i}\" directory=dump_dir dumpfile=t_clob${i}.dmp logfile=t_clob${i}.log & echo "=====================================expdp parallel:$i=========================================" #休眠10s,防止数据泵还没开始产生进程下一个就开始了,导致一些报错和数据没导出等情况。 sleep 10 done

导出过程:
image.png

2、window下基于rowid分片导出脚本 expdp_clob.bat

@echo off rem #这里可以带上IP地址、端口、sid rem #set connStr=system/oracle@ip:1521/sid_name set connStr=system/oracleora rem #这里指的并行数 set chunk=4 rem #oracle_sid set oracle_sid=orcl rem #oracle_home路径注意bin后边的'\' set oracle_home_path=D:\app\Administrator\product\11.2.0\dbhome_1\bin\ rem 格式:FOR /L %variable IN (start,step,end) DO command [command-parameters] rem #4个并行,0~9(开始标号、每次增加量、结束标号) for /l %%a in (0,1,3) do ( start /b %oracle_home_path%expdp %connStr% TABLES=szr.t_clob QUERY=szr.t_clob:\"where mod\(dbms_rowid.rowid_block_number\(rowid\)\,%chunk%\) = %%a\" directory=expbak dumpfile=t_clob%%a.dmp logfile=t_clob%%a.log echo =====================================导出进程%%a===================================== timeout 10 >nul 2>nul )

导出过程:
image.png

3、linux下基于rowid导入脚本 impdp_clob.sh

#!/bin/bash #环境变量设置 export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db export ORACLE_SID=dbbbed for ((i=0;i<=2;i++)); do #impdp \"/ as sysdba\" directory=dump_dir dumpfile=t_clob${i}.dmp logfile=impdp_t_clob${i}.log DATA_OPTIONS=DISABLE_APPEND_HINT TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y CONTENT=DATA_ONLY & #DIABLE_APPEND_HINT 减少并行导入锁表 impdp \"/ as sysdba\" directory=dump_dir dumpfile=t_clob${i}.dmp logfile=impdp_t_clob${i}.log DATA_OPTIONS=DISABLE_APPEND_HINT CONTENT=DATA_ONLY & echo "=====================================impdp parallel:$i=========================================" sleep 10 done

导入过程:
image.png

4、window下基于rowid 导入脚本 impdp_clob.bat

@echo off rem #这里可以带上IP地址、端口、sid rem #set connStr=system/oracle@ip:1521/sid_name set connStr=system/oracleora rem #oracle_sid set oracle_sid=orcl rem #oracle_home路径注意bin后边的'\' set oracle_home_path=D:\app\Administrator\product\11.2.0\dbhome_1\bin\ rem 格式:FOR /L %variable IN (start,step,end) DO command [command-parameters] rem #4个并行,0~9(开始标号、每次增加量、结束标号) for /l %%a in (0,1,3) do ( rem 11g upper >start /b %oracle_home_path%impdp %connStr% directory=impdir dumpfile=TX_%%a.DMP logfile=imp_TX_%%a.log DATA_OPTIONS=DISABLE_APPEND_HINT TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y CONTENT=DATA_ONLY start /b %oracle_home_path%impdp %connStr% directory=expbak dumpfile=t_clob%%a.dmp logfile=imp_t_clob%%a.log DATA_OPTIONS=DISABLE_APPEND_HINT CONTENT=DATA_ONLY echo =====================================导入进程%%a===================================== timeout 10 >nul 2>nul )

导入过程
image.png

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论