1. 全備(包括控制檔案)
[oracle@centos6 scripts]$ cat rman_backup.shsource /home/oracle/.bash_profilerman target / log=/home/oracle/backup/backupall_rman.log<<EOFrun{allocate channel ch1 device type disk; #分配通道allocate channel ch2 device type disk;sql 'alter system archive log current'; #歸檔當前日誌backup database format '/home/oracle/backup/db_%d_%T_%U';sql 'alter system archive log current';backup archivelog all format '/home/oracle/backup/arch_%t_%s' delete all input;backup format '/home/oracle/backup/con_%s_%p' current controlfile;crosscheck backup;crosscheck archivelog all;delete noprompt expired backup;delete noprompt obsolete;delete noprompt backup of database completed before 'sysdate -15';delete noprompt archivelog all;delete noprompt backup of archivelog all completed before 'sysdate -15';release channel ch1;release channel ch2;}EOF
2. 支援全庫備份及增量備份
[oracle@centos6 scripts]$ cat db_back_rman.sh##===========================================================## db_bak_rman.sh ## created by Robinson ## 2011/11/07 ## usage: db_bak_rman.sh <$ORACLE_SID> <$BACKUP_LEVEL>## BACKUP_LEVEL: ## F: full backup## 0: level 0## 1: level 1 ##============================================================#!/bin/bash# User specific environment and startup programsif [ -f ~/.bash_profile ]; then. ~/.bash_profilefiORACLE_SID=${1}; export ORACLE_SID RMAN_LEVEL=${2}; export RMAN_LEVELTIMESTAMP=`date +%Y%m%d%H%M`; export TIMESTAMP DATE=`date +%Y%m%d`; export DATE RMAN_DIR=/u02/database/${ORACLE_SID}/backup/rman; export RMAN_DIR RMAN_DATA=${RMAN_DIR}/${DATE}; export RMAN_DATA #RMAN_LOG=$RMAN_DATA/log; export RMAN_LOG RMAN_LOG=/u02/database/${ORACLE_SID}/backup/rman/log export RMAN_LOG # Check rman level #======================================================================if [ "$RMAN_LEVEL" == "F" ];then unset INCR_LVL BACKUP_TYPE=fullelse INCR_LVL="INCREMENTAL LEVEL ${RMAN_LEVEL}" BACKUP_TYPE=lev${RMAN_LEVEL} fiRMAN_FILE=${RMAN_DATA}/${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}; export RMAN_FILESSH_LOG=${RMAN_LOG}/${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}.log; export SSH_LOGMAXPIECESIZE=4G; export MAXPIECESIZE#Check RMAN Backup Path#=========================================================================if ! test -d ${RMAN_DATA}thenmkdir -p ${RMAN_DATA}fiecho "---------------------------------" >>${SSH_LOG}echo " " >>${SSH_LOG}echo "Rman Begin to Working ........." >>${SSH_LOG}echo "Begin time at:" `date` --`date +%Y%m%d%H%M` >>${SSH_LOG}#Startup rman to backup #=============================================================================$ORACLE_HOME/bin/rman log=${RMAN_FILE}.log <<EOFconnect target /run {CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;CONFIGURE BACKUP OPTIMIZATION ON;CONFIGURE CONTROLFILE AUTOBACKUP ON;CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '${RMAN_FILE}_%F';ALLOCATE CHANNEL 'ch1' TYPE DISK maxpiecesize=${MAXPIECESIZE};ALLOCATE CHANNEL 'ch2' TYPE DISK maxpiecesize=${MAXPIECESIZE};set limit channel ch1 readrate=10240;set limit channel ch1 kbytes=4096000;set limit channel ch2 readrate=10240;set limit channel ch2 kbytes=4096000;CROSSCHECK ARCHIVELOG ALL;DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;BACKUP #AS COMPRESSED BACKUPSET ${INCR_LVL}DATABASE FORMAT '${RMAN_FILE}_%U' TAG '${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}';SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';BACKUP ARCHIVELOG ALL FORMAT '${RMAN_FILE}_arc_%U' TAG '${ORACLE_SID}_arc_${TIMESTAMP}'DELETE INPUT;DELETE NOPROMPT OBSOLETE;RELEASE CHANNEL ch1;RELEASE CHANNEL ch2;}sql "alter database backup controlfile to ''${RMAN_DATA}/cntl_${BACKUP_TYPE}.bak''";exit;EOFRC=$?cat ${RMAN_FILE}.log >>${SSH_LOG}echo "Rman Stop working @ time:"`date` `date +%Y%m%d%H%M` >>${SSH_LOG}echo >>${SSH_LOG}echo "------------------------" >>${SSH_LOG}echo "------ Disk Space ------" >>${SSH_LOG}df -h >>${SSH_LOG}echo >>${SSH_LOG}if [ $RC -ne "0" ]; then echo "------ error ------" >>${SSH_LOG}else echo "------ no error found during RMAN backup peroid------" >>${SSH_LOG} rm -rf ${RMAN_FILE}.logfi#Remove old backup than 3 days#============================================================================RMDIR=${RMAN_DIR}/`/bin/date +%Y%m%d -d "3 days ago"`; export RMDIRecho >>${SSH_LOG}echo -e "------Remove old backup than 3 days ------\n" >>${SSH_LOG}if test -d ${RMDIR} then rm -rf ${RMDIR} RC=$?fiecho >>${SSH_LOG}if [ $RC -ne "0" ]; then echo -e "------ Remove old backup exception------ \n" >>${SSH_LOG}else echo -e "------ no error found during remove old backup set peroid------ \n" >>${SSH_LOG}fiexit