- 論壇徽章:
- 0
|
請(qǐng)教:load 大文本出錯(cuò)了!
我前一段時(shí)間也遇到類似的問題。這里試著回答你的問題,不對(duì)的地方請(qǐng)大家指正哦:)
BUFFER值設(shè)置的文件:
infomix用戶的.profile文件中ONCONFIG=后面指定的那個(gè)文件就是了。如我的就是onconfig,完整路徑為:/usr/informix/etc/onconfig
打開該文件,找到
LOCKS 200000 # Maximum number of locks
BUFFERS 10240 # Maximum number of shared buffers
LOCKS 后面的值就是允許的鎖的個(gè)數(shù)了。同理可知BUFFERS值(但是我不知道BUFFER的值對(duì)應(yīng)內(nèi)存的大小為多少請(qǐng)各位指點(diǎn))
以是兩個(gè)參數(shù)應(yīng)該限制了你一次LOAD進(jìn)數(shù)據(jù)的多少。
看看你的當(dāng)前值是多大,試著把它們調(diào)大,然后重啟數(shù)據(jù)庫(kù)。(如果超過內(nèi)存空間的話數(shù)據(jù)庫(kù)啟動(dòng)會(huì)失敗的,重新調(diào)過就行了)。
經(jīng)過調(diào)整你一次LOAD進(jìn)的記錄數(shù)應(yīng)該會(huì)增加,至于能不能達(dá)到10W條就要看你機(jī)子的配置了:)
另:建議還是寫個(gè)程序每次LOAD進(jìn)去固定數(shù)量的記錄吧,以免某一天因?yàn)閿?shù)據(jù)量太大,數(shù)據(jù)處理又失敗了。
以下是我前段時(shí)間寫的一個(gè)LOAD數(shù)的SHELL。每次LOAD 5000條記錄。
#! /bin/ksh
DEL_NUM="5000" #導(dǎo)入數(shù)據(jù)時(shí),規(guī)定的commit條數(shù)
TMP_DIR=$HOME/tmp
TableName="表名" #你要LOAD的表名,同時(shí)也規(guī)定了你數(shù)據(jù)文件名必須為“表名.unl”
LOG_FILE=$TMP_DIR/load_data.log
NOW_TIME=`date +%H:%M:%S`
echo "$NOW_TIME 歡迎開始導(dǎo)數(shù)程序 今天是:[`date +20%y-%m-%d`]" >;>; $LOG_FILE
#下面計(jì)算需要處理的記錄數(shù)
wc_line=`wc -l $TMP_DIR/$TableName.unl | awk '{print $1}'`
if [ $? -ne 0 ]
then
echo "\n\t文件[$TMP_DIR/$TableName.unl]不存在" >;>; $LOG_FILE
echo "\n\t文件[$TMP_DIR/$TableName.unl]不存在,按回車鍵退出 \c"
read choice
exit 1
fi
NOW_TIME=`date +%H:%M:%S`
echo "$NOW_TIME 需要導(dǎo)入的記錄數(shù)[$wc_line]" >;>; $LOG_FILE
begin="1"
end="0"
tmp=`expr $end + $DEL_NUM `
if [ "$wc_line" -lt "$tmp" ]
then
end=$wc_line
else
end=`expr $end + $DEL_NUM `
fi
NOW_TIME=`date +%H:%M:%S`
echo "$NOW_TIME BEGIN:[$begin] END:[$end] 總行數(shù):[$wc_line] 數(shù)據(jù)塊:[$DEL_NUM]" >;>; $LOG_FILE
i="1"
while [ $end -le $wc_line -a $end -ne "0" ]
do
NOW_TIME=`date +%H:%M:%S`
echo "\n$NOW_TIME 分割數(shù)據(jù)塊[$i]:[$begin] -- [$end]" >;>; $LOG_FILE
echo "sed -n \"$begin,$end p\" $HOME/tmp/$TableName.unl >; $HOME/tmp/tmp_data.unl " >; $TMP_DIR/del_tmp.sh
sh $TMP_DIR/del_tmp.sh 2>;>;$LOG_FILE 1>;/dev/null
NOW_TIME=`date +%H:%M:%S`
echo "$NOW_TIME 分割數(shù)據(jù)塊[$i]完成" >;>; $LOG_FILE
echo "
DATABASE $INFORMIX_USER;
LOAD FROM $HOME/tmp/tmp_data.unl INSERT INTO $TableName ;
close database;" >; $TMP_DIR/del_tmp2.sql
isql -s $INFORMIX_USER -qr $TMP_DIR/del_tmp2.sql 2>;>;$LOG_FILE 1>;/dev/null
if [ $? -ne 0 ]
then
echo "\n\t3.導(dǎo)入表[$TableName]失敗[$TMP_DIR/del_tmp2.sql]" >;>; $LOG_FILE
echo "\n\t3.導(dǎo)入表[$TableName]失敗, 按回車鍵退出 \c"
read choice
exit 1
fi
NOW_TIME=`date +%H:%M:%S`
echo "$NOW_TIME 導(dǎo)入數(shù)據(jù)塊[$i]成功" >;>; $LOG_FILE
if [ $end -eq $wc_line ]
then
break
fi
begin=` expr $end + 1 `
#重新計(jì)算導(dǎo)入的行數(shù)范圍
tmp=`expr $end + $DEL_NUM `
if [ "$wc_line" -lt "$tmp" ]
then
end=$wc_line
else
end=`expr $end + $DEL_NUM `
fi
i=` expr $i + 1 `
done
NOW_TIME=`date +%H:%M:%S`
echo "\n$NOW_TIME ====[$TableName]清數(shù)完成====" >;>; $LOG_FILE |
|