程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> RMAN備份腳本一列分享

RMAN備份腳本一列分享

編輯:Oracle教程

在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 => '[email protected]'}; ">> /home/oracle/backup/bin/sendmai
  23: l.pl
  24: echo "\$sender->MailFile({to => '[email protected]',">> /home/oracle/backup/bin/sendmail.pl
  25: echo "cc=>'[email protected],[email protected],[email protected]'," >> /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的執行日志記錄。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved