Oracle社区论坛:与200万技术人员互动交流,学习创建RMAN备份shell脚本

欢迎来到Oracle社区论坛,与200万技术人员互动>>进入 4.创建RMAN备份shell脚本[python] @BKDB01p:/u02/database/common/rman_scripts more db_bak_rman_catalog.sh ##======= =================================================== ===## 文件名

Oracle社区论坛:与200万技术人员互动交流,学习创建RMAN备份shell脚本

欢迎来到oracle社区论坛,与200万技术人员互动>>进入

4.创建RMAN备份shell脚本

[Python]

oracle@BKDB01p:/u02/database/common/rman_scripts> 更多 db_bak_rman_catalog.sh

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

## 文件名:db_bak_rman_catalog.sh

## 用法:db_bak_rman_catalog.sh

## 描述:

## 该脚本用于备份级别为 0 的数据库。

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

#!/bin/bash

# 用户特定的环境和启动程序

如果 [ -f ~/.bash_profile ];

然后

。 〜/ .bash_profile

菲

#-------------------------

# 检查SID

#-------------------------

如果 [ -z "${1}" ];那么

回声“用法:”

echo "`基本名称 $0` ORACLE_SID"

1号出口

菲

# ----------------------------------

# 在这里设置环境

# ----------------------------------

ORACLE_SID=${1};导出ORACLE_SID

TIMESTAMP=`日期 +%Y%m%d%H%M`;导出时间戳

LOG_DIR=/u02/数据库/${ORACLE_SID}/备份导出LOG_DIR

RMAN_LOG=${LOG_DIR}/${ORACLE_SID}_bak_${TIMESTAMP}.log

SSH_LOG=${LOG_DIR}/${ORACLE_SID}_bak_full_${TIMESTAMP}.log

MAIL_DIR=/users/oracle/sendEmail-v1.56

MAIL_FM=oracle@BKDB01p

保留=5

回声”------------------------------------------------ ----------------》${SSH_LOG}

echo "第1步.启动rman在`date`进行备份。" 》${SSH_LOG}

回声”------------------------------------------------ ----------------》${SSH_LOG}

$ORACLE_HOME/bin/rman log=${RMAN_LOG}《EOF

连接目标 sys/xxx@${ORACLE_SID}

连接目录 rman_user/xxx@CATADB

重新同步目录;

run {执行全局脚本global_inc0;}

出口;

EOF

RV=$?

猫 ${RMAN_LOG}》${SSH_LOG}

echo "" 》${SSH_LOG}

echo "======>MSG1: RMAN 备份于`date`结束。" 》${SSH_LOG}

如果 [ $RV -ne "0" ];然后

echo "" 》${SSH_LOG}

echo "======>MSG2: RMAN 备份在`date`发生错误。" 》${SSH_LOG}

$MAIL_DIR/sendEmail -f $MAIL_FM -u “‘主机名’上 $ORACLE_SID 的 RMAN 备份失败。” -t dba@12306.com -o 消息文件=${SSH_LOG}

出口

别的

echo "" 》${SSH_LOG}

echo "=====>MSG2: 在 `date` 的 RMAN 备份期间未发现错误" 》${SSH_LOG}

rm -rf ${RMAN_LOG} 2>/dev/null

菲

回声”------------------------------------------------ -----------------------》${SSH_LOG}

echo "步骤 2. 启动 ftp 备份集到`date` 备份服务器。" 》${SSH_LOG}

回声”------------------------------------------------ -----------------------》${SSH_LOG}

SRC_DB_BAK_DIR=/u02/database/${ORACLE_SID}/flash_recovery_area/${ORACLE_SID}

SRC_ADD=10.1.2.101

TARG_DB_BAK_DIR=/u02/database/${ORACLE_SID}/flash_recovery_area

RSYN_LOG=${LOG_DIR}/rsync_${TIMESTAMP}.log

# rsync用于将备份集ftp到bak服务器。

rsync -avzSH --progress --delete-after oracle@${SRC_ADD}:${SRC_DB_BAK_DIR} ${TARG_DB_BAK_DIR} >${RSYN_LOG} 2>&1

RV=$?

猫${RSYN_LOG}》${SSH_LOG}

如果 [ $RV -ne "0" ];然后

echo "" 》${SSH_LOG}

echo "======>MSG3: FTP 备份集在`date`发生错误。" 》${SSH_LOG}

MAIL_SUB="在`date`的`hostname`上$ORACLE_SID的归档日志同步失败。"

$MAIL_DIR/sendEmail -f $MAIL_FM -u $MAIL_SUB -t dba@12306.com -o 消息文件=${SSH_LOG}

出口

别的

echo "" 》${SSH_LOG}

echo -e "======>MSG3: FTP 期间未发现错误。" 》${SSH_LOG}

rm -rf $FTP_LOG 2>/dev/null

菲

回声”------------------------------------------------ -----------------------》${SSH_LOG}

echo“第 3 步。RMAN 备份和 ftp 备份集于‘日期’完成。” 》${SSH_LOG}

回声”------------------------------------------------ -----------------------》${SSH_LOG}

MAIL_SUB="已于`date`成功完成 ${ORACLE_SID} RMAN 备份和 ftp 备份集。"

$MAIL_DIR/sendEmail -f $MAIL_FM -u $MAIL_SUB -t dba@12306.com -o 消息文件=${SSH_LOG}

#------------------------------------------------

# 删除早于 $RETENTION 参数的文件

#------------------------------------------------

查找 ${LOG_DIR} -name "*.*" -mtime +$RETENTION -exec rm {};

出口

5.自动FTP归档日志脚本

[Python]

oracle@BKDB01p:/u02/database/common/rman_scripts> 更多 autoftp_arch.sh

#!/bin/bash

ORACLE_SID=${1};导出ORACLE_SID

TIMESTAMP=`日期 +%Y%m%d%H%M`;导出时间戳

LOG_DIR=/u02/数据库/${ORACLE_SID}/备份

#定义FTP变量

SRC_DB_BAK_DIR=/u02/数据库/${ORACLE_SID}/存档

SRC_ADD=10.1.2.101

TARG_DB_BAK_DIR=/u02/数据库/${ORACLE_SID}

RSYN_LOG=${LOG_DIR}/rsync_arc_${TIMESTAMP}.log

RSYN_ERR_LOG=${LOG_DIR}/rsync_arc_${TIMESTAMP}_err.log

rsync -avzSH --progress --delete-after oracle@${SRC_ADD}:${SRC_DB_BAK_DIR} ${TARG_DB_BAK_DIR} >${RSYN_LOG} 2>${RSYN_ERR_LOG}

RV=$?

如果 [ ! -s ${RSYN_ERR_LOG} ];然后

rm -rf ${RSYN_ERR_LOG} 2>/dev/null

别的

mail -s “`hostname` 上 $ORACLE_SID 的 FTP 归档日志失败” dba@12306.com fi

出口

6. 将备份脚本部署到crontab

如果你的数据库比较小,直接将上述备份脚本和自动FTP归档日志脚本部署到crontab即可。

如果你有很多数据库,建议将上面的脚本封装到另一个文件中,然后部署到crontab中。

比如下面的full_bak_by_rman.sh其实包含了多个db_bak_rman_catalog.sh,下面以full开头的使用类就是原理。

#Rman备份和恢复数据库

0 1 * * 1-6 /u02/database/common/rman_scripts/full_bak_by_rman.sh

0 3 * * 1-6 /u02/database/common/rman_scripts/full_resotre_by_rman.sh #这个是恢复用的脚本

#自动从prod ftp归档日志到bak服务器

*/16 7-20 * * 1-6 /u02/database/common/rman_scripts/full_autoftp_arch.sh

[1][2]

你可能想看:
« 上一篇
下一篇 »

相关推荐

php实时推送,php实地培训

2026年10月05日

55阅读

php乱码出现问号的原因,php乱码出现问号的原因有哪些

2026年10月05日

46阅读

php一句话木马,一句话木马ctf

2026年10月05日

49阅读

php获取数组长度,php中如何获取数组的长度

2026年10月05日

51阅读

php面试题库及答案,php程序员面试真题库

2026年10月05日

49阅读

phpcontent-type修改,php源码二次修改需要多少钱

2026年10月05日

44阅读