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的意思,表示按照字符来进行导出、或导入)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值