廢話不多說了,直接給大家貼代碼了,具體代碼如下所示:
#!/bin/sh#******************************************************************# File: oraclebak.sh# Creation Date: 2014/1/22 17:57:32# Last Modified: 2014/1/22 17:57:34# 腳本功能:oracle備份腳本# 執(zhí)行方法:1、第一次執(zhí)行需要root用戶執(zhí)行,腳本會(huì)以詢問的方式創(chuàng)建備份目錄和相關(guān)參數(shù)# 2、腳本會(huì)自動(dòng)寫入crontab調(diào)度里面定時(shí)執(zhí)行,crontab設(shè)置是在第一次執(zhí)行的時(shí)候自動(dòng)添加的#******************************************************************echo $USERif [ $USER != root ]thenecho "檢測(cè)到安裝用戶不是root用戶,請(qǐng)用root用戶登錄再執(zhí)行安裝文件"exit 1fiecho "開始安裝oracle數(shù)據(jù)庫(kù)備份工具.........................."echo "請(qǐng)輸入備份程序的安裝目錄:"read installdirmkdir -p $installdirresult=$?while [ $result -ne 0 ]doecho "無法創(chuàng)建目錄,請(qǐng)重新輸入或退出安裝。輸入y重新輸入,輸入n退出安裝。"read redoif [ $redo != y ]thenecho "用戶退出安裝。"exit 0fiecho "請(qǐng)輸入備份程序的安裝目錄:"read installdirmkdir $installdirresult=$?doneecho "安裝目錄創(chuàng)建完成。"echo "請(qǐng)輸入執(zhí)行備份用戶(一般為oracle用戶):"read execuserid $execuserresult=$?while [ $result -ne 0 ]doecho "不存在該用戶,是否更換其它用戶或者退出安裝新建用戶,輸入y更換用戶,輸入n退出安裝"read redoif [ $redo != y ]thenecho "用戶退出安裝"exit 0fiecho "請(qǐng)輸入執(zhí)行備份的用戶(一般為tnmsdb2用戶)"read execuserid $execuserresult=$?doneecho "你希望建立備份的數(shù)據(jù)庫(kù)數(shù)量(一般為1)"read backnumif [ $backnum -eq 0 ]thenecho "無備份數(shù)據(jù)庫(kù),退出安裝"exit 0fiscount=0while [ $scount -lt $backnum ]doecho "請(qǐng)輸入第"$(($scount+1))"個(gè)備份登錄登錄oracle數(shù)據(jù)庫(kù)的用戶名和密碼,以及本地服務(wù)名"echo "用戶名"read username[$scount]echo "密碼"read password[$scount]echo "服務(wù)名"read sname[$scount]su -l -c"sqlplus /nolog" $execuser<<insertwhenever sqlerror exit sql.sqlcode;connect ${username[$scount]}/${password[$scount]}@${sname[$scount]}exitinsertresult=$?if [ $result -ne 0 ]thenecho "輸入數(shù)據(jù)庫(kù)信息無法被連接,是否重新輸入?輸入y重新輸入,輸入n退出安裝。"read redoif [ $redo != y ]thenecho "用戶退出安裝"exit 0fielsescount=$(($scount+1))fidoneecho "輸入值守時(shí)間,值守時(shí)間的格式為 mm hh dd MM E 。"echo "m代表分鐘,h代表小時(shí),d代表日期,M代表月份,E代表星期"echo "不輸入則為任意時(shí)間"scount=0iscontinue=ywhile [ $iscontinue == y ]doecho "輸入第$(($scount+1))個(gè)值守時(shí)間"echo "分鐘"read minecho "小時(shí)"read hourecho "日期"read dayif [ ! $day ]thenday="*"fiecho "月份"read mouthif [ ! $mouth ]thenmouth="*"fiweek="*"backtime[$scount]="$min $hour $day $mouth $week"echo -e "${backtime[$scount]}"echo "是否輸入更多值守時(shí)間?輸入y繼續(xù),輸入n進(jìn)入下一步。"read iscontinuescount=$(($scount+1))doneecho "是否要進(jìn)行遠(yuǎn)程備份?輸入y為進(jìn)行遠(yuǎn)程備份,輸入n進(jìn)入下一步"scount=0read iscontinuewhile [ $iscontinue == y ]doecho "請(qǐng)選擇遠(yuǎn)程備份類型,輸入s為sftp備份類型,否則為ftp備份類型"read issif [ $iss == s ]thenrtype[$scount]="sftp"elsertype[$scount]="ftp"fiecho "請(qǐng)輸入遠(yuǎn)程備份地址,可以為域名,計(jì)算機(jī)名或者ip地址"read rurl[$scount]echo "請(qǐng)輸入遠(yuǎn)程備份登錄名"read rname[$scount]echo "請(qǐng)輸入遠(yuǎn)程備份登錄密碼"read rpass[$scount]echo "是否輸入更多遠(yuǎn)程備份地址?輸入y重新輸入,n進(jìn)入下一步"read iscontinuescount=$(($scount+1))done# installdir# execuser# username password sname# backtime# rtype rurl rname rpassecho "您所作的備份配置如下:"sresult=$(echo -n "$installdir" | grep '^/')if [ ! $sresult ]theninstalldir="$PWD/$installdir"elseinstalldir=$installdirfiecho "本地備份目錄為$installdir"echo "執(zhí)行備份系統(tǒng)用戶為$execuser"echo "系統(tǒng)備份數(shù)據(jù)庫(kù):"allcount=${#username[@]}scount=0while [ $scount -lt $allcount ]doecho "${username[$scount]}/${password[$scount]}@${sname[$scount]}"scount=$(($scount+1))doneecho "執(zhí)行備份的值守時(shí)間表,*代表任意"scount=0backnum=${#backtime[@]}while [ $scount -lt $backnum ]doecho "${backtime[$scount]}"scount=$(($scount+1))donernum=${#rtype[@]}if [ $rnum -ne 0 ]thenecho "遠(yuǎn)程備份的服務(wù)地址為:"scount=0while [ $scount -lt $rnum ]doecho "連接方式:${rtype[$scount]},連接地址:${rurl[$scount]},用戶名:${rname[$scount]},密碼:${rpass[$scount]}"scount=$(($scount+1))donefiecho "是否確認(rèn)安裝?輸入y繼續(xù),輸入n退出安裝"read isgoonif [ $isgoon != y ]thenexit 0;fiecho "正在生產(chǎn)目錄結(jié)構(gòu)................................";mkdir -p $installdir/logsmkdir -p $installdir/tempmkdir -p $installdir/zipchown -Rvf $execuser $installdirecho "目錄結(jié)構(gòu)生成完成................................"echo "生成備份執(zhí)行文件................................"echo "#!/bin/bash">$installdir/runback.shecho "source ~/.bash_profile">>$installdir/runback.shecho "nowdate=/$(date +%Y-%m-%d_%k.%M.%S)">>$installdir/runback.shecho "nowmouth=/$(date +%Y-%m)">>$installdir/runback.shecho "echo /"/$nowdate開始備份......................................./">>$installdir/logs//$nowmouth.log">>$installdir/runback.shscount=0snum=${#username[@]}while [ $scount -lt $snum ]doecho "exp ${username[$scount]}/${password[$scount]}@${sname[$scount]} file=$installdir/temp/${username[$scount]}_${sname[$scount]}/$nowdate.dmp compress=N>>$installdir/logs//$nowmouth.log 2>&1">>$installdir/runback.shscount=$(($scount+1))doneecho "echo /"/$(date +%Y-%m-%d_%k.%M.%S)完成備份......................................./">>$installdir/logs//$nowmouth.log">>$installdir/runback.shecho "echo /"/$(date +%Y-%m-%d_%k.%M.%S)開始打包......................................./">>$installdir/logs//$nowmouth.log">>$installdir/runback.shecho "gzip $installdir/zip//$nowdate.zip $installdir/temp/>>$installdir/logs//$nowmouth.log 2>&1">>$installdir/runback.shecho "rm -Rvf $installdir/temp/*>>$installdir/logs//$nowmouth.log 2>&1">>$installdir/runback.shecho "echo /"/$(date +%Y-%m-%d_%k.%M.%S)打包完成......................................./">>$installdir/logs//$nowmouth.log">>$installdir/runback.shscount=0if [ ${#rtype[@]} -ne 0 ]thenecho "echo /"/$(date +%Y-%m-%d_%k.%M.%S)進(jìn)行遠(yuǎn)程備份......................................./">>$installdir/logs//$nowmouth.log">>$installdir/runback.shsnum=${#rtype[@]}while [ $scount -lt $snum ]doecho "lftp -u ${rname[$scount]},${rpass[$scount]} ${rtype[$scount]}://${rurl[$scount]}<<remote">>$installdir/runback.shecho "mkdir remotedbback">>$installdir/runback.shecho "cd remotedbback">>$installdir/runback.shecho "mput $installdir/zip//$nowdate.zip">>$installdir/runback.shecho "exit">>$installdir/runback.shecho "remote">>$installdir/runback.shscount=$(($scount+1))doneecho "echo /"/$(date +%Y-%m-%d_%k.%M.%S)完成遠(yuǎn)程備份......................................./">>$installdir/logs//$nowmouth.log">>$installdir/runback.shfiecho "exit 0">>$installdir/runback.shchmod 775 $installdir/runback.shchown $execuser $installdir/runback.shecho "生成備份執(zhí)行文件完成............................"echo "開始定制值守時(shí)間................................"scount=0snum=${#backtime[@]}while [ $scount -lt $snum ]doecho "${backtime[$scount]} $installdir/runback.sh">>$installdir/planlistscount=$(($scount+1))donesu -l -c"crontab $installdir/planlist" oracleecho "完成值守時(shí)間定制................................"exit 0接下來給大家介紹linux oracle自動(dòng)備份腳本
1、備份腳本:
#!/bin/sh export ORACLE_BASE=/home/oracle export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1 export ORACLE_SID=orcl export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin export DATA_DIR=/home/bakup/data export LOGS_DIR=/home/bakup/logs export DELTIME=`date -d "7 days ago" +%Y%m%d` export BAKUPTIME=`date +%Y%m%d%H%M%S` mkdir -p $DATA_DIR mkdir -p $LOGS_DIR echo "Starting bakup..." echo "Bakup file path $DATA_DIR/$BAKUPTIME.dmp" exp shop/lyisABC0987@orcl file=$DATA_DIR/$BAKUPTIME.dmp log=$LOGS_DIR/$BAKUPTIME.log echo "Delete the file bakup before 7 days..." rm -rf $DATA_DIR/$DELTIME*.dmp rm -rf $LOGS_DIR/$DELTIME*.log echo "Delete the file bakup successfully. " echo "Bakup completed."
2、添加到任務(wù)調(diào)度
crontab -u oracle -e
* 3 * * * /home/bakup/bakup.sh
即每天凌晨3點(diǎn)進(jìn)行備份
如需每天備份多次,可設(shè)置不同時(shí)間段備份:
例如:* 3,13,18 * * * /home/bakup/bakup.sh,即每天3點(diǎn)、13點(diǎn)、18點(diǎn)進(jìn)行備份。
說明:文件備份目錄,用戶oracle必須有更改權(quán)限,否則無法備份。
新聞熱點(diǎn)
疑難解答
圖片精選