数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

中小型数据库RMAN CATALOG备份解决办法


发布日期:2018年04月12日
 
中小型数据库RMAN CATALOG备份解决办法

RMAN还原shell脚本

[python]

下面的shell脚本用于实现数据库的自动还原还原成功后数据库被关闭因为我们在Prod数据库无异常的情形下不需要bak 的备用库open

shell脚本做还原时调用了catalog中的全局脚本global_restore

在脚本最尾部我们将DB还原是否成功的状态输出到日志文件db_restore_rmanlog这样做的好处是我们可以将多个DB的还原状态集中便于查看

$ more db_restore_rman_catalogsh

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

## File name: db_restore_rman_catalogsh

## Usage: db_restore_rman_catalogsh <$ORACLE_SID>

## Desc:

## The script uses to restore database with level backupset

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

#!/bin/bash

#

# Define variable

#

if [ f ~/bash_profile ]; then

~/bash_profile

fi

#

# Check SID

#

if [ z ${} ];then

echo Usage:

echo `basename $` ORACLE_SID

exit

fi

ORACLE_SID=${}; export ORACLE_SID

LOG_DIR=/u/database/${ORACLE_SID}/backup; export RMAN_DIR

TIMESTAMP=`date +%Y%m%d%H%M` export TIMESTAMP

RMAN_LOG=${LOG_DIR}/${ORACLE_SID}_restore_${TIMESTAMP}log; export RMAN_LOG

SSH_LOG=${LOG_DIR}/${ORACLE_SID}_restore_full_${TIMESTAMP}log; export SSH_LOG

RETENTION=

echo 》${SSH_LOG}

echo Start rman to backup at `date` 》${SSH_LOG}

echo 》${SSH_LOG}

$ORACLE_HOME/bin/rman target / catalog rman_user/xxx@catadb log=${RMAN_LOG} 《EOF

startup nomount;

run{execute global script global_restore;}

exit;

EOF

RV=$?

cat ${RMAN_LOG}》${SSH_LOG}

echo 》${SSH_LOG}

echo 》${SSH_LOG}

echo MSG: RMAN restore end at `date` 》${SSH_LOG}

echo 》${SSH_LOG}

if [ $RV ne ]; then

echo 》${SSH_LOG}

echo MSG: RMAN restore error at `date` 》${SSH_LOG}

echo 》${SSH_LOG}

RMAN_STAT=FAILED

mail s Failed RMAN restore for $ORACLE_SID on `hostname`  <${SSH_LOG}

else

echo 》${SSH_LOG}

echo MSG: No error found for RMAN restore at `date` 》${SSH_LOG}

echo 》${SSH_LOG}

RMAN_STAT=SUCCEED

rm rf ${RMAN_LOG} >/dev/null

fi

echo `date +%F %X` $ $ $RMAN_STAT 》 /u/comm_scripts/db_restore_rmanlog

exit

检测还原状态shell脚本

[python]

我们用一个shell脚本来检测多个DB当天最终的还原状态成功与否并将当前的所有记录输出到ck_restorelog日志

脚本尾部发送邮件列出当天所有进行restore之后的所有状态是一个多个DB restore 的summary report

$ more ck_restoresh

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

## File name: ck_restoresh

## Usage: ck_restoresh

## Desc:

## The script uses to check RMAN restore log for current day

## and send mail to DBA

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

#!/bin/bash

if [ f ~/bash_profile ];

then

~/bash_profile

fi

REV_DIR=/u/comm_scripts

dt=`date +%F`

cat /dev/null >${REV_DIR}/ck_restorelog

cat ${REV_DIR}/db_restore_rmanlog | grep ${dt} 》${REV_DIR}/ck_restorelog

total=`cat ${REV_DIR}/ck_restorelog |wc l`

suc=`grep SUCCEED ${REV_DIR}/ck_restorelog |wc l`

fail=`grep FAILED ${REV_DIR}/ck_restorelog |wc l`

echo 》ck_restorelog

echo e The total DB of current recovery is $total in `hostname` \n》${REV_DIR}/ck_restorelog

echo e The number of succee is : ${suc} \n》${REV_DIR}/ck_restorelog

echo e The number of fail is : ${fail} \n》${REV_DIR}/ck_restorelog

mail s RMAN restore summary for `hostname` at `date +%a %b %d %Y`  <${REV_DIR}/ck_restorelog

部署还原shell脚本到crontab

[python]

首先将多个需要自动restore的DB封装到一个单独的文件如下

最后调用ck_restoresh 脚步检测所有DB restore状态并发送RMAN summary report邮件

$ more full_resotre_by_rmansh

#!/bin/bash

/u/comm_scripts/db_restore_rman_catalogsh BC

/u/comm_scripts/db_restore_rman_catalogsh AF

/u/comm_scripts/ck_restoresh

部署到crontab

无论是备份还是恢复脚本我们都是通过Bak server的crontab来部署以减轻Prod的压力

#Rman restore database

* * /u/comm_scripts/full_resotre_by_rmansh

               

上一篇:Oracle外连接和“+”号的用法

下一篇:Oracle中如何根据时间来执行JOB