Chinaunix首页 | 论坛 | 博客
  • 博客访问: 599322
  • 博文数量: 248
  • 博客积分: 52
  • 博客等级: 民兵
  • 技术积分: 1028
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-23 12:05
文章分类

全部博文(248)

文章存档

2016年(7)

2013年(241)

分类: 其他UNIX

2013-04-09 03:17:26

原文地址:恢复系统配置表的shell 作者:zhzhs

配置用户名密码文件report.ini
user1/pswd1@dbname1
user2/pswd2@dbname2
配置系统表文件configtable.ini
user1.table1
user2.table2
user3.table3

脚本backup.sh
一次读取配置文件,并做验证,如果密码错误则进行修改,将每个用户的配置表进行导入
备份文件包的名称由用户输入

#!/usr/bin/ksh


dmpfilepath='./'
connfile=report.ini
configtable=configtable.ini
DT=$1
while [ ! -r ${dmpfilepath}${DT}.*.dmp ]
do
    if [ -n "$DT" ]
    then
        ll -rt ${dmpfilepath}*.dmp | tail -20
    fi
    echo "Please input dmp's basename:\c"
    read DT
done


#检查连接串正确性
checkconn()
{
if [ "$#" -ne 1 ]
then
echo "-1"
exit
fi


    VALUE=`sqlplus -s /nolog <     set head off
    conn $dbconn
    select 1 from dual;
    exit
    EOF`
    echo $VALUE
}
#将密码写入配置文件
modipswd()
{
if [ "$#" -ne 2 ]
then
echo "-1"
exit
fi


    user=`echo $1 | cut -d/ -f1`
    dbnm=`echo $1 | cut -d@ -f2`
    newconn=`echo $dbconn | sed 's/\//\\\\\//g`
    cat $2 | sed "/^$user\/.*@$dbnm/s/^.*$/$newconn/g" >temp$$
    mv temp$$ $connfile
}


#读取配置文件
for dbuser in `cat $configtable | sed -e "s/^ *//g" -e "s/\..*//g" | sort | uniq `
do
    v_time=0
    dbconn=`cat $connfile | grep "^ *$dbuser/"`
    checkconn_flg=$(checkconn $dbconn)
    while [ "$checkconn_flg" != "1" -a $v_time -lt 3 ]
    do
        v_time=`expr $v_time + 1`
        stty -echo
        echo $dbuser'@'`echo $dbconn | cut -d@ -f2` password is error," please input new password:\c"
        read newpswd
        echo ''
        dbconn=$dbuser'/'$newpswd'@'`echo $dbconn | cut -d@ -f2`
        stty echo
        checkconn_flg=$(checkconn $dbconn)
        if [ "$checkconn_flg" = "1" ]
        then
            modipswd $dbconn $connfile
            break
        fi
    done
    alltab=''
    #读取配置表
    cat $configtable | grep "^ *$dbuser." |
    while read dbtab
    do
        alltab=$alltab,`echo $dbtab | cut -d. -f2`
        VALUE=`sqlplus -s /nolog <         set head off
        conn $dbconn
        truncate table $dbtab;
        exit
        EOF`
    done
    alltab=`echo $alltab | cut -c2-`
    if [ -n "$alltab" ]
    then
        echo :$alltab:
        imp $dbconn file=${dmpfilepath}${DT}.$dbuser.dmp ignore=y
    fi


done


阅读(945) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~