Oracle数据库异地备份脚本

脚本文件
#!/bin/bash

# 解析配置文件
# 通过`source`加载配置文件
source config
# 备份服务器地址
backIP=$BackIP
# 数据库SID
sid=$SID
# 数据库连接端口
port=$Port
# 数据库连接用户
user=$User
# 备份服务器系统用户
backUser=$BackUser
# 分解备份服务器用户名和密码
backUserName=$(echo $backUser | awk -F '/' '{print $1}')
backUserPasswd=$(echo $backUser | awk -F '/' '{print $2}')
# 远程服务器地址
remoteIP=$RemoteIP
# 远程服务器系统用户
remoteUser=$RemoteUser
# 分解远程服务器用户名和密码
remoteUserName=$(echo $remoteUser | awk -F '/' '{print $1}')
remoteUserPasswd=$(echo $remoteUser | awk -F '/' '{print $2}')
# 备份的用户目录
owner=xiaoer

# 判断当前系统登录用户是否是备份服务器用户,如果不是则切换用户
currentUser=$(whoami)
if [ $currentUser != $backUserName ];then
    expect -c "
    spawn su - $backUserName
    expect \"Password:\"
    send \"$backUserPasswd\r\"
    interact
    "
fi

# 远程机器相关操作
# B机器(远程机器)备份文件路径
remotePath=/home/yankee/$owner
# 如果支持免密登录时
ssh $remoteUserName@remoteIP -tt << EOF
    if [ ! -d $remotePath ];then
        mkdir $remotePath
    fi
    exit 0
EOF

# 备份机器相关操作
# 数据文件备份路径
# A机器备份文件路径
backdirk=/home/yankee/$owner
# 判断目录是否存在,如果不存在,则创建
if [ ! -d $backdir ];then
    mkdir $backdir
else
    echo $backdir exist!
fi
# 当前系统时间
dateTime=`date +%Y%m%d`
# oracle数据库连接信息
oracleSid="$backIP/$sid"
# 如果用户为多个用户时
userArray=(${user//,/ })
echo $userArray
for ele in ${userArray[@]}
do
    oracleOwn=$ele
    own=$(echo $oracleOwn | awk -F '/' '{print $1}')
    # 备份时生成的数据文件的信息
    exportDataBack=$dateTime.$own.dmp
    # 完整的备份文件路径
    filePath=$backdir/$exportDataBack
    # 备份oracle数据库的脚本语言
    exp $oracleOwn@$oracleSid file=$filePath rows=y grants=y compress=y
    # 此时会将数据库备份文件打包到执行脚本的目录下
    cd $backdir
    # 压缩数据库备份文件
    tar -zcvf $dateTime.$own.tar.gz $exportDataBack
    # 获取当前服务器中的数据文件的大小
    # 直接截取ls命令中所显示的文件大小
    size=$(ls -al ./ | grep $dateTime.$own.tar.gz | awk -F ' ' '{print $5}')
    # 将压缩文件大小保存到标志文件sizeFlag中
    echo $size > sizeFlag.$own
    # 获取标识文件中所存储的压缩文件大小
    keyValue=$(cat sizeFlag.$own)
    # 使用scp命令发送到远程服务器中的指定目录
    scp $dateTime.$own.tar.gz $remoteUserName@$remoteIP:$remotePath
    # 比较远程服务器的文件大小和标志文件中的文件大小是否一致
    # 获取远程服务器中的压缩文件大小
    ssh $remoteUserName@$remoteIP -tt << EOF
    echo $(ls -al $remotePath | grep $dateTime.$own.tar.gz | awk -F ' ' '{print $5}')
    scp $remotePath/remoteSize.$own $backUserName@$backIP:$backdir
    rm $remotePath/remoteSize.$own
    exit
EOF
    remoteSize=$(cat remoteSize.$own)
    if [ $keyValue == $remoteSize.$own ];then
        echo "finished"
        rm -rf $backdir
    else
        echo "failed"
    fi
done
配置文件
BackIP=192.168.21.100
SID=orcl
Port=1521
User=xiaoer/xiaoer
BackUser=yankee/yankee
RemoteIP=192.168.21.101
RemoteUser=yankee/yankee
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yanko24

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值