Sybase 数据库表数据备份shell脚本

这两天写了一个灵活一点的使用bcp命令针对Sybase IQ数据库的表数据的备份。
问题是,能够导出数据,但是不能将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的意思,表示按照字符来进行导出、或导入)

猜你喜欢

转载自yangyoupeng-cn-fujitsu-com.iteye.com/blog/1461170
今日推荐