oracle数据导入dat文件(使用shell脚本sqlldr导入)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

使用sqlldr导入dat文件,导出请移步oracle数据导出dat文件和ctl文件(使用shell脚本)


一、单表导入

1.创建配置文件

  • 创建database.cfg
#中间库数据源
DataBaseMid=abc/\"abc\"@127.0.0.1:1521/orcl

2.编写脚本

创建testLoad.sh

#!/bin/bash
if [ ! -n "$1" ];then
echo "可执行程序输入不规范,输入样式 sh load.sh 文件名 数据源"
exit 0
fi
#需要装载的文件名称
fileName=$1
if [ ! -n "$2" ];then
. ~/cfg/database.cfg
 DATABASE=$DataBaseMid
else
 DATABASE=$2
fi
#logFile文件,输出当前执行日志
logFile=~/logs/loadlog
#开始时间
startTime=`date +%F |sed 's/-//g' ``date +%T | sed 's/://g'`
#日志输出
echo "--->bin--->load--->TABLENAME="$fileName"---BEGIN--->TIME="$startTime >>$logFile/loadLog.log
#移动至数据文件当前目录下准备执行数据装载
if [ ! -n "$3" ];then
 cd ~/data/oldData
else
 cd $3
fi
#fileCtl控制文件,控制数据装载的字段顺序
fileCtl=${fileName/%dat/ctl}
#fileBad文件,记录数据生成
fileBad=${fileName/%dat/bad}
#fileLog文件,记录当前文件的执行日志
fileLog=${fileName/%dat/log}
#lineCounts,记录当前文件含有多少条记录
lineCounts=$(sed -n '$=' $fileName)
#日志输出
echo "文件为"$fileName",文件行数为"$lineCounts >>$logFile/fileLoad.log
#开始实施数据装载
sqlldr $DATABASE control=$fileCtl bad=$logFile"/"$fileBad log=$logFile"/"$fileLog >>$logFile/load.log errors=10000000 rows=10000 readsize=104857600 bindsize=104857600
#结束时间
endTime=`date +%F |sed 's/-//g' ``date +%T | sed 's/://g'`
#日志输出
echo "--->bin--->load--->TABLENAME="$fileName"---END--->Time"=$endTime >>$logFile/loadLog.log

3.执行

sh testLoad.sh 文件名 数据源

二、多表导入

多表导出主要逻辑是通过脚本循环调用上面的testLoad.sh

1.编写脚本

编写testNewImpl.sh

#!/bin/bash

PATH=/usr/java/jdk1.8.0_181/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/openssh-8.6p1/bin:/usr/local/sbin:/home/zyb/bin:/home/zyb/bin:/u01/app/oracle/product/11.2.0/client_1/patch:/u01/app/oracle/product/11.2.0/client_1/bin
export PATH

. ~/cfg/database.cfg

######################数据库导入开始#########################
#数据文件路径
newPath=~/data/newData
echo "请再一次确认,导入地址是否正确,当前地址为:${DATABASE_SRC}!!!!!!,重要的事情提示三遍!!!"
echo "请再一次确认,导入地址是否正确,当前地址为:${DATABASE_SRC}!!!!!!,重要的事情提示三遍!!!"
echo "请再一次确认,导入地址是否正确,当前地址为:${DATABASE_SRC}!!!!!!,重要的事情提示三遍!!! 按回车继续"
read helloworld
rm -rf $Path/*

#导入数据
filePath=$(ls $newPath)
echo "" > testNewImp.log
for pathName in $filePath
	do
	#测试环境并发效率不高,暂去除并发
	{
	 if [[ $fileName == *.dat ]];then
		echo  "执行:::::"$fileName
		echo  "执行:::::"$fileName >> testNewImp.log
			sh testLoad.sh $fileName $DATABASE_RET $newPath/$pathName

	 fi
	}&
done
	sleep 2
	if [ $? == 0 ];then
        	echo "-----------end $pathName success------------------"
        	echo "-----------end $pathName success------------------" >> testNewImp.log
	else
        	echo "-----------end $pathName fail---------------------"
        	echo "-----------end $pathName fail---------------------" >> testNewImp.log

	fi
done

M=`whoami`
num=$(ls /home/$M/logs/loadlog/*.bad | wc -l)
if [ $num == 0 ];then
    echo "生产数据加载导入无错误文件,移植过程完成!"
    exit 0
else
    echo "生产数据加载导入有错误文件,请检查!!!"
    exit 1
fi

2.执行脚本

sh testNewImpl.sh

总结

以上脚本可能测试不充分,如有问题可私信

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值