linux下rman全库备份脚本,linux 下RMAN备份shell脚本

转载自:https://blog.csdn.net/leshami/article/category/827733/2

RMAN备份对于Oracle数据库的备份与恢复简单易用,成本低廉。对于使用非catalog方式而言,将RMAN脚本嵌入到shell脚本,然后再通过crontab来实现中小型数据库数据库备份无疑是首选。本文提供了一个简单易用的基于linux shell下的RMAN备份脚本供参考。大家可根据自己的需要进行适当调整。

下面是脚本的具体内容

[python] view plain copy

##===========================================================

## 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 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

oracle@SZDB:~/robinson/scripts/dba_scripts/custom/sql> ./db_bak_rman.sh GOBO1 0

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

20120928 log

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值