這里以oradatabak.sh(里面的內容要根據實際修改)腳本放在/u01/11g/datapump下為例:
#1.添加腳本執行權限
chmod +x /u01/11g/datapump/oradatabak.sh
#2.在oracle用戶下添加定時任務,每天晚上23點,以oracle用戶執行oradatabak.sh備份文件
su - oracle
crontab -e
00 23 * * * /u01/11g/datapump/oradatabak.sh
#3.重啟crond
service crond restart
#4.oradatabak.sh腳本內容如下:
#!/bin/bash
#:本腳本自動備份1天的數據庫,每次備份完成后,刪除1天之前的數據。
#加載oracle的相關參數
#如果oracle參數不明確,請使用命令查看
# su - oracle
# echo $ORACLE_HOME
export ORACLE_BASE=/u01/11g
export ORACLE_HOME=/u01/11g/product/11.2.0
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH:$HOME/bin
#oracle字符集
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
#ORACLE_HOME
ORACLE_HOME=/u01/11g/product/11.2.0
#獲取當前時間,格式:20150210
DATE=$(date +%Y%m%d)
#刪除1天前的文件
days=1
#執行備份的用戶
bakuser=TEST
#執行備份的用戶密碼
bakuserpass=TEST
#服務器IP
IP=192.168.0.1
#dumpfilename
dumpfilename=$bakuser"_"$DATE
#設置備份目錄
export backup_dir=/u01/11g/datapump
#開始備份,此處采用expdp數據方式導出
echo "start oracle backup ..."
#echo $ORACLE_HOME/bin/expdp $bakuser/$bakuserpass schemas=$bakuser dumpfile=$dumpfilename.dmp directory=DPDATA logfile=$dumpfilename.log
$ORACLE_HOME/bin/expdp $bakuser/$bakuserpass@$IP/orcl schemas=$bakuser dumpfile=$dumpfilename.dmp directory=DPDATA logfile=$dumpfilename.log
echo 'Oracle backup successfully.'
#開始壓縮
cd $backup_dir
echo "開始壓縮..."
tar zcvf $dumpfilename.tar.gz $dumpfilename.dmp
echo "壓縮完畢"
#刪除.dmp文件
rm -rf $dumpfilename.dmp
#刪除1天前的備份文件
echo 'remove files one day ago...'
find $backup_dir -type f -name "*.tar.gz" -mtime +$days -exec rm -f {} \;
find $backup_dir -type f -name "*.log" -mtime +$days -exec rm -f {} \;
echo 'remove successsfully.'