中小型資料庫 RMAN CATALOG 備份恢復方案(二)
中小型資料庫呈現的是資料庫併發少,資料庫容量小,版本功能受限以及N多單例項等特點。儘管如此,資料庫的損失程度也會存在零丟失的情形。企業不願意花太多的錢又要保證資料庫的可靠穩定,可是苦煞了我這些搞DB的。接上一篇文章,中小型資料庫 RMAN CATALOG 備份恢復方案(一),我們繼續來給出基於中小型資料庫的恢復的指令碼與其部署。
1、RMAN還原shell指令碼
- --下面的shell指令碼用於實現資料庫的自動還原,還原成功後,資料庫被關閉。因為我們在Prod資料庫無異常的情形下,不需要bak 的備用庫open
- --shell指令碼做還原時呼叫了catalog中的全域性指令碼global_restore
- --在指令碼最尾部,我們將DB還原是否成功的狀態輸出到日誌檔案db_restore_rman.log,這樣做的好處是我們可以將多個DB的還原狀態集中,便於檢視
- $ more db_restore_rman_catalog.sh
- ##====================================================================
- ## File name: db_restore_rman_catalog.sh
- ## Usage: db_restore_rman_catalog.sh
- ## Desc:
- ## The script uses to restore database with level 0 backupset.
- ## Author: Robinson
- ## Blog : http://blog.csdn.net/robinson_0612
- ##====================================================================
- #!/bin/bash
- # --------------------
- # Define variable
- # --------------------
- if [ -f ~/.bash_profile ]; then
- . ~/.bash_profile
- fi
- # --------------------------
- # Check SID
- # --------------------------
- if [ -z "${1}" ];then
- echo "Usage: "
- echo " `basename $0` ORACLE_SID"
- exit 1
- fi
- ORACLE_SID=${1}; export ORACLE_SID
- LOG_DIR=/u02/database/${ORACLE_SID}/backup; export RMAN_DIR
- TIMESTAMP=`date +%Y%m%d%H%M` export TIMESTAMP
- RMAN_LOG=${LOG_DIR}/${ORACLE_SID}_restore_${TIMESTAMP}.log; export RMAN_LOG
- SSH_LOG=${LOG_DIR}/${ORACLE_SID}_restore_full_${TIMESTAMP}.log; export SSH_LOG
- RETENTION=5
- echo "----------------------------------------------------------------" >>${SSH_LOG}
- echo "Start rman to backup at `date`." >>${SSH_LOG}
- echo "----------------------------------------------------------------" >>${SSH_LOG}
-
$ORACLE_HOME/bin/rman target / catalog rman_user/xxx@catadb log=${RMAN_LOG} <
- startup nomount;
- run{execute global script global_restore;}
- exit;
- EOF
- RV=$?
- cat ${RMAN_LOG}>>${SSH_LOG}
- echo "" >>${SSH_LOG}
- echo "----------------------------------------------------------------" >>${SSH_LOG}
- echo "MSG1: RMAN restore end at `date`." >>${SSH_LOG}
- echo "----------------------------------------------------------------" >>${SSH_LOG}
- if [ $RV -ne "0" ]; then
- echo "----------------------------------------------------------------" >>${SSH_LOG}
- echo "MSG2: RMAN restore error at `date`." >>${SSH_LOG}
- echo "----------------------------------------------------------------" >>${SSH_LOG}
- RMAN_STAT='FAILED'
- mail -s "Failed RMAN restore for $ORACLE_SID on `hostname`." dba@12306.com
- else
- echo "----------------------------------------------------------------" >>${SSH_LOG}
- echo "MSG2: No error found for RMAN restore at `date`." >>${SSH_LOG}
- echo "----------------------------------------------------------------" >>${SSH_LOG}
- RMAN_STAT='SUCCEED'
- rm -rf ${RMAN_LOG} 2>/dev/null
- fi
- echo "`date '+%F %X'` -- $0 $1 $RMAN_STAT ">> /u01/comm_scripts/db_restore_rman.log
- exit
2、檢測還原狀態shell指令碼
- --我們用一個shell指令碼來檢測多個DB當天最終的還原狀態成功與否,並將當前的所有記錄輸出到ck_restore.log日誌
- --指令碼尾部傳送郵件列出當天所有進行restore之後的所有狀態,是一個多個DB restore 的summary report.
- $ more ck_restore.sh
- ##====================================================================
- ## File name: ck_restore.sh
- ## Usage: ck_restore.sh
- ## Desc:
- ## The script uses to check RMAN restore log for current day
- ## and send mail to DBA
- ## Author: Robinson
- ## Blog : http://blog.csdn.net/robinson_0612
- ##====================================================================
- #!/bin/bash
- if [ -f ~/.bash_profile ];
- then
- . ~/.bash_profile
- fi
- REV_DIR=/u01/comm_scripts
- dt=`date '+%F'`
- cat /dev/null >${REV_DIR}/ck_restore.log
- cat ${REV_DIR}/db_restore_rman.log | grep "${dt}" >>${REV_DIR}/ck_restore.log
- total=`cat ${REV_DIR}/ck_restore.log |wc -l`
- suc=`grep SUCCEED ${REV_DIR}/ck_restore.log |wc -l`
- fail=`grep FAILED ${REV_DIR}/ck_restore.log |wc -l`
- echo "">>ck_restore.log
- echo -e "The total DB of current recovery is $total in `hostname` \n">>${REV_DIR}/ck_restore.log
- echo -e "The number of succee is : ${suc} \n">>${REV_DIR}/ck_restore.log
- echo -e "The number of fail is : ${fail} \n">>${REV_DIR}/ck_restore.log
- mail -s "RMAN restore summary for `hostname` at `date +'%a %b %d %Y'`" dba@12306.com
3、部署還原shell指令碼到crontab
- --首先將多個需要自動restore的DB封裝到一個單獨的檔案,如下:
- --最後呼叫ck_restore.sh 腳步檢測所有DB restore狀態併傳送RMAN summary report郵件
- $ more full_resotre_by_rman.sh
- #!/bin/bash
- /u01/comm_scripts/db_restore_rman_catalog.sh BC1200
- /u01/comm_scripts/db_restore_rman_catalog.sh AF2630
- /u01/comm_scripts/ck_restore.sh
- --部署到crontab
- --注,無論是備份還是恢復指令碼,我們都是透過Bak server的crontab來部署以減輕Prod的壓力
- #Rman restore database
- 0 3 * * 1-6 /u01/comm_scripts/full_resotre_by_rman.sh
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23490154/viewspace-1062379/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 中小型資料庫 RMAN CATALOG 備份恢復方案(一)資料庫
- 【備份恢復】RMAN catalog 恢復目錄資料庫資料庫
- 【RMAN】使用恢復目錄catalog備份目標資料庫的演示資料庫
- RMAN備份 建立catalog資料庫資料庫
- Oracle 備份恢復篇之RMAN catalogOracle
- rman資料庫全庫備份與恢復資料庫
- RMAN備份恢復——備份到帶庫的效能(二)
- RMAN備份恢復典型案例——資料庫卡頓資料庫
- 非RMAN熱備份資料庫和恢復資料庫
- Oracle資料庫備份與恢復之RMANOracle資料庫
- 【備份恢復】從備份恢復資料庫資料庫
- RMAN備份恢復——RAC環境資料庫的備份(zt)資料庫
- RMAN備份恢復--RAC環境資料庫的備份(十)資料庫
- RMAN備份恢復——RAC環境資料庫的備份(一)資料庫
- rman備份恢復-rman恢復資料檔案測試
- RMAN備份恢復整個庫
- rman恢復資料庫--用備份的控制檔案資料庫
- Oracle資料庫備份與恢復之RMAN2Oracle資料庫
- RMAN 備份與恢復深入解析(二)
- 備份與恢復:polardb資料庫備份與恢復資料庫
- RMAN備份恢復——備份到帶庫的效能
- catalog備份資料庫及RMAN儲存指令碼資料庫指令碼
- RMAN備份恢復之控制檔案的恢復(二)
- 只存在RMAN備份片的資料庫恢復過程資料庫
- ORACLE DG從庫 Rman備份恢復Oracle
- 【備份恢復】noarchive模式下使用增量備份恢復資料庫Hive模式資料庫
- 【備份恢復】閃回資料庫(五)RMAN 命令列閃回資料庫資料庫命令列
- 【管理篇備份恢復】rman恢復測試(二) 控制檔案恢復(二)
- rman資料備份恢復學習筆記筆記
- RMAN備份恢復原理
- rman備份恢復-rman入門
- RAC環境利用備份恢復RAC資料庫(二)資料庫
- 資料庫恢復到備份之前測試_RMAN-06556資料庫
- RAC資料庫的RMAN備份異機恢復到單節點資料庫資料庫
- 達夢資料庫備份恢復資料庫
- postgresql備份與恢復資料庫SQL資料庫
- mongo資料庫備份與恢復Go資料庫
- 資料庫的備份與恢復資料庫