linux rman 备份脚本,Linux 下RMAN备份shell脚本

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_10b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值