Oracle 备份脚本不能按计划任务执行的几种情况:
通常利用 LINUX 的 CROND 制定按计划时间执行 ORACLE 的 RMAN 备份是切实可行
的, 可是在实际应用中有时却发现 CROND 不能正常执行 ORACLE 的 RMAN 脚本备份?
根据笔者经验,你如果仔细检查或许有以下两种情况所致。
1. crond 的配置文件“/etc/crontab”有关计划命令的执行格式写法有问题:
如下所示,如果按照下面红色被注释掉的那两种写法,均不会如期执行 RMAN 备份脚本“/
home/oracle/backuplevel2.sh” , 原 因 有 两 点 : 1 。 crond 的 执 行 身 份 必 须 是
ROOT,2。ORACL RMAN 备份脚本“backuplevel2.sh”却又要求必须以 oracle 用户身份执行。
所 以 必 须 按 照 黑 色 部 分 所 示 那 样 格 式 , 诸 如 “ 30 09 * * 3 root su oracle
/home/oracle/backuplevel2.sh”,意思是以 ROOT 身份执行 CROND 计划,然后以 ORACLE
用户执行 RMAN 的备份脚本“backuplevel2.sh”。
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=oracle
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
30 10 * * 0 root su oracle /home/oracle/backupfull.sh
10 10 * * 1 root su oracle /home/oracle/backuplevel1.sh
10 10 * * 2 root su oracle /home/oracle/backuplevel1.sh
# 30 09 * * 3 root /home/oracle/backuplevel2.sh
# 30 09 * * 3 oracle /home/oracle/backuplevel2.sh
30 09 * * 3 root su oracle /home/oracle/backuplevel2.sh
30 09 * * 4 root su oracle /home/oracle/backuplevel1.sh
00 10 * * 5 root su oracle /home/oracle/backuplevel2.sh
30 10 * * 6 root su oracle /home/oracle/backupfull.sh
2.第二种情况或许是虽然 crontab 中计划任务内容书写完全正确,但是这个 crontab 文件的
拥有者不是 root,而是其他,比如 ORACLE。笔者曾经犯下一个错误,为偷懒省事,将一台
ORACLE 机器上的 crontab 文件直接拷贝到另一台 ORACLE 机器上使用(因 RMAN 备份的
计划任务相同),可是复制到新机器上后,重启 CROND 服务,却发现不能按计划执行
RMAN 的备份脚本了,仔细查看了 crond 的相关日志“/var/log/cron”,发现出现问题的根本原
因是 crontab 文件的拥有者并不是 root,而是 ORACLE。具体情况如下所示:
[root@odba oracle]# ll /etc/crontab
-rw-r--r-- 1 oracle oinstall 852 7 月 26 09:38 /etc/crontab
。。。。。。
Aug 7 09:20:13 odba CROND[7429]: (root) CMD (/usr/lib64/sa/sa1 1 1)