问题是,能够导出数据,但是不能将bcp文件导入到数据库中,后来才知道,Sybase IQ不建议使用bcp命令来导出数据,其他数据库比如ASE就支持bcp,使用的时候请把连接工具iqisql换成数据库支持的工具,比如(ASE就好像支持isql)。
作孽啊,不过还是将shell脚本贴出来。
cd /home mkdir -p bcpdata cd bcpdata dbname=**** //这里配置一下就OK:数据库命名 username=**** //数据库用户名 filename=tables_`echo $dbname`_`echo $username`.tmp//根据数据库、用户名生成tmp文件 iqisql -Udba -Psql -S`echo $dbname` -o`echo $filename` <<EOF //这里使用iqisql 连接数据库,对于Sybase其他类型数据库 请用对应的命令行工具比如isql USE `echo $dbname` GO SELECT name FROM sysobjects WHERE type='U' and uid=user_id('`echo $username`') ORDER BY name //这里可以需要修改,最终只需要[color=red]一个表名[/color]就行。 GO exit EOF vi $filename 2>/dev/null <<EOF :1,2 d :\$ :-2,. d :1,\$ <<< : x EOF //这段代码是对上面tmp文件进行清洗,最后文件中就是干净的表名 total=`cat $filename| wc -l` current=0 for table in `cat $filename` do current=`expr $current + 1` echo "*** $current/$total bcpout $table ***" $SYBASE/OCS-15_0/bin/bcp `echo $dbname`.`echo $username`.$table out `echo $dbname`.`echo $username`.$table.bcp -Udba -Psql -S`echo $dbname` -c //bcp备份,并生成以:数据库.用户名.表名.bcp命名的文件 echo "*** $table done ***" done tar cvf `echo $dbname`_`echo $username`_`date +%C%y%m%d-%H%M%.S`.tar `echo $dbname`.`echo $username`*.bcp //打包 rm *.bcp rm $filename
导入的时候,很简单直接
使用bcp table_name (这里的table名要指定数据库名、用户名即dbname.username.tablename) in filename -Udba -Psql -Sdbname -c (这个c就是character的意思,表示按照字符来进行导出、或导入)