RMAN备份脚本一列分享

在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的执行日志记录。

时间: 2024-08-03 13:13:08

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

ORACLE数据库的RMAN备份脚本例子

在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/b

rman备份脚本和rman增量备份脚本分享_oracle

一.单独备份1.经典整库备份:backup as compressed backupset database include current controlfile plus archivelog delete all input;2.tablespace:backup tablespace 名字;3.数据文件:backup datafile n; (n:具体的数据文件编号select file_name,file_id,tablespace_name from dba_data_files;)

linux 下RMAN备份shell脚本

       RMAN备份对于Oracle数据库的备份与恢复简单易用,成本低廉.对于使用非catalog方式而言,将RMAN脚本嵌入到shell脚本,然后再通过crontab来实现中小型数据库数据库备份无疑是首选.本文提供了一个简单易用的基于linux shell下的RMAN备份脚本供参考.大家可根据自己的需要进行适当调整.   RMAN备份相关方面的知识较多,可以参考:    RMAN 概述及其体系结构    RMAN 配置.监控与管理    RMAN 备份详解    RMAN 还原与恢复  

win中oracle实现rman备份和删除dg备库归档日志脚本

总觉得使用windows跑oracle是不靠谱的事情,可以这个世界上总有很多人喜欢做类似这样的事情,对于数据库比较常见的两件事情:rman和删除dg备库归档日志,在linux/unix平台上使用shell实现很简单,可是跑到win里面,就变的烦了,不是因为其麻烦,而是因为用的人少,不知道怎么下手处理该事情,我编写了简单的实现初级功能的win下面rman备份和删除备库归档日志脚本,供大家参考,也更加欢迎朋友提出来更加好的处理方法(win是真心的不懂) rman备份脚本  代码如下 复制代码 --b

win平台oracle rman备份和删除dg备库归档日志脚本_oracle

总觉得使用windows跑oracle是不靠谱的事情,可以这个世界上总有很多人喜欢做类似这样的事情,对于数据库比较常见的两件事情:rman和删除dg备库归档日志,在linux/unix平台上使用shell实现很简单,可是跑到win里面,就变的烦了,不是因为其麻烦,而是因为用的人少,不知道怎么下手处理该事情,我编写了简单的实现初级功能的win下面rman备份和删除备库归档日志脚本,供大家参考,也更加欢迎朋友提出来更加好的处理方法(win是真心的不懂)rman备份脚本 复制代码 代码如下: --ba

oracle RMAN备份报错的诊断过程(二)跟踪错误信息及寻找定位问题的方向

今天检查数据库中的备份输出脚本时,发现RMAN备份出现了错误. 这一篇跟踪错误信息,寻找定位问题的方向. 根据前面的问题描述,发现问题越来越复杂,从一个简单的RMAN备份报错,牵扯到系统中有3个长时间运行的JOB,以及RAC环境当前节点存在了大量的RACGMAIN CHECK进程的存在. 虽然问题很复杂,就不要急于盲目操作,先简单分析一下当前的状况. 发现问题是由于RMAN备份脚本报错造成的,但是根据错误信息和随后的测试发现,问题是可以重现的,并不是简单的RMAN问题,导致问题的原因应该是共享资

python备份脚本提示文件名,目录或卷标语法出错(Windows7)

问题描述 python备份脚本提示文件名,目录或卷标语法出错(Windows7) 1C #Filename:backup_ver1.py import osimport time #1.the files and directories tobe backed up are specified in a listsource=['D:LibraryPcb''D:LibraryPLD'] target_dir='F:DD' target=target_dir+time.strftime('%Y%m

Oracle数据库rman备份计划及恢复

原文:http://www.cnblogs.com/vijayfly/p/5045175.html 1.rman完全恢复的前提条件:历史的datafile,controlfile和spfile备份,加上完整的archivelog和完好的redolog. 2.rman备份脚本: a.RMAN 0级备份命令: run{ allocate channel c1 type disk; allocate channel c2 type disk; allocate channel c3 type disk

Oracle自动备份脚本_oracle

废话不多说了,直接给大家贴代码了,具体代码如下所示: #!/bin/sh #****************************************************************** # File: oraclebak.sh # Creation Date: 2014/1/22 17:57:32 # Last Modified: 2014/1/22 17:57:34 # 脚本功能:oracle备份脚本 # 执行方法:1.第一次执行需要root用户执行,脚本会以询问的方式