linux 下RMAN备份shell脚本
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
- 转:http://blog.csdn.net/leshami/article/details/8029245
linux 下RMAN备份shell脚本的更多相关文章
- 在Linux下如何用Shell脚本读写XML?现有一个config.xml(转)
在Linux下如何用Shell脚本读写XML?现有一个config.xml <?xml version="1.0" encoding="UTF-8"?&g ...
- Linux下如何执行Shell脚本
Linux下你可以有两种方式执行Shell脚本: 1.用shell程序执行脚本:根据你的shell脚本的类型,选择shell程序,常用的有sh,bash,tcsh等(一般来说第一行#!/bin/bas ...
- linux下如何编写shell脚本
我对shell脚本的认识,除了执行过同事写的shell 脚本外,其他一无所知,为了让自己强大,我决定自己研究shell脚本,也许在你看来很简答,没必要说这么多废话,但是我希望在我的技术log里记录下来 ...
- linux下后台执行shell脚本nohup
(一)使用nohup后台执行脚本 脚本执行结果记录到nohup.out文件中 (二)使用&后台执行脚本 使用&符号在后台执行命令或脚本后,如果你退出登录,这个命令就会被自动终止掉
- Linux下定时备份MySQL数据库的Shell脚本
Linux下定时备份MySQL数据库的Shell脚本 对任何一个已经上线的网站站点来说,数据备份都是必须的.无论版本更新还是服务器迁移,备份数据的重要性不言而喻.人工备份数据的方式不单耗费大量时间 ...
- Linux 平台下 RMAN 全备 和 增量备份 shell 脚本
转:http://blog.csdn.net/tianlesoftware/article/details/5740630 全备脚本 以 nocatalog 模式为例: Shell 脚本: ##### ...
- Debian下自动备份文件并上传到远程FTP服务器且删除指定日期前的备份Shell脚本
说明: 1.备份目录/home/osyunwei下面所有的文件到/home/osyunweibak里面,并且保存为osyunwei20120701.tar.gz的压缩文件格式(2012_07_01是 ...
- Linux下自动备份MySQL数据库并上传到远程FTP服务器
Linux下自动备份MySQL数据库并上传到远程FTP服务器且删除指定日期前的备份Shell脚本 说明: 1.备份MySQL数据库存放目录/var/lib/mysql下面的xshelldata数据库 ...
- Linux下远程备份、上传工程,重启服务器
Linux下远程备份.上传工程,重启服务器 Linux服务器实现远程,原项目的备份.删除,新项目上传,以及远程重启服务器!分成一个主shell调用三个shell文件步骤完成.mainsh.sh一次按顺 ...
随机推荐
- node-debug 三法三例之node debugger + node inspector
大家对nodejs调试应该都比较头疼,至少我这个不用IDE写js的人很头疼这个,其实node的生态圈非常好 有非常好的工具和非常潮的开发方式 这里总结了3法3例,希望能对大家有所帮助 文档地址 ht ...
- CSS深入理解之line-height
以下文字整理自慕课网——张鑫旭的<CSS深入理解之line-height>. line-height,又称行高,指的是两行文字基线之间的距离,又可以称为这行文字所占的高度. 定义三问: 什 ...
- js&html5实现消星星游戏
前段时间看见园子里有同学用js+jquery实现了消星星游戏,自己也早有这个想法,于是就利用业余时间用js+html5实现了一下消星星游戏. 主要是想实现效果,运用了css3中的动画属性.游戏积分算法 ...
- 【poj1061-青蛙的约会】拓展欧几里得-不定方程
http://poj.org/problem?id=1061 题意:裸题.注意负数. //poj1061 #include<cstdio> #include<cstdlib> ...
- GET和POST测试(支持需要登录的接口调用:高级功能->填写cookie)
http://coolaf.com
- Android笔记——JDK实现WebService服务
以天气预报为例,国家气象局计算的天气信息后在其服务器Server通过WebService对外暴露天气信息数据,客户端无论是java平台,ios平台,c#平台都可以通过WebService获取数据.体现 ...
- Docker搭建MySQL服务
Docker开源镜像 前面我们已经安装好了Docker,也简单了解了Docker.那么我们可以尝试搭建一个MySQL服务. 要搭建服务就要启动服务容器,要创建容易就要有镜像,Docker提供了一个类似 ...
- 【web性能】js应该放在html页面的什么位置
所有浏览器在下载JS的时候,会阻止一切其他活动,比如其他资源的下载,内容的呈现等等.至到JS下载.解析.执行完毕后才开始继续并行下载其他资源并呈现内容. 外部JS的阻塞下载 所有浏览器在下载JS的 ...
- Wireshark 网络抓包工具Wireshark的使用
阅读目录 wireshark介绍 wireshark不能做的 wireshark VS Fiddler 同类的其他工具 什么人会用到wireshark wireshark 开始抓包 wireshark ...
- 【推荐】HTML5 UI框架 推荐
笔者的男装网店:http://shop101289731.taobao.com .冬装,在寒冷的冬季温暖你.新品上市,环境选购 最近自己瞎搞一下web网页的东西.想开发先找资源. 整理了一下HTML5 ...