RMAN备份对于Oracle数据库的备份与恢复简单易用,成本低廉。对于使用非catalog方式而言,将RMAN脚本嵌入到shell脚本,然后再通过crontab来实现中小型数据库数据库备份无疑是首选。本文提供了一个简单易用的基于linux shell下的RMAN备份脚本供参考。大家可根据自己的需要进行适当调整。
下面是脚本的具体内容##===========================================================
## db_bak_rman.sh
## created by Robinson
## 2011/11/07
## usage: db_bak_rman.sh
## BACKUP_LEVEL:
## F: full backup
## 0: level 0
## 1: level 1
##============================================================
#!/bin/bash
# User specific environment and startup programs
if[ -f ~/.bash_profile ];
then
. ~/.bash_profile
fi
ORACLE_SID=${1}; export ORACLE_SID
RMAN_LEVEL=${2}; export RMAN_LEVEL
TIMESTAMP=`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=full
else
INCR_LVL="INCREMENTAL LEVEL ${RMAN_LEVEL}"
BACKUP_TYPE=lev${RMAN_LEVEL}
fi
RMAN_FILE=${RMAN_DATA}/${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}; export RMAN_FILE
SSH_LOG=${RMAN_LOG}/${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}.log; export SSH_LOG
MAXPIECESIZE=4G; export MAXPIECESIZE
#Check RMAN Backup Path
#=========================================================================
if! test -d ${RMAN_DATA}
then
mkdir -p ${RMAN_DATA}
fi
echo"---------------------------------">>${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 <
connect target /
run {
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF3DAYS;
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;
EOF
RC=$?
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}.log
fi
#Remove old backup than 3 days
#============================================================================
RMDIR=${RMAN_DIR}/`/bin/date +%Y%m%d -d"3 days ago"`; export RMDIR
echo >>${SSH_LOG}
echo -e"------Remove old backup than 3 days ------\n">>${SSH_LOG}
iftest -d ${RMDIR}
then
rm -rf ${RMDIR}
RC=$?
fi
echo >>${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}
fi
exit
oracle@SZDB:~/robinson/scripts/dba_scripts/custom/sql> ./db_bak_rman.sh GOBO10
RMAN> RMAN>2>3>4>5>6>7>8>9>10>11>12>13>14>15>
16>17>18>19>20>21>22>23>24> RMAN> RMAN>
oracle@SZDB:~/robinson/scripts/dba_scripts/custom/sql>
oracle@SZDB:/u02/database/GOBO1/backup/rman> ls
20120928log
oracle@SZDB:/u02/database/GOBO1/backup/rman/20120928> ls
cntl_lev0.bak GOBO1_lev0_201209281421_arc_4onmb9ro_1_1
GOBO1_lev0_201209281421_4knmb9jn_1_1 GOBO1_lev0_201209281421_c-733951103-20120928-00
GOBO1_lev0_201209281421_4lnmb9jn_1_1 GOBO1_lev0_201209281421_c-733951103-20120928-01
GOBO1_lev0_201209281421_arc_4nnmb9rn_1_1