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

    clip_image002

  • 相关阅读:
    队列的顺序存储实现
    栈的顺序存储实现2
    企业版循环单链表
    STL-list
    EXCEL多条件查询之VLOOKUP+IF{1,0} 踩坑
    MybatisPlus Wrapper方法
    sequence:创建、使用
    Java中List集合去除重复数据的方法
    windows下安装nginx和常用命令
    MySQL8.0.20下载并安装
  • 原文地址:https://www.cnblogs.com/kerrycode/p/3754169.html
Copyright © 2020-2023  润新知