Oracle自动备份脚本
废话不多说了,直接给大家贴代码了,具体代码如下所示:
#!/bin/sh
#******************************************************************
#File:oraclebak.sh
#CreationDate:2014/1/2217:57:32
#LastModified:2014/1/2217:57:34
#脚本功能:oracle备份脚本
#执行方法:1、第一次执行需要root用户执行,脚本会以询问的方式创建备份目录和相关参数
#2、脚本会自动写入crontab调度里面定时执行,crontab设置是在第一次执行的时候自动添加的
#******************************************************************
echo$USER
if[$USER!=root]
then
echo"检测到安装用户不是root用户,请用root用户登录再执行安装文件"
exit1
fi
echo"开始安装oracle数据库备份工具.........................."
echo"请输入备份程序的安装目录:"
readinstalldir
mkdir-p$installdir
result=$?
while[$result-ne0]
do
echo"无法创建目录,请重新输入或退出安装。输入y重新输入,输入n退出安装。"
readredo
if[$redo!=y]
then
echo"用户退出安装。"
exit0
fi
echo"请输入备份程序的安装目录:"
readinstalldir
mkdir$installdir
result=$?
done
echo"安装目录创建完成。"
echo"请输入执行备份用户(一般为oracle用户):"
readexecuser
id$execuser
result=$?
while[$result-ne0]
do
echo"不存在该用户,是否更换其它用户或者退出安装新建用户,输入y更换用户,输入n退出安装"
readredo
if[$redo!=y]
then
echo"用户退出安装"
exit0
fi
echo"请输入执行备份的用户(一般为tnmsdb2用户)"
readexecuser
id$execuser
result=$?
done
echo"你希望建立备份的数据库数量(一般为1)"
readbacknum
if[$backnum-eq0]
then
echo"无备份数据库,退出安装"
exit0
fi
scount=0
while[$scount-lt$backnum]
do
echo"请输入第"$(($scount+1))"个备份登录登录oracle数据库的用户名和密码,以及本地服务名"
echo"用户名"
readusername[$scount]
echo"密码"
readpassword[$scount]
echo"服务名"
readsname[$scount]
su-l-c"sqlplus/nolog"$execuser<<insert
wheneversqlerrorexitsql.sqlcode;
connect${username[$scount]}/${password[$scount]}@${sname[$scount]}
exit
insert
result=$?
if[$result-ne0]
then
echo"输入数据库信息无法被连接,是否重新输入?输入y重新输入,输入n退出安装。"
readredo
if[$redo!=y]
then
echo"用户退出安装"
exit0
fi
else
scount=$(($scount+1))
fi
done
echo"输入值守时间,值守时间的格式为mmhhddMME。"
echo"m代表分钟,h代表小时,d代表日期,M代表月份,E代表星期"
echo"不输入则为任意时间"
scount=0
iscontinue=y
while[$iscontinue==y]
do
echo"输入第$(($scount+1))个值守时间"
echo"分钟"
readmin
echo"小时"
readhour
echo"日期"
readday
if[!$day]
then
day="*"
fi
echo"月份"
readmouth
if[!$mouth]
then
mouth="*"
fi
week="*"
backtime[$scount]="$min$hour$day$mouth$week"
echo-e"${backtime[$scount]}"
echo"是否输入更多值守时间?输入y继续,输入n进入下一步。"
readiscontinue
scount=$(($scount+1))
done
echo"是否要进行远程备份?输入y为进行远程备份,输入n进入下一步"
scount=0
readiscontinue
while[$iscontinue==y]
do
echo"请选择远程备份类型,输入s为sftp备份类型,否则为ftp备份类型"
readiss
if[$iss==s]
then
rtype[$scount]="sftp"
else
rtype[$scount]="ftp"
fi
echo"请输入远程备份地址,可以为域名,计算机名或者ip地址"
readrurl[$scount]
echo"请输入远程备份登录名"
readrname[$scount]
echo"请输入远程备份登录密码"
readrpass[$scount]
echo"是否输入更多远程备份地址?输入y重新输入,n进入下一步"
readiscontinue
scount=$(($scount+1))
done
#installdir
#execuser
#usernamepasswordsname
#backtime
#rtyperurlrnamerpass
echo"您所作的备份配置如下:"
sresult=$(echo-n"$installdir"|grep'^/')
if[!$sresult]
then
installdir="$PWD/$installdir"
else
installdir=$installdir
fi
echo"本地备份目录为$installdir"
echo"执行备份系统用户为$execuser"
echo"系统备份数据库:"
allcount=${#username[@]}
scount=0
while[$scount-lt$allcount]
do
echo"${username[$scount]}/${password[$scount]}@${sname[$scount]}"
scount=$(($scount+1))
done
echo"执行备份的值守时间表,*代表任意"
scount=0
backnum=${#backtime[@]}
while[$scount-lt$backnum]
do
echo"${backtime[$scount]}"
scount=$(($scount+1))
done
rnum=${#rtype[@]}
if[$rnum-ne0]
then
echo"远程备份的服务地址为:"
scount=0
while[$scount-lt$rnum]
do
echo"连接方式:${rtype[$scount]},连接地址:${rurl[$scount]},用户名:${rname[$scount]},密码:${rpass[$scount]}"
scount=$(($scount+1))
done
fi
echo"是否确认安装?输入y继续,输入n退出安装"
readisgoon
if[$isgoon!=y]
then
exit0;
fi
echo"正在生产目录结构................................";
mkdir-p$installdir/logs
mkdir-p$installdir/temp
mkdir-p$installdir/zip
chown-Rvf$execuser$installdir
echo"目录结构生成完成................................"
echo"生成备份执行文件................................"
echo"#!/bin/bash">$installdir/runback.sh
echo"source~/.bash_profile">>$installdir/runback.sh
echo"nowdate=\$(date+%Y-%m-%d_%k.%M.%S)">>$installdir/runback.sh
echo"nowmouth=\$(date+%Y-%m)">>$installdir/runback.sh
echo"echo\"\$nowdate开始备份.......................................\">>$installdir/logs/\$nowmouth.log">>$installdir/runback.sh
scount=0
snum=${#username[@]}
while[$scount-lt$snum]
do
echo"exp${username[$scount]}/${password[$scount]}@${sname[$scount]}file=$installdir/temp/${username[$scount]}_${sname[$scount]}\$nowdate.dmpcompress=N>>$installdir/logs/\$nowmouth.log2>&1">>$installdir/runback.sh
scount=$(($scount+1))
done
echo"echo\"\$(date+%Y-%m-%d_%k.%M.%S)完成备份.......................................\">>$installdir/logs/\$nowmouth.log">>$installdir/runback.sh
echo"echo\"\$(date+%Y-%m-%d_%k.%M.%S)开始打包.......................................\">>$installdir/logs/\$nowmouth.log">>$installdir/runback.sh
echo"gzip$installdir/zip/\$nowdate.zip$installdir/temp/>>$installdir/logs/\$nowmouth.log2>&1">>$installdir/runback.sh
echo"rm-Rvf$installdir/temp/*>>$installdir/logs/\$nowmouth.log2>&1">>$installdir/runback.sh
echo"echo\"\$(date+%Y-%m-%d_%k.%M.%S)打包完成.......................................\">>$installdir/logs/\$nowmouth.log">>$installdir/runback.sh
scount=0
if[${#rtype[@]}-ne0]
then
echo"echo\"\$(date+%Y-%m-%d_%k.%M.%S)进行远程备份.......................................\">>$installdir/logs/\$nowmouth.log">>$installdir/runback.sh
snum=${#rtype[@]}
while[$scount-lt$snum]
do
echo"lftp-u${rname[$scount]},${rpass[$scount]}${rtype[$scount]}://${rurl[$scount]}<<remote">>$installdir/runback.sh
echo"mkdirremotedbback">>$installdir/runback.sh
echo"cdremotedbback">>$installdir/runback.sh
echo"mput$installdir/zip/\$nowdate.zip">>$installdir/runback.sh
echo"exit">>$installdir/runback.sh
echo"remote">>$installdir/runback.sh
scount=$(($scount+1))
done
echo"echo\"\$(date+%Y-%m-%d_%k.%M.%S)完成远程备份.......................................\">>$installdir/logs/\$nowmouth.log">>$installdir/runback.sh
fi
echo"exit0">>$installdir/runback.sh
chmod775$installdir/runback.sh
chown$execuser$installdir/runback.sh
echo"生成备份执行文件完成............................"
echo"开始定制值守时间................................"
scount=0
snum=${#backtime[@]}
while[$scount-lt$snum]
do
echo"${backtime[$scount]}$installdir/runback.sh">>$installdir/planlist
scount=$(($scount+1))
done
su-l-c"crontab$installdir/planlist"oracle
echo"完成值守时间定制................................"
exit0
接下来给大家介绍linuxoracle自动备份脚本
1、备份脚本:
#!/bin/sh exportORACLE_BASE=/home/oracle exportORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1 exportORACLE_SID=orcl exportPATH=$PATH:$HOME/bin:$ORACLE_HOME/bin exportDATA_DIR=/home/bakup/data exportLOGS_DIR=/home/bakup/logs exportDELTIME=`date-d"7daysago"+%Y%m%d` exportBAKUPTIME=`date+%Y%m%d%H%M%S` mkdir-p$DATA_DIR mkdir-p$LOGS_DIR echo"Startingbakup..." echo"Bakupfilepath$DATA_DIR/$BAKUPTIME.dmp" expshop/lyisABC0987@orclfile=$DATA_DIR/$BAKUPTIME.dmplog=$LOGS_DIR/$BAKUPTIME.log echo"Deletethefilebakupbefore7days..." rm-rf$DATA_DIR/$DELTIME*.dmp rm-rf$LOGS_DIR/$DELTIME*.log echo"Deletethefilebakupsuccessfully." echo"Bakupcompleted."
2、添加到任务调度
crontab-uoracle-e
*3***/home/bakup/bakup.sh
即每天凌晨3点进行备份
如需每天备份多次,可设置不同时间段备份:
例如:*3,13,18***/home/bakup/bakup.sh,即每天3点、13点、18点进行备份。
说明:文件备份目录,用户oracle必须有更改权限,否则无法备份。
热门推荐
10 五一公司放假祝福语简短
11 追星女孩的祝福语简短
12 给长辈端午祝福语 简短
13 生日祝福语有诗意简短
14 团圆日祝福语简短
15 中秋商务祝福语简短最新
16 温暖文艺简短祝福语短句
17 男孩上学祝福语简短的
18 入住酒店文案祝福语简短