RMAN备份脚本一列分享
2014-05-26 23:26 潇湘隐者 阅读(4723) 评论(2) 收藏 举报在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.pl24: 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的执行日志记录。
扫描上面二维码关注我
如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.

浙公网安备 33010602011771号