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必须有更改权限,否则无法备份。