在ORACLE数据库中,RMAN备份的脚本非常多,下面介绍一例shell脚本如何通过RMAN备份,以及FTP上传RMAN备份文件以及归档日志文件的脚本。

fullback.sh 里面调用RMAN命令做数据库备份,它使用的cmdfile为/home/oracle/backup/bin/fullback.rcv,同时在/home/oracle/backup/logs目录下生成日志文件。

   1: [oracle@DB-Server bin]$ more fullback.sh

   2:  

   3: #!/bin/bash

   4:  

   5: export ORACLE_BASE=/u01/app/oracle

   6:  

   7: export ORACLE_SID=gps

   8:  

   9: ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1; export ORACLE_HOME

  10:  

  11: TMP=/tmp; export TMP

  12:  

  13: TMPDIR=$TMP; export TMPDIR

  14:  

  15: PATH=/usr/sbin:$PATH; export PATH

  16:  

  17: PATH=$ORACLE_HOME/bin:$PATH; export PATH

  18:  

  19: LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH

  20:  

  21: CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;

  22:  

  23: export CLASSPATH

  24:  

  25: TODAY=`date +%Y_%m_%d`

  26:  

  27: rman nocatalog target / cmdfile /home/oracle/backup/bin/fullback.rcv log /home/oracle/backup/logs/fullbackup_$TODAY.log

  28:  

  29: /home/oracle/backup/bin/ftpbackup.sh

  30:  

fullback.rcv文件非常简单, 如下所示:

   1: [oracle@DB-Server bin]$ more /home/oracle/backup/bin/fullback.rcv

   2:  

   3: run{

   4:  

   5: allocate channel c4 type disk;

   6:  

   7: backup as compressed backupset

   8:  

   9: skip inaccessible

  10:  

  11: tag fullbackupwitharchivelog

  12:  

  13: (database);

  14:  

  15: backup current controlfile;

  16:  

  17: backup spfile;

  18:  

  19: sql "alter system archive log current";

  20:  

  21: delete noprompt obsolete;

  22:  

  23: release channel c4;

  24:  

  25: }

  26:  

RMAN生成的备份文件,需要通过FTP上传到FTP服务器,一则数据库服务器没有这么多空间存储多天的备份,二则是出于容灾、数据安全需要。

下面脚本中FTP服务器,用户名密码均使用xxx替代,在实际环境中,使用具体的信息替代即可。

   1: [oracle@DB-Server bin]$ more ftpbackup.sh 

   2:  

   3: #!/bin/sh、

   4:  

   5: rm -f /home/oracle/.netrc

   6:  

   7: date_yesterday=`date -d'yesterday' +%Y_%m_%d`

   8:  

   9: date_today=`date +%Y_%m_%d`

  10:  

  11: echo "default login xxxx password xxxxxx" >> /home/oracle/.netrc

  12:  

  13: echo "macdef init" >> /home/oracle/.netrc

  14:  

  15: echo "binary" >> /home/oracle/.netrc

  16:  

  17: echo "cd archivelog" >> /home/oracle/.netrc

  18:  

  19: echo "mkdir $date_yesterday" >> /home/oracle/.netrc

  20:  

  21: echo "cd $date_yesterday" >> /home/oracle/.netrc

  22:  

  23: echo "lcd /u04/flash_recovery_area/gps/archivelog/$date_yesterday" >> /home/oracle/.netrc

  24:  

  25: echo "mput *" >> /home/oracle/.netrc

  26:  

  27: echo "cd .." >> /home/oracle/.netrc

  28:  

  29: echo "mkdir $date_today" >>/home/oracle/.netrc

  30:  

  31: echo "cd $date_today" >>/home/oracle/.netrc

  32:  

  33: echo "lcd /u04/flash_recovery_area/gps/archivelog/$date_today" >>/home/oracle/.netrc

  34:  

  35: echo "mput * ">>/home/oracle/.netrc

  36:  

  37: echo "cd .." >>/home/oracle/.netrc

  38:  

  39: echo "cd ../backupset" >> /home/oracle/.netrc

  40:  

  41: echo "mkdir $date_today" >> /home/oracle/.netrc

  42:  

  43: echo "cd $date_today" >> /home/oracle/.netrc

  44:  

  45: echo "lcd /u04/flash_recovery_area/gps/backupset/$date_today" >> /home/oracle/.netrc

  46:  

  47: echo "mput *" >> /home/oracle/.netrc

  48:  

  49: echo "cd .." >> /home/oracle/.netrc

  50:  

  51: echo "cd ../autobackup" >> /home/oracle/.netrc

  52:  

  53: echo "mkdir $date_today" >> /home/oracle/.netrc

  54:  

  55: echo "cd $date_today" >> /home/oracle/.netrc

  56:  

  57: echo "lcd /u04/flash_recovery_area/gps/autobackup/$date_today" >> /home/oracle/.netrc

  58:  

  59: echo "mput *" >> /home/oracle/.netrc

  60:  

  61: echo "quit" >> /home/oracle/.netrc

  62:  

  63: echo "" >> /home/oracle/.netrc

  64:  

  65: chmod 600 /home/oracle/.netrc

  66:  

  67: ftp -i -v xxx.xxx.xxx.xxx 8021 >>/home/oracle/backup/logs/ftp$date_today.log 2>&1

  68:  

另外,关于归档日志也需要每隔2小时上传一次到FTP服务器,2小时上传一次归档日志的shell脚本如下所示:

   1: [oracle@DB-Server bin]$ more ftp2hours.sh 

   2:  

   3: #!/bin/sh

   4:  

   5: rm -f /home/oracle/.netrc

   6:  

   7: date_yesterday=`date -d'yesterday' +%Y_%m_%d`

   8:  

   9: date_today=`date +%Y_%m_%d`

  10:  

  11: echo "default login xxxx password xxxx" >> /home/oracle/.netrc

  12:  

  13: echo "macdef init" >> /home/oracle/.netrc

  14:  

  15: echo "binary" >> /home/oracle/.netrc

  16:  

  17: echo "cd archivelog" >> /home/oracle/.netrc

  18:  

  19: echo "mkdir $date_today" >>/home/oracle/.netrc

  20:  

  21: echo "cd $date_today" >>/home/oracle/.netrc

  22:  

  23: echo "lcd /u04/flash_recovery_area/gps/archivelog/$date_today" >>/home/oracle/.netrc

  24:  

  25: echo "mput * ">>/home/oracle/.netrc

  26:  

  27: echo "quit" >> /home/oracle/.netrc

  28:  

  29: echo "" >> /home/oracle/.netrc

  30:  

  31: chmod 600 /home/oracle/.netrc

  32:  

  33: ftp -i -v xxx.xxx.xxx.xxx 8021 >>/home/oracle/backup/logs/ftp2hours.$date_today.log 2>&1

  34:  

最后需要将RMAN备份生成的日志文件,以及FTP上传备份文件以及归档日志的记录通过邮件形式发送给DBA或系统管理员,

   1: [oracle@DB-Server bin]$ more chkbackandmail.sh 

   2: #!/bin/bash

   3: rm -f /home/oracle/backup/bin/sendmail.pl

   4: date_today=`date +%Y_%m_%d`

   5: subject="Oracle Backup Alert Service on $date_today"

   6: content="Dear colleagues,

   7:  

   8:    Attached please find the logs of xxx(xxx.xxx.xxx.xxx) oracle database backup and transfer to FTP Server(xxx.xxx.xxx.xxx), please

   9:  review the file and check whether the backup succeeded or not,and double check all backups have been dumped to tape, many tha

  10: nks

  11:  

  12:  

  13:  

  14:  

  15: Best regards

  16: Oracle Alert Services

  17:  

  18: "

  19: file="/home/oracle/backup/logs/fullbackup_$date_today.log,/home/oracle/backup/logs/ftp$date_today.log"

  20: echo "#!/usr/bin/perl" >> /home/oracle/backup/bin/sendmail.pl

  21: echo "use Mail::Sender;" >> /home/oracle/backup/bin/sendmail.pl

  22: echo "\$sender = new Mail::Sender {smtp => 'xxx.xxx.xxx.xxx', from => 'xxxx@xxx.com'}; ">> /home/oracle/backup/bin/sendmai

  23: l.pl

  24: echo "\$sender->MailFile({to => 'xxx@esquel.com',">> /home/oracle/backup/bin/sendmail.pl

  25: echo "cc=>'xxx@xxx.com,xxx@xxx.com,xxx@xxx.com'," >> /home/oracle/backup/b

  26: in/sendmail.pl

  27: echo "subject => '$subject',">> /home/oracle/backup/bin/sendmail.pl

  28: echo "msg => '$content',">> /home/oracle/backup/bin/sendmail.pl

  29: echo "file => '$file'});">> /home/oracle/backup/bin/sendmail.pl

  30: perl /home/oracle/backup/bin/sendmail.pl

最后在Crontab 作业里面配置调用这些shell脚本。例如如下所示,在1:01分执行fullback.sh ,每隔两个小时(例如0:50、2:50...)执行一次ftp2hours.sh, 在每天早上8:40执行chkbackandmail.sh 发送fullback.sh 以及ftp2hour.sh的执行日志记录。

RMAN备份脚本一列分享的更多相关文章

  1. RMAN备份脚本执行遇到RMAN-03002,06091问题处理

    一 问题描述 客户说RMAN备份脚本执行有的时候报错,有的时候正常!!! 远程登陆客户环境,查询最后一次备份的日志报错信息,得到 RMAN-03002: failure of delete comma ...

  2. 一周RMAN备份脚本

    #! /bin/bash#crontab---->00 20 * * 0 su - oracle -c '/scripts/oracle_full_backup.sh'#crontab----& ...

  3. RMAN备份脚本

      单机环境全备   export ORACLE_BASE=/oracle export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1 export ORA ...

  4. RMAN备份脚本--DataGuard primary

    单机环境全备   export ORACLE_BASE=/oracle export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1 export ORACL ...

  5. 一个简单的RMAN自动备份脚本

    rman备份脚本: #!/bin/bashsource /home/oracle/.bash_profile rman target / << EOFrun {allocate chann ...

  6. linux 下RMAN备份shell脚本

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

  7. RMAN详细教程(三):备份脚本的组件和注释

    RMAN详细教程(一):基本命令代码 RMAN详细教程(二):备份.检查.维护.恢复 RMAN详细教程(三):备份脚本的组件和注释 RMAN详细教程(四):备份脚本实战操作 一.基本组件: 1.Ser ...

  8. oracle数据库rman备份计划及恢复

    1.rman完全恢复的前提条件:历史的datafile,controlfile和spfile备份,加上完整的archivelog和完好的redolog. 2.rman备份脚本: a.RMAN 0级备份 ...

  9. 如何中途停止RMAN备份任务

    问题背景 如果,你负责的数据库服务器,在RMAN进行全备时,业务又有大量数据要处理,一时间,系统资源直接被耗尽,影响到了业务的正常,你准备怎么处理? 解决办法 [不推荐]当时我们组的另外一个同事在没有 ...

随机推荐

  1. JavaScript 框架设计

    JavaScript 高级框架设计 在现在,jQuery等框架已经非常完美,以致于常常忽略了JavaScript原生开发,但是这是非常重要的. 所以,我打算写一个简单的框架,两个目的 熟练框架的思想 ...

  2. 利用SkyDrive Pro 迅速批量下载SharePoint Server 上已上传的文件

    在上一篇<SharePoint Server 2013 让上传文件更精彩>,我们一起了解了如何快速的方便的上传批量文件到SharePoint Server 2013 ,而在这一篇日志中您将 ...

  3. Web接口测试工具---Poster与Postman

    工作当中有不少时间在编写和维护接口自动化测试用例.打算先整理一些接口相关工具的使用. 简单对接Web口测试的相关工具/技术做个划分. HTTP/SOAP协议接口的功能测试: 1.浏览器URL(GET请 ...

  4. CentOS 7.2 yum方式安装MySQL 5.7

    CentOS 7之后的版本yum的默认源中使用MariaDB替代原先MySQL,因此安装方式较为以往有一些改变: 下载mysql的源 wget http://dev.mysql.com/get/mys ...

  5. Game中的状态机

    我相信大多数博友都会玩游戏. 玩游戏,牵涉到状态包含 登陆,正常,死亡,复活,下线, 在上面状态的基础上.同时包含 站立,走动,跑动,不可移动施法状态, 战斗状态, 通常这是三个不同的分组.也就说可以 ...

  6. phpcurl 请求Chunked-Encoded data 遇到的一个问题

    最早出现的问题情况是提供es的部门在es的外部封装了一个gateway做请求中转. 当我们转换到gateway上之后,发现了问题: 有的请求可以获取到数据,有的请求获取不到数据. 仔细分析了业务代码, ...

  7. jQuery Mobile案例,最近用Moon.Web和Moon.Orm做了一套系统

      一.简介 先说说,我们的主题.jQuery Mobile,最近用Moon.Web和Moon.Orm做了一套系统 jQuery Mobile是jQuery 在手机上和平板设备上的版本.jQuery ...

  8. window.open

    window.open 的三个参数 第一个参数:url 第二个参数:对应新打开标签或者窗口的window.name属性,如果为填默认为 "_blank" 第三个参数:如果有则打开的 ...

  9. 从零开始,搭建博客系统MVC5+EF6搭建框架(5),博客详情页、留言、轮播图管理、右侧统计博文

    一.博客系统进度回顾 上一遍博客介绍到,系统已经实现到了发布以及前台布局展示,接下来就是实现一些,详情页,留言.轮播图管理.右侧博文统计信息实现. 二.博客系统详情页实现 2.1先来看看详情页展示的效 ...

  10. package.json for npm中依赖外部组件时常用的版本符号含义

    package.json中会有dependencies定义了项目依赖的外部组件,这些外部组件的依赖都是带有版本符号以表示被依赖组件的版本范围. { "dependencies" : ...