1. 程式人生 > >32. linux下oracle資料庫定時備份

32. linux下oracle資料庫定時備份

這裡以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/[email protected]$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.'