易网时代-编程资源站
Welcome
微信登录
首页
/
数据库
/
MySQL
/
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 <$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 ------ "
>>${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------ "
>>${SSH_LOG}
else
echo -e
"------ no error found during remove old backup set peroid------ "
>>${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
读取SQL Server日志及代理日志Oracle RAC 监听配置 (listener.ora tnsnames.ora)相关资讯 RMAN
RMAN故障一例(归档的备份,从不 (今 20:42)
RMAN的FORMATA格式说明 (03月10日)
Oracle 11g RMAN复制数据库的测试 (01月19日)
RMAN数据库迁移 (05月22日)
使用RMAN复制恢复开发库环境 (02月17日)
Oracle 11g RMAN跨平台传输表空间 (01月19日)
本文评论 查看全部评论 (0)
表情: 姓名:
匿名
字数
版权所有©石家庄振强科技有限公司2024
冀ICP备08103738号-5
网站地图