作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)
公众号:老苏畅谈运维
欢迎关注本人公众号,更多精彩与您分享。
在上一篇文章,介绍了如何 加快expdp clob大字段导出速度的两种方式,接下来分享一下针对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
导出过程:
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
)
导出过程:
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
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
)
关注我,学习更多的数据库知识。