1.在服務器創建備份目錄,並賦予權限
mkdir -p /backup/P_DATA
#新建shell腳本存放路徑
mkdir -p /backup/P_DB_BACK #新建Oracle數據庫備份目錄
chown -R oracle:oinstall /backup/P_DATA #設置目錄權限為oinstall用戶組的oracle用戶(用戶oracle與用戶組oinstall是在安裝Oracle數據庫時設置的)
chown -R oracle:oinstall /backup/P_DB_BACK
2.備份腳本
vi /backup/P_DATA/P_DB_BAK.sh #新建文件
#!/bin/sh ORACLE信息可以通過 .bash_profile 查看
echo "備份腳本開始啟動..." #打印備份進度
export ORACLE_SID=orcl
export ORACLE_BASE=/home/oracle/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export LANG=en_US.UTF-8
export NLS_LANG=AMERICAN_AMERICA.UTF8
#以上代碼為Oracle數據庫運行賬號oracle的系統環境變量設置,請根據自己安裝時的環境路徑修改,必須添加,否則crontab任務計划不能執行。
#oracle info
dateTime=`date +%Y_%m_%d` #當前系統時間
days=5 #刪除5天前的備份數據
orsid='127.0.0.1:1521/orcl'
#oralce連接信息
orowner=dbUser
# 備份此用戶下面的數據
bakuser=dbUser
#用此用戶來執行備份,必須要有備份操作的權限
bakpass=dbPwd #執行備注的用戶密碼
bakdir=/backup/P_DB_BACK
#備份文件路徑,已創建完畢
bakdata=$orowner"_"$dateTime.dmp
#備份數據庫名稱
baklog=$orowner"_"$dateTime.log
#備份執行時候生成的日志文件名稱
ordatabak=$orowner"_"$dateTime.tar.gz
#最后保存的Oracle數據庫備份文件
cd $bakdir
echo "現在開始進行數據備份..."
exp $bakuser/$bakpass@$orsid grants=y owner=$orowner file=$bakdir/$bakdata log=$bakdir/$baklog #執行備份
echo "數據備份結束..."
echo "現在開始進行壓縮備份數據..."
tar -zcvf $ordatabak $bakdata $baklog
#壓縮備份文件和日志文件
echo "壓縮備份數據結束..."
echo "刪除備份數據開始..."
find $bakdir/ -type f -name "*.log" -exec rm {} \; #刪除備份文件
find $bakdir/ -type f -name "*.dmp" -exec rm {} \;
#刪除日志文件
find $bakdir/ -type f -name "*.tar.gz" -mtime +$days -exec rm -rf {} \; #刪除5天前的備份(注意:{} \中間有空格)
echo "刪除備份數據結束..."
echo "備份執行完畢..."
#將備份文件上傳到遠程服務器 如果不輸人密碼上傳請參考 http://www.linuxidc.com/Linux/2017-11/148506.htm
:wq! 保存 退出
3.添加腳本執行權限
chmod +x /backup/P_DATA/P_DB_BAK.sh #添加腳本執行權限
4.編輯系統任務執行計划
crontab -e
輸入一下信息:
00 03 * * * /backup/P_DATA/P_DB_BAK.sh #每天凌晨3點,以oracle用戶執行P_DB_BAK.sh備份文件
:wq! #保存退出
5.重啟crontab
service crond restart
從此每天的凌晨3點 系統會自動完成數據庫的備份,壓縮,並上傳到遠程服務器的指定路徑下!
以下是無注釋的腳本文件
#oracle info
echo "備份腳本開始啟動..."
export ORACLE_SID=orcl1
export ORACLE_BASE=/oracle/app
export ORACLE_HOME=/oracle/app/110204
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib
export PATH=$ORACLE_HOME/bin:/bin:/usr/bin:/usr/sbin:/usr/local/bin:/oracle/grid/bin
export LANG=en_US.UTF-8
export NLS_LANG="AMERICAN_AMERICA".AL32UTF8
dateTime=`date +%Y_%m_%d`
days=5
orsid='ipaddress:port/orcl'
orowner=dbuser
bakuser=dbuser
bakpass=dbpwd
bakdir=/backup/WMS_DB_BACK
bakdata=$orowner"_"$dateTime.dmp
baklog=$orowner"_"$dateTime.log
ordatabak=$orowner"_"$dateTime.tar.gz
cd $bakdir
echo "現在開始進行數據備份..."
exp $bakuser/$bakpass@$orsid grants=y owner=$orowner file=$bakdir/$bakdata log=$bakdir/$baklog
echo "數據備份結束..."
echo "現在開始進行壓縮備份數據..."
tar -zcvf $ordatabak $bakdata $baklog
echo "壓縮備份數據結束..."
echo "刪除備份數據開始..."
find $bakdir/ -type f -name "*.log" -exec rm {} \;
find $bakdir/ -type f -name "*.dmp" -exec rm {} \;
find $bakdir/ -type f -name "*.tar.gz" -mtime +$days -exec rm -rf {} \;
echo "刪除備份數據結束..."
echo "備份執行完畢..."
/home/oracle/app/oracle