加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle linux shell sqlloader导入文件以及exp备份的优化问题

发布时间:2020-12-12 16:00:19 所属栏目:百科 来源:网络整理
导读:在进行导入和导出的时候,因为数据源不是exp导出的,所以需要自己写控制文件。 linux_sql.ctl(如果需要从shell脚本中向ctl中传递变量,参考这里的第三条) load datainfile './test.unl'appendinto table TBL_MERCH_INFO_TESTfields terminated by '@|#'tra

在进行导入和导出的时候,因为数据源不是exp导出的,所以需要自己写控制文件。


linux_sql.ctl(如果需要从shell脚本中向ctl中传递变量,参考这里的第三条)

load data
infile './test.unl'
append
into table TBL_MERCH_INFO_TEST
fields terminated by '@|#'
trailing nullcols
(
	MERCH_ID,CLIENT_ID,PROV_CODE,BRANCH_ID,AREA
)


linux_sqlldr.sh

#!/bin/bash

DATE_STRING=$(date +%Y%m%d)
DATE_STRING_LOG=${DATE_STRING}"log"
DATE_STRING_BAD=${DATE_STRING}"bad"
ERRORS_NUM=1000
ROWS_SUBMIT=200000
DB_USER="user"
DB_PASS="password"
DB_SERVICE="localhost/orcl"

mkdir $DATE_STRING
if [ ! -d $DATE_STRING ]
then
	echo "[日志目录创建失败] $DATE_STRING"
	exit -1
fi

echo "开始导入..."
sqlldr $DB_USER/$DB_PASS@$DB_SERVICE control=linux_sql.ctl log=$DATE_STRING/$DATE_STRING_LOG.log bad=$DATE_STRING/$DATE_STRING_BAD.log errors=$ERRORS_NUM rows=<span style="color:#ff0000;">$ROWS_SUBMIT</span> <span style="background-color: rgb(255,0);">direct=y</span>

echo "导入完成。"
数据总量大概在125W条左右,之前的rows_submit设置的太小了,全部导入需要17分钟,改为100000或者200000后,可以达到3分钟左右


按表备份,因为不需要备份所有的表,所以只把自己需要的提取出来备份就可以

linux_exp.sh

#!/bin/bash

DATE_STRING=$(date +%Y%m%d)

DB_USER="user"
DB_PASS="password"
DB_SERVICE="localhost/orcl"
DB_BUFFER=10240000

mkdir -p $DATE_STRING
if [ ! -d $DATE_STRING ]
then
	echo "[备份目录创建失败] $DATE_STRING"
	exit -1
fi

echo "[表备份目录] $DATE_STRING"

echo "开始按表进行备份..."
#从数据库中读取数据表的名称
SLCT_TBLNM_RSLT=`
sqlplus -s $DB_USER/$DB_PASS@$DB_SERVICE<< EOF
set echo off feedback off heading off underline off;
select TABLE_NAME from USER_TABLES where TABLE_NAME like 'TBL%';
commit;
exit;
EOF`

#开始进行数据库备份
for loop in `echo "$SLCT_TBLNM_RSLT" | sed 's/ //g;s/-//g'`
do
	FILENAME=`echo $loop`
	exp $DB_USER/$DB_PASS@$DB_SERVICE buffer=$DB_BUFFER file=./$DATE_STRING/$FILENAME.dmp tables=$loop
done	
echo "按表备份结束"

exit 0
关键在于buffer,之前buffer值设为64000的时候,需要大概3分钟,设为10240000,只需要18s,buffer的值在1024000到10240000之间时达到最优。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读