最近在做一个项目,要把项目现场的数据全部导入到家里的开发库中,统计了一下现场发回来的表文件,一共是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 也很牛啊,感叹