oracle rman 定时备份脚本

近期需要出个oracle定时备份的方案,可以恢复到最新状态,参考 http://blog.sina.com.cn/s/blog_7756ebc30100tnqy.html,我又在shell中加工了一下,弄了2个shell脚本,init.sh, oraclebackup.sh,执行init.sh  param1(备份文件路径) param2(归档日志路径),就可以设置定时备份了,脚本会设置定时器,详细内容参见init.sh文件的开头说明,下面贴出脚本代码:
init.sh

#!/bin/sh
# oracle自动定时备份程序
#说明:init.sh 和 oraclebackup.sh是oracle自动定时备份的2个shell脚本。
# 备份工具:RMAN
# 备份方式:增量备份
# 归档模式:是
# 使用示例: ./init.sh /home/dev/databasebackup /home/dev/archivelogbackup
# 第一个参数是oracle备份文件的存储目录,第二个参数是归档重做日志的存储目录
# 每次备份数据库时也会备份归档重做日志,然后删除归档重做日志
# 这2个脚本需要放到oracle服务器
# 环境变量中需要提前配置好ORACLE_BASE,ORACLE_HOME,ORACLE_SID
# 安装后的oracle默认是非归档模式
# init.sh脚本执行过程中需要重启数据库
#init.sh脚本执行流程:
# 1.将2个目录参数替换到oraclebackup.sh
# 2.将ORACLE_BASE,ORACLE_HOME,ORACLE_SID这3个环境变量替换到oraclebackup.sh
# 3.配置RMAN
# 4.将oracle设置为归档模式
# 5.生成定时器文件
# 6.设置定时器,定时对oracle进行备份,备份文件默认保存15天
# 每周日1:00执行0级备份
# 每周一至周三,周五至周六1:00执行2级增量备份
# 每周四1:00执行1级增量备份
# 每周六16:00执行检测
# 每周日18:00删除过期的备份数据
#
# 执行完init.sh后,也可以进行手动备份和恢复数据库
# 进行0级备份:
# oraclebackup.sh -l0  
# 进行1级备份
# oraclebackup.sh -l1  
# 进行2级备份
# oraclebackup.sh -l2 
# 检测备份完整性
# oraclebackup.sh -c
# 删除过期的备份,默认保存15天
# oraclebackup.sh -d
# 恢复数据库到最新状态
# oraclebackup.sh -r
#日志:
# 脚本执行的log在第一个参数(/home/dev/databasebackup)的rmanlog目录下,即/home/dev/databasebackup/rmanlog,
# 可以定期检查这个文件夹下面的log,查看备份信息




DATABASE_PATH=""
ARCHIVELOG_PATH=""
ORACLE_BASE_VAL=""
ORACLE_HOME_VAL=""
ORACLE_SID_VAL=""


KEY1="DATABASE_PATH"
KEY2="ARCHIVELOG_PATH"
KEY3="export ORACLE_BASE"
KEY4="export ORACLE_HOME"
KEY5="export ORACLE_SID"


#配置RMAN,备份保留15天,优化备份,自动备份控制文件,控制文件的备份位置
TEMPLATE_RMANCMD="connect target /;
        run {
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 15 DAYS;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'oldpath_database/controlfile_backup/controlfile_%F';
}"

RMANCMD=""


#替换RMAN命令中的路径参数
function replaceRmanCMD()
{
RMANCMD=`echo ${TEMPLATE_RMANCMD} | sed -n "s#oldpath_database#${DATABASE_PATH}#p"`

echo "==================RMANCMD======================"
echo ${RMANCMD}
echo "==============================================="
}


#执行RMAN命令,配置RMAN
function setRmanConf()
{
rman log=\'${DATABASE_PATH}/rmanlog/paidb_rman_conf.log\' append <     ${RMANCMD}
EOF
}


#把oracle设置为归档模式
function setArchiveLog()
{
sqlplus / as sysdba < shutdown immediate;
startup mount;
alter database archivelog;
alter system set control_file_record_keep_time=30 scope=both;
alter system set log_archive_dest_1='location=${ARCHIVELOG_PATH}/archivelog' scope=both;
alter database open;
alter system archive log start;
exit; 
EOF
}


#创建定时器文件crontabfile,设置定时器
#每周日1:00执行0级备份
#每周一至周三,周五至周六1:00执行2级增量备份
#每周四1:00执行1级增量备份
#每周六16:00执行检测
#每周日18:00删除过期的备份数据
function setCrontab()
{
if [ -e ./crontabfile ]
then
rm ./crontabfile
fi

touch ./crontabfile

chmod 777 ./crontabfile

#每周日1:00执行0级备份
echo "0 1 * * 0 `pwd`/oraclebackup.sh -l0" >> crontabfile

#每周一至周三,周五至周六1:00执行2级增量备份
echo "0 1 * * 1-3,5-6 `pwd`/oraclebackup.sh -l2" >> crontabfile

#每周四1:00执行1级增量备份
echo "0 1 * * 4 `pwd`/oraclebackup.sh -l1" >> crontabfile

#每周六16:00执行检测
echo "0 18 * * 6 `pwd`/oraclebackup.sh -c" >> crontabfile

#每周日18:00删除过期的备份数据
echo "0 18 * * 0 `pwd`/oraclebackup.sh -d" >> crontabfile

crontab ./crontabfile
}


#创建子目录,归档日志目录下创建archivelog
#数据库备份目录下创建rmanlog,controlfile_backup,database_backup目录
#如果已经存在,则不创建
function makeSubDir()
{
if [ ! -d "${ARCHIVELOG_PATH}/archivelog" ]
then
mkdir ${ARCHIVELOG_PATH}/archivelog
fi

if [ ! -d "${ARCHIVELOG_PATH}/rmanlog" ]
then
mkdir ${DATABASE_PATH}/rmanlog
fi

if [ ! -d "${ARCHIVELOG_PATH}/controlfile_backup" ]
then
mkdir ${DATABASE_PATH}/controlfile_backup
fi

if [ ! -d "${ARCHIVELOG_PATH}/database_backup" ]
then
mkdir ${DATABASE_PATH}/database_backup
fi
}


#把数据库备份目录参数替换到oraclebackup.sh
function replaceDatabaseBakPath()
{
sed -i "s#^\(${KEY1} *= *\)\([^ ]*\)\( *.*\)#\1${DATABASE_PATH}\3#" ./oraclebackup.sh
}


#把归档日志目录参数替换到oraclebackup.sh
function replaceArchivelogBakPath()
{
sed -i "s#^\(${KEY2} *= *\)\([^ ]*\)\( *.*\)#\1${ARCHIVELOG_PATH}\3#" ./oraclebackup.sh
}


#把ORACLE_HOME等参数替换到oraclebackup.sh
function replaceOracleHome()
{
sed -i "s#^\(${KEY3} *= *\)\([^ ]*\)\( *.*\)#\1${ORACLE_BASE_VAL}\3#" ./oraclebackup.sh
sed -i "s#^\(${KEY4} *= *\)\([^ ]*\)\( *.*\)#\1${ORACLE_HOME_VAL}\3#" ./oraclebackup.sh
sed -i "s#^\(${KEY5} *= *\)\([^ ]*\)\( *.*\)#\1${ORACLE_SID_VAL}\3#" ./oraclebackup.sh
}


function usage()
{
echo "------------------------------------------------------------------------"
echo 
echo "Example:"
echo "      Sample:    ./init.sh  /aaa/bbb/databaseBackupPath  /aaa/bbb/archivelogBackupPath"
echo 
echo "note: The path must be exist!"
echo "------------------------------------------------------------------------"
}


#指定的路径不存在
function pathNotExist()
{
echo "************************************************************************"
echo 
echo "Path: ${1} not Exist!"
echo 
echo "************************************************************************" 
}


#环境变量没找到
function envNotFound()
{
echo "************************************************************************"
echo 
echo "env ${1} not found!"
echo 
echo "************************************************************************" 
}


function check()
{
if [ ! -d "$DATABASE_PATH" ]
then
pathNotExist ${1}
exit 0
fi

if [ ! -d "$ARCHIVELOG_PATH" ]
then
pathNotExist ${2}
exit 0
fi

if [ ! $ORACLE_BASE ]
then
envNotFound "ORACLE_BASE"
exit 0
fi

if [ ! $ORACLE_HOME ]
then
envNotFound "ORACLE_HOME"
exit 0
fi

if [ ! $ORACLE_SID ]
then
envNotFound "ORACLE_SID"
exit 0
fi
}


function main()
{
if (( $# < "2"))
then
usage
exit 0
fi 

DATABASE_PATH=$1

ARCHIVELOG_PATH=$2

DATABASE_PATH=${DATABASE_PATH%/}

ARCHIVELOG_PATH=${ARCHIVELOG_PATH%/}

check

ORACLE_BASE_VAL=$ORACLE_BASE

ORACLE_HOME_VAL=$ORACLE_HOME

ORACLE_SID_VAL=$ORACLE_SID

replaceOracleHome

makeSubDir

replaceDatabaseBakPath

replaceArchivelogBakPath

replaceRmanCMD

setRmanConf

echo "---------&gtstart conf archive log"

setArchiveLog 


echo "---------&gtend conf archive log"

chmod 777 ./oraclebackup.sh

setCrontab


}


main $1 $2


oraclebakcup.sh

#!/bin/sh
export ORACLE_BASE=
export ORACLE_HOME=
export ORACLE_SID=
export PATH=$ORACLE_HOME/bin:$PATH


DATABASE_PATH=""
ARCHIVELOG_PATH=""


#====================================================
#0级备份rman命令
TEMPLATE_RMANCMD_LEVEL0=" connect target /;
        run {
                allocate channel c1 type disk;
                backup incremental level=0 database format 'oldpath_database/database_backup/paidb_level0_%U' tag='level0';
                sql 'alter system archive log current';
                backup archivelog all format 'oldpath_archive/archivelog/paidb_arch_%U' delete input;
                release channel c1;
        }
";


#1级备份rman命令
TEMPLATE_RMANCMD_LEVEL1=" connect target /;
        run {
                allocate channel c1 type disk;
                backup incremental level=1 database format 'oldpath_database/database_backup/paidb_level1_%U' tag='level1';
                sql 'alter system archive log current';
                backup archivelog all format 'oldpath_archive/archivelog/paidb_arch_%U' delete input;
                release channel c1;
        }
";


#2级备份rman命令
TEMPLATE_RMANCMD_LEVEL2=" connect target /;
        run {
                allocate channel c1 type disk;
                backup incremental level=2 database format 'oldpath_database/database_backup/paidb_level2_%U' tag='level2';
                sql 'alter system archive log current';
                backup archivelog all format 'oldpath_archive/archivelog/paidb_arch_%U' delete input;
                release channel c1;
        }
";
#======================替换路径后的RMAN命令=======================
RMANCMD_LEVEL0=""
RMANCMD_LEVEL1=""
RMANCMD_LEVEL2=""
#==============================================================


#替换0级备份命令中的路径参数
function replaceRmanCMDl0()
{
RMANCMD_LEVEL0=`echo ${TEMPLATE_RMANCMD_LEVEL0} | sed -n "s#oldpath_database#${DATABASE_PATH}#p"`


RMANCMD_LEVEL0=`echo ${RMANCMD_LEVEL0} | sed -n "s#oldpath_archive#${ARCHIVELOG_PATH}#p"`

echo "##################RMANCMD######################"
echo ${RMANCMD_LEVEL0}
echo "###############################################"
}


#替换1级备份命令中的路径参数
function replaceRmanCMDl1()
{
RMANCMD_LEVEL1=`echo ${TEMPLATE_RMANCMD_LEVEL1} | sed -n "s#oldpath_database#${DATABASE_PATH}#p"`


RMANCMD_LEVEL1=`echo ${RMANCMD_LEVEL1} | sed -n "s#oldpath_archive#${ARCHIVELOG_PATH}#p"`

echo "##################RMANCMD######################"
echo ${RMANCMD_LEVEL1}
echo "###############################################"
}


#替换2级备份命令中的路径参数
function replaceRmanCMDl2()
{
RMANCMD_LEVEL2=`echo ${TEMPLATE_RMANCMD_LEVEL2} | sed -n "s#oldpath_database#${DATABASE_PATH}#p"`


RMANCMD_LEVEL2=`echo ${RMANCMD_LEVEL2} | sed -n "s#oldpath_archive#${ARCHIVELOG_PATH}#p"`

echo "##################RMANCMD######################"
echo ${RMANCMD_LEVEL2}
echo "###############################################"
}


#====================================================
#0级备份
function backupLevel0()
{
rman log=\'${DATABASE_PATH}/rmanlog/paidb_rman_level0.log\' append < ${RMANCMD_LEVEL0}
EOF
}


#1级备份
function backupLevel1()
{
rman log=\'${DATABASE_PATH}/rmanlog/paidb_rman_level1.log\' append < ${RMANCMD_LEVEL1}
EOF
}


#2级备份
function backupLevel2()
{
rman log=\'${DATABASE_PATH}/rmanlog/paidb_rman_level2.log\' append < ${RMANCMD_LEVEL2}
EOF
}


#检查oracle备份文件,如果有损坏的记录,会放进V$DATABASE_BLOCK_CORRUPTION视图中,
#需要DBA定期检查V$DATABASE_BLOCK_CORRUPTION视图,块被修复后,
#V$DATABASE_BLOCK_CORRUPTION中相应的记录会被自动删除
function backupcheck()
{
rman log=\'${DATABASE_PATH}/rmanlog/rmancheck.log\' append < connect target /;
run {
#check database
backup validate check logical database;
#check backup set
restore database validate check logical;
#crosscheck backup
crosscheck backup;
}
EOF
}


#删除过期的备份文件
function backupDelete()
{
rman log=\'${DATABASE_PATH}/rmanlog/rmandelete.log\' append < connect target /;
run {
delete noprompt obsolete;
delete noprompt expired backup;
}
EOF
}


#恢复数据库到最新状态
function backupRestore()
{
rman log=\'${DATABASE_PATH}/rmanlog/rmanrestore.log\' append < connect target /;
run {
restore database;
recover database;
}
EOF
}


#====================================================
#0级备份
function backupl0()
{
replaceRmanCMDl0

backupLevel0 
}


#1级备份
function backupl1()
{
replaceRmanCMDl1
    
    backupLevel1 
}


#2级备份
function backupl2()
{
replaceRmanCMDl2

    backupLevel2 
}


#检查备份文件
function backupck()
{
backupcheck 
}


#删除过期的备份文件
function backupdel()
{
backupDelete 
}


#恢复数据库到最新状态
function backupres()
{
backupRestore
}


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


function usage()
{
echo "------------------------------------------------------------------------"
echo 
echo "Example:"
echo "      Sample:    ./oraclebackup.sh  -l0|-l1|-l2|-c|-d|-r"
echo 
echo "note: -l0 backup level0 0级备份
-l1 backup level1 1级备份
-l2 backup level2 2级备份
-c  backup check 检查备份
-d  backup delete 删除过期备份
-r  backup restore" 恢复数据库到最新状态
echo "------------------------------------------------------------------------"
}


function main()
{
if (( $# < "1" ))
then
usage
exit 0
fi

case "$1" in
"-l0")
backupl0
exit 0
;;
"-l1")
backupl1
exit 0
;;
"-l2")
backupl2
exit 0
;;
"-c")
backupck
exit 0
;;
"-d")
backupdel
exit 0
;;
"-r")
backupres
exit 0
;;
esac

usage
}


main $1








来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12478376/viewspace-1125549/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12478376/viewspace-1125549/

(第12天)Oracle 本地部署 RMAN 脚本定时备份数据库 想必大家都听过一句话:备份是数据安全的最后一道防线。数据库是整个系统以及公司最重要的数据存放仓库,如果数据损坏丢失,将直接影响到公司业务以及财产的损失,Oracle RMAN 是官方推出最流行的在线热备方式,安全高效,部署简单,所以前几节就来展开讲讲 Oracle RMAN 备份 阅读详情

相关推荐

100天精通Oracle-实战系列(第12天)Oracle 本地部署 RMAN 脚本定时备份数据库

100天精通Oracle-实战系列(第12天)Oracle本地部署RMAN脚本定时备份数据库

LuciferLiu_DBA 1644

windows 脚本_超详细的windows下定期执行rman备份教程(脚本+方法介绍)

概述最近在梳理Oracle、mysql、sqlserver的备份情况,由于很多老系统都搭建在windows下,为了保证安全性,决定执行定期的备份。下面讲述了如何在windows下使用脚本+windows定时任务实现定期执行全备的方法。01备份脚本//配置rmanrman target sys/RuMn4#5x nocatalog>CONFIGURE RETENTION POLICY TO R...

weixin_39853523的博客 1221

一套Oracle集群RMAN备份的实现

作者:IT邦德 中国DBA联盟(ACDU)成员,目前从事DBA及程序编程 (Web\java\Python)工作,主要服务于生产制造 现拥有 Oracle 11g OCP/OCM、 Mysql、Oceanbase(OBCA)认证 分布式TBase\TDSQL数据库、国产达梦数据库以及红帽子认证 从业8年DBA工作,在数据库领域有丰富的经验 B站主播Oracle、Mysql、PG实战课程,请搜索:jeames007 擅长Oracle数据库运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。 文章

IT邦德 2057

Oracle rman定时备份数据库

Oracle rman定时备份数据库

2778

oracle 定时 归档备份,Oracle 使用RMAN自动备份

1、用Oracle身份登陆2、编写自动备份脚本并清除归档日志$ vi /home/oracle/backs.sh#!/bin/shsource /home/oracle/.bash_profilecd $ORACLE_HOME/binrman target / nocatalog msglog=/home/oracle/rman_bk_`date '+%Y%m%d%H%M%S'`.log &l...

weixin_40001519的博客 410

Rman-ORACLE数据库RMAN实现自动备份

1.备份方式:在M模块数据库各节点使用nfs方式挂载10.30.1.12的/billbak4/MDSPDBbak目录,作为备份存储空间,可以满足RAC架构数据库备份的需求。2.配置NFS服务器(以下操作需要有root 用户权限)...

cuchengjiao8603的博客 205

oracle rman定时备份,RMAN定时备份脚本

Rman定时备份脚本1、定时备份任务DB1-> crontab -l30 22 * * * /rmanbackup/scripts/rmanbackup.sh2、脚本内容DB1-> more /rmanbackup/scripts/rmanbackup.sh#/bin/bash#export ...export ORACLE_BASE=/oracle/dbexport ORACLE...

weixin_30786813的博客 869

oracleRMAN定时备份shell脚本。恢复步骤及恢复示例

配置rman备份参数: su - oracle rman target/ RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON; RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/rmanbak/controlfile/%F'; RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/u01/rmanbak/cont

搬砖的鱼的博客 4881

oracle备份恢复---分享RMAN定时备份和增备脚本(0+1)

racle备份恢复---分享RMAN定时备份和增备脚本RMAN定时全备脚本2、脚本内容(oracle执行) RMAN定时全备脚本 1、建立对应目录 mkdir -p /rmanbackup/rmanlog mkdir -p /rmanbackup/dbbak mkdir -p /rmanbackup/scripts mkdir -p /rmanbackup/week mkdir -p /rman...

mystic2008的博客 2823

rman备份_oracle备份恢复---分享RMAN定时备份和增备脚本(0+1)

概述分享之前自己写的两个rman备份恢复脚本,大家可以自己跟着测试一下,修改一些自定义参数,根据实际情况更改创建目录,全备及增量备份的日期根据需要设置就可以了。下面分享下脚本的内容。RMAN定时全备脚本1、建立对应目录mkdir -p /rmanbackup/rmanlogmkdir -p /rmanbackup/dbbakmkdir -p /rmanbackup/scriptsmkdir -p ...

weixin_39791322的博客 392

oracle 0级 1级备份,rman定时自动0级+1级备份详细步骤(crontab+SHELL脚本

1、 配置 rman(1)修改备份策略冗余度为 2CONFIGURE RETENTION POLICY TO REDUNDANCY 2;(2)修改控制文件自动备份CONFIGURE CONTROLFILE AUTOBACKUP ON;(3)修改备份控制文件路径CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPEDISK TO '/backu...

weixin_28771631的博客 882

Linux定时执行oracle脚本,linux自动运行rman增量备份脚本

一、增量备份脚本0级备份脚本:红色部分为自定义的备份文件放置的目录#script.:BackupFull.sh#creater:xyh#date:2014-03-08#desc:backup full database datafile in archive with rman#connect databaseexport ORACLE_BASE=/u01/app/oracleexport ORA...

weixin_39603622的博客 244

RMAN Oracle数据库定时备份脚本

目标: 1、每天夜间1点执行; 2、数据库全备份,同时备份控制文件及归档日志文件,备份文件保存至D:\app\oracle\backup\目录下,并在完成归档日志文件备份后,自动删除已备份的归档日志; 3、备份保留...

cuihe2154的博客 131

oracle12c定时备份,【原创】Oracle数据库RMAN的自动备份脚本

操作系统:Linux数据库:oracle9.2.0.41、数据库设置为归档方式2、数据库的备份脚本db_full_backup.sh :数据库全备脚本db_l0_backup.sh :数据库0级备份脚本db_l1_backup.sh :数据库1级备份脚本ftp.sh :数据FTP上传脚本ftp_del.sh :数据FTP清理脚本rman_bak.sh :数据备份主程序3、备份原理每周1、3、6进行...

weixin_42509197的博客 639

oracle定时备份SHELL,Oracle 11g EXPDP、RMAN自动备份SHELL脚本

#!/bin/shumask 022set -o viexport ORACLE_SID=marketexport ORACLE_BASE=/app/usr/oracleexport ORACLE_HOME=$ORACLE_BASE/product/11gr2export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/libex...

weixin_36068796的博客 230

完美无敌Oracle RMAN备份脚本

本篇文章主要介绍如何去部署一份RMAN热备脚本,能够应付绝大部分的备份恢复场景,可以确保在发生故障后,备份恢复数据不会丢失。

qq_34595089的博客 3601

(转)RAC RMAN定期备份及删除脚本

oracle rman备份及删除脚本、 1.环境说明: os–linux oracle–11.2.03 一台服务器上两个库orcl prod RAC双节点环境,采用节点1执行定制备份及删除脚本 2.备份策略说明: 1)周1 周4 周6 执行全库备份,加上备份产生的归档,周2 周3 周日执行归档日志备份 备注:因为数据库为10g以下的小库,采用全库备份;如果是大库而且变化较小的库,采用增量备份; 2...

minwave 1220

RMAN 备份脚本

备份脚本内容:

451
上一篇: oracle system 表空间32G问题解决一例
下一篇: Oracle11g Data Guard配置手册
coyxadc0396
博客等级 码龄11年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值