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_1export ORACLE_HOME
10:
11: TMP=/tmpexport TMP
12:
13: TMPDIR=$TMPexport TMPDIR
14:
15: PATH=/usr/sbin:$PATHexport PATH
16:
17: PATH=$ORACLE_HOME/bin:$PATHexport PATH
18:
19: LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/libexport 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的执行日志记录。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)