#数据库shell编程实例
QLDATA=/home/sylar/Scripts
#how long will stored
DATA_STORE=92
#if par eq 1
if [ $# -eq 1 ]
then
if [ "${1}X" = "FX" ]
then
echo "\t现在进行数据备份,请稍候..."
elif [ "${1}X" = "SX" ]
then
echo "\t请确认进行了数据备份..."
echo "\t按Enter键继续,退出请按中断键... "
read key
else
echo "\t参数错"
echo "\n\tUsage:\t$0 F [ S ]"
echo "\t \$1=F,表示进行数据备份"
echo "\t \$1=S,表示将重新建表,并进行数据整理"
exit 0
fi
else
echo "\n\tUsage:\t$0 F [ S ]"
echo "\t \$1=F,表示进行数据备份"
echo "\t \$1=S,表示将重新建表,并进行数据整理"
exit 0
fi
#process dbacces db and then select wkdata-77 from ctl_syspmt
TMPDATE=`dbaccess db<<!
select wkdate-${DATA_STORE} from ctl_syspmt;
!`
#get second par
DATE=`echo $TMPDATE | awk '{print $2}'`
#if has dir
if [ -d $QLDATA ]
then
echo "\n\t清理备份的数据保存在目录[$QLDATA]下"
echo "\t请确认存储空间足够"
echo "\t清理后数据库中相应的表只保存日期[$DATE]后的数据"
echo "\t按Enter键继续,退出请按中断键... "
read key
else
echo "\n\t检查清理备份的目录 [ $QLDATA ] 不存在,请创建后重新执行 ... "
exit 0
fi
cd $QLDATA
if [ "${1}X" = "FX" ]
then
echo "\n\t将在$QLDATA目录下创建以下目录"
echo "\n\tsql目录存放表结构"
echo "\n\ttxt目录存放历史表全量数据"
echo "\n\tptxt目录存放历史表中需要暂时保存的数据"
mkdir sql
mkdir txt
mkdir ptxt
#read serial table and fineld_name from text doc
while read serial table field_name
do
echo "\n\t卸出表结构 [$serial]:[$table]..."
#-d dbname -t table name -ss 1> output information send into dev null
dbschema -d hvpsdb -t $table -ss ${QLDATA}/sql/${table}.sql 1>/dev/null;
echo "\n\t卸出需要保留的文本 [$serial]:[$table]..."
dbaccess hvpsdb 2>/dev/null <<!
unload to ${QLDATA}/ptxt/${table}.txt select * from ${table} where ${field_name} >= "${DATE}";
#unload all data
unload to ${QLDATA}/txt/${table}.txt select * from $table;
!
done < ${QLDATA}/hvps_table
fi
if [ "${1}X" = "SX" ]
then
for table in `awk '{print $2}' ${QLDATA}/hvps_table`
do
echo "\n\t并删除表[$table]"
dbaccess hvpsdb 2>/dev/null <<!
drop table $table;
!
echo "\n\t重建表 [$table]"
dbaccess hvpsdb ${QLDATA}/sql/${table}.sql;
echo "\n\t装入数据 [$table]"
dbaccess hvpsdb 2>/dev/null <<!
load from ${QLDATA}/ptxt/${table}.txt insert into $table;
!
done
fi