Oracle自動備份指令碼_oracle

來源:互聯網
上載者:User

廢話不多說了,直接給大家貼代碼了,具體代碼如下所示:

#!/bin/sh#******************************************************************# File: oraclebak.sh# Creation Date: 2014/1/22 17:57:32# Last Modified: 2014/1/22 17:57:34# 指令碼功能:oracle備份指令碼# 執行方法:1、第一次執行需要root使用者執行,指令碼會以詢問的方式建立備份目錄和相關參數# 2、指令碼會自動寫入crontab調度裡面定時執行,crontab設定是在第一次執行的時候自動添加的#******************************************************************echo $USERif [ $USER != root ]thenecho "檢測到安裝使用者不是root使用者,請用root使用者登入再執行安裝檔案"exit 1fiecho "開始安裝oracleDatabase Backup工具.........................."echo "請輸入備份程式的安裝目錄:"read installdirmkdir -p $installdirresult=$?while [ $result -ne 0 ]doecho "無法建立目錄,請重新輸入或退出安裝。輸入y重新輸入,輸入n退出安裝。"read redoif [ $redo != y ]thenecho "使用者退出安裝。"exit 0fiecho "請輸入備份程式的安裝目錄:"read installdirmkdir $installdirresult=$?doneecho "安裝目錄建立完成。"echo "請輸入執行備份使用者(一般為oracle使用者):"read execuserid $execuserresult=$?while [ $result -ne 0 ]doecho "不存在該使用者,是否更換其它使用者或者退出安裝建立使用者,輸入y更換使用者,輸入n退出安裝"read redoif [ $redo != y ]thenecho "使用者退出安裝"exit 0fiecho "請輸入執行備份的使用者(一般為tnmsdb2使用者)"read execuserid $execuserresult=$?doneecho "你希望建立備份的資料庫數量(一般為1)"read backnumif [ $backnum -eq 0 ]thenecho "無備份資料庫,退出安裝"exit 0fiscount=0while [ $scount -lt $backnum ]doecho "請輸入第"$(($scount+1))"個備份登入登入oracle資料庫的使用者名稱和密碼,以及本地服務名"echo "使用者名稱"read username[$scount]echo "密碼"read password[$scount]echo "服務名"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 "輸入資料庫資訊無法被串連,是否重新輸入?輸入y重新輸入,輸入n退出安裝。"read redoif [ $redo != y ]thenecho "使用者退出安裝"exit 0fielsescount=$(($scount+1))fidoneecho "輸入值守時間,值守時間的格式為 mm hh dd MM E 。"echo "m代表分鐘,h代表小時,d代表日期,M代表月份,E代表星期"echo "不輸入則為任意時間"scount=0iscontinue=ywhile [ $iscontinue == y ]doecho "輸入第$(($scount+1))個值守時間"echo "分鐘"read minecho "小時"read hourecho "日期"read dayif [ ! $day ]thenday="*"fiecho "月份"read mouthif [ ! $mouth ]thenmouth="*"fiweek="*"backtime[$scount]="$min $hour $day $mouth $week"echo -e "${backtime[$scount]}"echo "是否輸入更多值守時間?輸入y繼續,輸入n進入下一步。"read iscontinuescount=$(($scount+1))doneecho "是否要進行遠程備份?輸入y為進行遠程備份,輸入n進入下一步"scount=0read iscontinuewhile [ $iscontinue == y ]doecho "請選擇遠程備份類型,輸入s為sftp備份類型,否則為ftp備份類型"read issif [ $iss == s ]thenrtype[$scount]="sftp"elsertype[$scount]="ftp"fiecho "請輸入遠程備份地址,可以為網域名稱,電腦名稱或者ip地址"read rurl[$scount]echo "請輸入遠程備份登入名稱"read rname[$scount]echo "請輸入遠程備份登入密碼"read rpass[$scount]echo "是否輸入更多遠程備份地址?輸入y重新輸入,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 "執行備份系統使用者為$execuser"echo "系統備份資料庫:"allcount=${#username[@]}scount=0while [ $scount -lt $allcount ]doecho "${username[$scount]}/${password[$scount]}@${sname[$scount]}"scount=$(($scount+1))doneecho "執行備份的值守時間表,*代表任意"scount=0backnum=${#backtime[@]}while [ $scount -lt $backnum ]doecho "${backtime[$scount]}"scount=$(($scount+1))donernum=${#rtype[@]}if [ $rnum -ne 0 ]thenecho "遠程備份的服務地址為:"scount=0while [ $scount -lt $rnum ]doecho "串連方式:${rtype[$scount]},串連地址:${rurl[$scount]},使用者名稱:${rname[$scount]},密碼:${rpass[$scount]}"scount=$(($scount+1))donefiecho "是否確認安裝?輸入y繼續,輸入n退出安裝"read isgoonif [ $isgoon != y ]thenexit 0;fiecho "正在生產目錄結構................................";mkdir -p $installdir/logsmkdir -p $installdir/tempmkdir -p $installdir/zipchown -Rvf $execuser $installdirecho "目錄結構產生完成................................"echo "產生備份執行檔案................................"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)進行遠程備份.......................................\">>$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)完成遠程備份.......................................\">>$installdir/logs/\$nowmouth.log">>$installdir/runback.shfiecho "exit 0">>$installdir/runback.shchmod 775 $installdir/runback.shchown $execuser $installdir/runback.shecho "產生備份執行檔案完成............................"echo "開始定製值守時間................................"scount=0snum=${#backtime[@]}while [ $scount -lt $snum ]doecho "${backtime[$scount]} $installdir/runback.sh">>$installdir/planlistscount=$(($scount+1))donesu -l -c"crontab $installdir/planlist" oracleecho "完成值守時間定製................................"exit 0

接下來給大家介紹linux oracle自動備份指令碼

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、添加到任務調度

crontab -u oracle -e
* 3 * * * /home/bakup/bakup.sh
即每天淩晨3點進行備份
如需每天備份多次,可設定不同時間段備份:
例如:* 3,13,18 * * * /home/bakup/bakup.sh,即每天3點、13點、18點進行備份。
說明:檔案備份目錄,使用者oracle必須有更改許可權,否則無法備份。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.