linux 下RMAN备份shell脚本

简介:        RMAN备份对于Oracle数据库的备份与恢复简单易用,成本低廉。对于使用非catalog方式而言,将RMAN脚本嵌入到shell脚本,然后再通过crontab来实现中小型数据库数据库备份无疑是首选。

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

 

RMAN备份相关方面的知识较多,可以参考:
    RMAN 概述及其体系结构
    RMAN 配置、监控与管理
    RMAN 备份详解
    RMAN 还原与恢复
    RMAN catalog 的创建和使用
    基于catalog 创建RMAN存储脚本
    基于catalog 的RMAN 备份与恢复
    RMAN 备份路径困惑
   
其次是对于shell脚本中调用sql,rman语句可以参考
  Linux/Unix shell 脚本中调用SQL,RMAN脚本
  Linux/Unix shell sql 之间传递变量
   
下面是脚本的具体内容

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

更多参考: 

基于用管理的备份备份请参

    Oracle 冷备份

    Oracle 热备份

    Oracle 备份恢复概念

    Oracle 实例恢复

    Oracle 基于用户管理恢复的处理(详细描述了介及其)

    SYSTEM 表空间管理及备份恢复

    SYSAUX表空间管理及恢复

   Oracle 基于备份控制文件的恢复(unsing backup controlfile)

 

RMAN的备份复与管理请参

    RMAN 概述及其体系结构

    RMAN 配置、监控与管理

    RMAN 备份详解

    RMAN 还原与恢复

    RMAN catalog 的创建和使用

    基于catalog 创建RMAN存储脚本

    基于catalog 的RMAN 备份与恢复

    RMAN 备份困惑

 

ORACLE体系结构请参

    Oracle 表空间与数据文件

    Oracle 密码文件

    Oracle 参数文件

    Oracle 联机重做日志文件(ONLINE LOG FILE)

    Oracle 控制文件(CONTROLFILE)

    Oracle 归档日志

    Oracle 回滚(ROLLBACK)和撤销(UNDO)

    Oracle 数据库实例启动关闭过程

    Oracle 10g SGA 的自动化管理

    Oracle 实例和Oracle数据库(Oracle体系结构)    

目录
相关文章
|
2天前
|
消息中间件 Java Kafka
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
|
1月前
|
存储 Shell Linux
Linux 如何更改默认 Shell
Linux 如何更改默认 Shell
36 0
Linux 如何更改默认 Shell
|
1月前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
109 3
|
1月前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
50 3
|
1月前
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
2月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
76 1
|
7月前
|
Shell 索引
shell脚本入门到实战(四)- 数组
shell脚本入门到实战(四)- 数组
|
7月前
|
Shell
shell脚本入门到实战(三) - 变量
shell脚本入门到实战(三) - 变量
|
7月前
|
Shell Linux 人机交互
shell脚本入门到实战(二)--shell输入和格式化输出
shell脚本入门到实战(二)--shell输入和格式化输出
455 0