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)