天天看點

K3CLOUD自動備份Oracle資料庫并删除指定天數前的備份

系統環境:rhel 6.4+oracle 11.2.0.3.7+k3cloud6

主要參考下文,并根據實際情況做更改:

<a href="http://www.osyunwei.com/archives/5960.html" target="_blank">http://www.osyunwei.com/archives/5960.html</a>

1、root使用者登入伺服器

<code>mkdir</code> <code>-p </code><code>/u01/backup</code>

 #建立Oracle資料庫備份目錄

<code>chown</code> <code>-R  oracle:oinstall </code><code>/u01/backup</code> <code>-R</code>

 #設定目錄權限為oinstall使用者組的oracle使用者(使用者oracle與使用者組oinstall是在安裝Oracle資料庫時設定的)

2、建立Oracle資料庫備份腳本

<code>vi</code> <code>/u01/backup/oracleback</code><code>.sh</code>

#!/bin/sh

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1

export ORACLE_SID=orcl

export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

export LANG=zh_CN.UTF-8

#export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

#以上代碼為Oracle資料庫運作賬号oracle的系統環境變量設定,必須添加,否則crontab任務計劃不能執行。

# oracle使用者的系統環境變量路徑:/home/oracle/.bash_profile

date=`date +%Y_%m_%d`   #擷取系統目前日期時間

days=7  #設定删除7天之前的備份檔案

orowner=clouddcadmin  #備份此使用者下面的資料

bakuser=clouddcadmin  #用此使用者來執行備份,必須要有備份操作的權限

bakpass=cloud6  #執行備注的使用者密碼

bakdir=/u01/backup  #備份檔案路徑,需要提前建立好

direct=backup #指定的備份目錄

bakdata=$orowner"_"$date.dmp #備份資料庫名稱

baklog=$orowner"_"$date.log #備份執行時候生成的日志檔案名稱

ordatabak=$orowner"_"$date.tar.gz #最後儲存的Oracle資料庫備份檔案

cd $bakdir #進入備份目錄

mkdir -p $orowner #按需要備份的Oracle使用者建立目錄

cd $orowner #進入目錄

expdp $bakuser/$bakpass SCHEMAS=$orowner dumpfile=$bakdata logfile=$baklog directory=$direct   #執行備份

mv $bakdir/*.dmp $bakdir/$orowner #剪切dmp檔案到對應目錄

mv $bakdir/*.log $bakdir/$orowner #剪切log檔案到對應目錄

tar -zcvf $ordatabak $bakdata  $baklog  #壓縮備份檔案和日志檔案

find $bakdir/$orowner  -type f -name "*.log" -exec rm {} \; #删除備份檔案

find $bakdir/$orowner  -type f -name "*.dmp" -exec rm {} \; #删除日志檔案

find $bakdir/$orowner  -type f -name "*.tar.gz" -mtime +$days -exec rm -rf {} \;  #删除7天前的備份(注意:{} \中間有空格)

<code>:wq</code>

#儲存退出

<code>chmod</code> <code>+x </code><code>/u01/backup/oracleback</code><code>.sh</code>

  #添加腳本執行權限

3、編輯系統任務計劃

<code>vi</code> <code>/etc/crontab</code>

 #編輯系統任務計劃,添加以下代碼到最後一行

30 2 * * * oracle  /u01/backup/oracleback.sh  #每天淩晨2點30分,以oracle使用者執行ordatabak.sh備份檔案

<code>:wq!</code>

<code>service crond restart</code>

#重新開機crond

<code>cat</code> <code>/var/spool/mail/root</code>

檢視執行日志會有類似記錄:

. . exported "CLOUDDCADMIN"."T_WF_TESTCASE"                  0 KB       0 rows

. . exported "CLOUDDCADMIN"."T_WF_TESTPROCINST"              0 KB       0 rows

. . exported "CLOUDDCADMIN"."T_XT_GROUPNEWS"                 0 KB       0 rows

Master table "CLOUDDCADMIN"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded

******************************************************************************

Dump file set for CLOUDDCADMIN.SYS_EXPORT_SCHEMA_01 is:

  /u01/backup/clouddcadmin_2016_02_04.dmp

Job "CLOUDDCADMIN"."SYS_EXPORT_SCHEMA_01" successfully completed at 17:21:29

clouddcadmin_2016_02_04.dmp

clouddcadmin_2016_02_04.log

每天淩晨2點30分,會自動備份資料庫到/u01/backup/clouddcadmin目錄中,儲存為.tar.gz壓縮檔案,并且删除7天前的備份,即隻保留最近7天的資料。

備注:以上所有的代碼都是在英文半角狀态下輸入,注意對應檔案夾的權限。

附:shell腳本的三種調試方法:

-n 讀一遍腳本中的指令但不執行,用來檢查腳本中的文法錯誤

-v 一邊執行腳本,一邊将執行過的腳本指令列印到标準輸出端

-x 提供跟蹤執行資訊,将執行的每一條指令和結果一次列印出來

這應該就像C語言的gdb一樣有用吧,有助于檢查錯誤

使用這些選項有三種方法

1.在指令行提供參數:$sh -x script.sh

2.腳本開頭提供參數:#!/bin/sh -x

3.在腳本中用set指令啟用or禁用參數:其中set -x表啟用,set +x表禁用

另:在寫腳本的時候,需特别注意添加空格或換行或分号

eg   text指令:  $[ 5 -lt 10 ]左方括号後須有空格,右方括号前也須有空格

        shell腳本中函數定義: foo() {後須有空格或換行

        shell腳本中,若同一行内寫有兩條指令須加分号

與C語言不同的是,shell腳本中,傳回值0表真,1表假。

本文轉自 sfih 51CTO部落格,原文連結:http://blog.51cto.com/dayday/1741120