全部博文(51)
分类: LINUX
2011-03-14 12:52:29
最近在做一个项目,要把项目现场的数据全部导入到家里的开发库中,统计了一下现场发回来的表文件,一共是1287个。也就是要导入到1287个表中。这样的工作量,当然要让程序来做。人做实在是受不了。发回来的文件也是用bcp导出来的,文件名和表名是一样的,多了个后缀.dat.于是就写了个 shell 脚本:
#!/bin/sh
#把要导入的文件放到list中,且顾虑掉文件大小为0的文件。
list=`ls -l|grep -v grep|grep -v 0|grep -v export.sh|sort -n|awk {'print $9'}`
SUCCESS=0
for arg in ${list}
do
len=${#arg} #get string len
tab=${arg:0:len-4} #get filename not include extend name
#错误信息都写入当前目录的err.txt文件里
echo "bcp ${tab} in /opt/sybase/sdb/ln_data/${arg} -Uname -Ppwd -Sserver -c -t'||' -r'&&\n' -b10 >>./err.txt 2>&1"
`bcp ${tab} in /opt/sybase/sdb/ln_data/${arg} -Unms -Penetmanager -SSYBASE -c -t'||' -r'&&\n' -b10 >>./err.txt 2>&1`
if [ "$?" -eq ${SUCCESS} ];then
echo "success"
else
echo "$arg bcp failed"
#记录下导入失败的表名
`echo $tab>>./failtab.list`
fi
sleep 1
done
可在导入时总是出现下面的错误信息而使得表导入失败
You cannot run the non-logged version of bulk copy in this database. Please......
查了一下相关的资料说可能是数据库的批量拷贝功能没有开通,于是用sa登录数据库,打开这个开关
isql -Usa -Ppwd -Sserver
sp_dboption dbname,bulkcopy,ture
go
再执行导入脚本,果然都可以成功导入了。经过近3个小的导入,总算完成了这项艰巨的任务。shell脚本真是很强悍,sybase 也很牛啊,感叹
chinaunix网友2011-03-27 15:26:00
很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com