ORACLE定时备份方案

ORACLE定时备份方案

采用ORACLE的EXP工具,实现ORACLE的备份;采用LINUX的服务crond实现定时功能。

1 编辑SH,实现备份功能

#vi oracle_backup.sh,输入以下内容

#!/bin/sh

ORACLE_BACKUP_HOME=/home/oracle/backup   #定义ORACLE备份根目录

BACKUP_DATA=$ORACLE_BACKUP_HOME/day   #定义ORACLE备份数据文件根目录

BACKUP_LOG=$BACKUP_DATA/log  #定义ORACLE备份日志文件根目录

export  ORACLE_BACKUP_HOME  BACKUP_DATA BACKUP_LOG 

DATA_FILE_NAME=data_backup          #定义ORACLE备份日志文件名字前缀

LOG_FILE_NAME=log_backup             #定义ORACLE备份日志文件名字前缀

export DATA_FILE_NAME LOG_FILE_NAME

BACKUP_AMOUNT=4        #定义ORACLE备份文件保存数量

export BACKUP_AMOUNT

 

datafile_amount=$(find $BACKUP_DATA -type f -name $DATA_FILE_NAME'_'*.dmp|wc -l)   #查询ORACLE备份数据文件根目录下备份数据文件的数量

logfile_amount=$(find $BACKUP_LOG -type f -name $LOG_FILE_NAME'_'*.log|wc -l)      #查询ORACLE备份日志文件根目录下备份日志文件的数量

del_datafile_count=$(($datafile_amount-$BACKUP_AMOUNT+1));   #计算需要删除ORACLE备份数据文件的数量

del_logfile_count=$(($datafile_amount-$BACKUP_AMOUNT+1));         #计算需要删除ORACLE备份日志文件的数量

 

if(($datafile_amount>=$BACKUP_AMOUNT));then

       echo $BACKUP_DATA"路径下文件太多,正在清除备份数据文件"

       for((i=0;i<$del_datafile_count;i++))

       do

       ls -t $BACKUP_DATA/$DATA_FILE_NAME'_'*.dmp| awk 'END{if(NR>=$BACKUP_AMOUNT){system("rm -rf "$NF);system("echo  $BACKUP_DATA路径下,已删除文件"$NF)}}'#删除修改时间最早的一个数据文件

       done

fi

 

if(($logfile_amount>=$BACKUP_AMOUNT));then

       echo $BACKUP_LOG"路径下文件太多,正在清除备份日志文件"

       for((i=0;i<$del_logfile_count;i++))

       do

       ls -t $BACKUP_LOG/$LOG_FILE_NAME'_'*.log| awk 'END{if(NR>=$BACKUP_AMOUNT){system("rm -rf "$NF);system("echo  $BACKUP_LOG路径下,已删除文件"$NF)}}'#删除修改时间最早的一个日志文件

       done

fi

 

rq=`date +"%Y%m%d%s"`      #获取当前系统时间

su - oracle -c "/oracle/product/10.2.0/db_1/bin/exp sgedptwo/sgdb321@SGEMDP file=$BACKUP_DATA/$DATA_FILE_NAME'_'$rq.dmp log=$BACKUP_LOG/$LOG_FILE_NAME'_'$rq.log" #备份ORACLE数据库并记录日志

2 授予ORACLE用户使用备份目录权限

# mkdir /home/oracle/backup

# mkdir /home/oracle/backup/day

# mkdir /home/oracle/backup/day/log

#chown –R /home/oracle/backup

3 使用crond定制定时任务

#ps-ef|grep crond  #查看crond服务是否开启

#service crond start|stop|restart   #crond服务启动|停止|重启命令

#crontab –e,输入以下内容

0 0 * * * /oracle/oracle_backup.sh   #每天00:00执行任务

0 0 1 * * /oracle/oracle_backup.sh  #每月1号00:00执行任务

 

 

注释:

* * * * * command to be executed

- - - - -

| | | | |

| | | | ----- Day of week (0 - 6) (Sunday=0 )

| | | ------- Month (1 - 12)

| | --------- Day of month (1 - 31)

| ----------- Hour (0 - 23)

------------- Minute (0 - 59)

 

 

猜你喜欢

转载自www.cnblogs.com/aliswell2king/p/11757225.html
今日推荐