Linux定時自動備份oracle數據庫


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM