(shell)rman备份脚本

本文详细介绍了如何使用RMAN(RMAN是Oracle数据库的备份恢复管理器)进行全库备份,包括控制文件的备份。通过Shell脚本自动化这个过程,提升数据库维护效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 全备(包括控制文件)

[oracle@centos6 scripts]$ cat rman_backup.sh
source /home/oracle/.bash_profile
rman target / log=/home/oracle/backup/backupall_rman.log<<EOF
run
{
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 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 <<EOF
connect 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;
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}

if test -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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值