首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Informix >

informix load 有关问题

2012-02-12 
informix load 问题load操作还在进行中loading from file XXXX.unl ......但是表的数据量却没有变化,剩下1

informix load 问题
load操作还在进行中 loading from file XXXX.unl ......
但是表的数据量却没有变化,剩下100多万条数据没有导入完成。

请问这是为什么?
这个操作是在不同服务器间做数据导入导出的,unload 然后load ,请问有什么比较好的方法吗?如何操作?


[解决办法]
执行时候有什么错误提示么?
[解决办法]
在select 上面,加一句set isolation to dirty read;
再看看。
[解决办法]

探讨
在select 上面,加一句set isolation to dirty read;
再看看。

[解决办法]
你可以把要load 的文件 分割成几个小文件,用VI或 是head,tail 什么的。load的文件太大最好是不要对表加索引或是事务,这样会快点。先装个几千条试试看数据有没有问题。
[解决办法]
分割成几个小文件
[解决办法]
你怎么连的数据库?用工具?
可能是数据量太大,造成会话超时了吧。
建议你在数据库上写shell脚本,然后用honup指定脚本在后台执行,并打印日志,这样你就可以很容易查看执行进度了。
[解决办法]
刚才写错了一点,那个命令是nohup,不是honup。
[解决办法]
100W数据量也不大啊。。把数据库改成无日志的试试吧。这样能快些
[解决办法]
估计是进入了长事务的状态了,导致数据导入回滚了,如果可能把数据库的日志方式去掉BUFFER。如果不会去掉日志方式,建议把文件分离开,拆分成30万条一个文件再导入,如果还不行,也可以考虑使用INFORMIX自带的导入工具DBINMPORT进行导入,那里面可以设置多少条记录一提交
[解决办法]
上次在导入表的时候也遇到了这样的问题,当导入到38887条时报错。
怀疑是那条数据乱码,删掉后再导入任然在那条报错;
以为是导入数据大小有限制,后来将数据分割为几个文件导入就没有问题了。
总之,在导入数据前先删掉索引,分批次导入吧。
[解决办法]
如果上面说的都不行的话 看看数据库空间的适用情况,看看是不是没有free的空间了?
[解决办法]
这个明显不能用load 数据量太大的话 会中断的 建议用dbload命令 使用方法直接在informix用户下输入dbload就可以看到 可以分批次导入数据。
[解决办法]
100万其实数据量还是蛮大的
[解决办法]
在导入数据的时候,会锁表,这样应该不会允许查询的。
[解决办法]
set isolation to dirty read;
select count(*) from table
[解决办法]
上百万条数据导入最好使用dbload工具
[解决办法]
[code=bas]h
#!/bin/ksh
#===========================================================================
#filename:dbload.sh
#功能:
#从文件导入海量数据到informix数据库中
#主要是解决海量数据导入问题,当直接使用形如:
#load from loadfile.txt insert into tablename;
#导入数据时,如果数据超过几百万条则会使缓存被充满而无法导入
#input: nameDB nameTable dataFile
#注意:
#1.程序需要informix load 支持
#2.数据文件第行应以"|"结尾
#===========================================================================

#参数输入
if [ $# -ne 3 ];then
cat < < EOF
Usage: $0 nameDB nameTable dataFile

nameDB    数据库名
nameTable  数据库表名
dataFile  即将导入数据库的数据文件
EOF
exit 1
fi

nameDB="$1" #数据库名
nameTable="$2" #数据库表名
dataFile="$3" #即将导入数据库的数据文件

if [ ! -f "$dataFile" ];then
echo " <ERROR>数据文件[$dataFile]不存在!" | tee -a $errLog
exit 1
fi

tmpStr0=`echo $dataFile | sed "s/\//_/g"`


errLog="${tmpStr0}_E.log" #日志
:>$errLog

delimStr="|" #数据文件中数据分隔符
commitNum=100000 #一次提交的数据条数

loadCMDFile="load$$.cmd" #load命令文件

tmpFile="`basename $dataFile`.tmp" #临时文件


trap "myExit" 0 1 2 3 9 11 15

myExit()
{

#程序退出前删除临时文件
#删除load命令文件
rm -f $loadCMDFile
rm -f $tmpFile

#如果日志文件是空的删除
if [ ! -f "$errLog" ];then
return
fi
_tmpNum="`cat $errLog | wc -c`"
_tmpNum="`expr $_tmpNum`"
if [ $_tmpNum -eq 0 ];then
  rm -f $errLog
fi
}

lineNum="`cat $dataFile | wc -l`" #数据行数
lineNum="`expr $lineNum`"
if [ $lineNum -eq 0 ];then
echo " <ERROR>数据文件[$dataFile]是空的!" | tee -a $errLog
exit 1
fi

#数据文件数据列数
colNum=`head -n1 $dataFile | awk -F"|" '{print NF}'`
#数据文件中的数据行最后有一个"|"
colNum=`expr $colNum - 1`


cat < < EOF > $loadCMDFile
file "$dataFile" delimiter "$delimStr" $colNum;
insert into $nameTable;
EOF

if [ ! -f "$loadCMDFile" ];then
echo " <ERROR>load命令文件[$loadCMDFile]不存在!" | tee -a $errLog
exit 1
fi
:> $tmpFile

dbload -d $nameDB -c $loadCMDFile -l $errLog -n $commitNum >> $tmpFile 2>&1
#| tee -a $tmpFile 2>&1
#cat $tmpFile

echo "[提示]数据文件行数: $lineNum"

#获取导入的数据条数
grepStr="Table $nameTable had "
tmpStr=`grep "$grepStr" $tmpFile`
insertNum=0
if [ "$tmpStr" != "" ];then
for str in $tmpStr
do
tmpStr2=`echo $str | grep "^[0-9]*$"`
if [ "$tmpStr2" = "" ];then
continue
else
insertNum=`expr $str`
echo "[提示]总计导入条数: $insertNum"
errNum=` expr $lineNum - $insertNum `
if [ $errNum -gt 0 ];then
echo "[ERROR]导入失败条数: $errNum"
exit 1
else
echo "[OK]导入成功!"
fi
break
fi
done
else
echo "[ERROR]导入失败条数: $lineNum"
exit 1
fi
[/code]

热点排行