今天在做oracle的rman定时备份时,出现一个问题。oracle服务器挂在了一个NFS网络存储,oracle的定时任务刚把数据文件备份到网络存储,就被删除了(脚本中依据文件夹创建时间清理rman备份文件夹)
rman定时备份脚本:
#!/bin/bash
#----------------------------------------------------------------------------------------------#
# #
# *********** rman备份数据库********* #
# #
# 备份路径:opt/oracle/backup #
# #
# 备份路径挂载了网络存储 #
# #
# 备份集都有一个单独的文件夹,每日一次 #
# #
# 每次备份后会删除指定天数前的备份文件夹 #
# #
# 作者:mtb #
# #
# 时间:2018.7.17 #
# #
# #
#----------------------------------------------------------------------------------------------#
#备份文件夹的名称$RMAN_BASE/date_today格式
#如/opt/oracle/backup/2018-03-23
#备份文件夹的根目录,每个备份集存储格式$RMAN_BASE/date
RMAN_BASE='/opt/oracle/backup'
#引入oracle的环境变量
source /home/oracle/.bash_profile
#date格式为xxxx-xx-xx-xx:xx:xx
#date_today=$(date +"%Y-%m-%d") #获取系统当前日期时间
date_today=$(date +"%Y-%m-%d-%H:%M:%S")
#当前备份存放路径为$RMAN_BASE/$date_today
BACKUP_DIR=$RMAN_BASE/$date_today
#设置删除1天之前的备份文件
days=1
#如果备目录不存在则创建
if [ ! -e $BACKUP_DIR ]
then
mkdir -p $BACKUP_DIR
fi
#rman备份数据文件及controlfile,spfile
rman target / log=$BACKUP_DIR/backupall_rman_$date_today.log<<EOF
run {
Allocate channel rman_1 type disk;
Allocate channel rman_2 type disk;
Allocate channel rman_3 type disk;
sql 'alter system switch logfile';
backup database format '$BACKUP_DIR/df_%T_%U.dbf';
backup current controlfile format '$BACKUP_DIR/cf_%T_%U.ctf';
backup spfile format '$BACKUP_DIR/sp_%T_%U.sp';
release channel rman_1;
release channel rman_2;
release channel rman_3;
}
crosscheck backup;
delete expired backup;
delete obsolete recovery WINDOW OF 7 DAYS;
list backupset;
exit;
EOF;
#删除$RMAN_BASE目录下满足2018-开头且超过指定天数的文件夹
find $RMAN_BASE/* -type d -name "2018-*" -a -mtime +$days -exec rm -rf {} \;
[oracle@oraclelinux 2018-07-17-15:54:08]$ crontab -l
1 1 * * * /home/oracle/test.sh
[oracle@oraclelinux 2018-07-17-15:54:08]$
使用了根据文件夹的创建时间删除指定天数之前的文件夹,以防文件占用太多容量,发现刚备份完就被删除
确定是最后面的删除语句删除,排查发现NFS网络存储的时间是2014年,而现在时间是2018年,于是修改NFS(群辉的)时间
添加时间服务器同步时间解决问题