廢話不多說了,直接給大家貼代碼了,具體代碼如下所示:
#!/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 "開始安裝oracle數據庫備份工具.........................."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必須有更改權限,否則無法備份。