oracle rman备份脚本怎么写

oracle rman备份脚本怎么写,第1张

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

把下面的代码保消辩存拿嫌缺为服务器端的脚本,执行即可。PS:需要自己替换一下双引号中的内容

#!/bin/sh

. $HOME/.bash_profile

export ORACLE_SID="你的数据库的SID"

CutDATE=`date '+%Y-%m%d-%H%M'`

DATE=`date -d '者配-2 day' '+%Y-%m%d'`

export NLS_LANG="你的字符集设定"

exp "具有权限的账号"/"密码" file=/home/oracle/2014/"你的数据库的SID"_$CutDATE.dmp log=/home/oracle/2014/"你的数据库的SID"_$CutDATE.log owner=user1,user2

没必要用root权限执行,oracle用户同样可以执行crontab计划任务

1、su - oracle

crontab -e

0 4 * * 0 /home/oracle/exp.sh 2>&1 >>/home/oracle/script_exp.log

0~59 表示分

0~23 表示小裤答时

1~31 表示日备纳

1~12 表示月份

0~6 表示星期(其中0表示星期日)

2、cat /home/oracle/exp.sh

. ~/.bash_profile

bakdir=/opt/胡滚慧dbbak

logdir=/home/oracle/dbbak

rq=$(date +%Y%m%d)

exp system/***** owner=jysh file=${bakdir}/jysh_${rq}.dmp log=${logdir}/jysh_${rq}.log

find ${bakdir} -type f -mtime +30 -exec rm -rf {} \


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12419868.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存