oracle資料庫備份之exp增量備份

不一樣的天空w發表於2019-03-28

https://blog.csdn.net/zcb_data/article/details/80280892

oracle exp增量備份實驗

https://blog.csdn.net/sinat_16741503/article/details/72876092

Oracle資料庫有三種標準的備份方法,它們分別是匯出/匯入(EXP/IMP、EXPDP/IMPDP)、熱備份和冷備份。

匯出備件是一種邏輯備份,冷備份和熱備份是物理備份。

 exp支援增量備份,而expdp不支援增量備份。

 exp/imp增量匯出是一種常用的資料備份方法,它只能對整個資料庫來實施,並且必須作為SYSTEM來匯出。

在進行此種匯出時,系統不要求回答任何問題。 匯出檔名預設為export.dmp ,如果不希望自己的輸出檔案定名為

export.dmp,必須在命令列中指出要用的檔名。

增量匯出包括三種型別: 完全備份,累積備份,增量備份。


執行增量備份必須滿足下列條件:

  1.只對完整資料庫備份有效,且第一次需要full=y引數,以後需要inctype=incremental引數。

  2. 使用者必須有EXP_FULL_DATABASE的系統角色。


下面簡單三種備份的用法以及區別:

 1,完全備份:顧名思義,匯出整個資料庫所有資料

exp system/oracle inctype=complete file=full.dmp log=full.log

 2,累積備份:匯出上次“完全備份”後資料庫變化的資訊

exp system/oracle inctype=cumulative file=cumulative_1.dmp log=sys_cumulative_1.log

 3,增量備份:備份上次“備份”後變化的資訊

exp system/oracle inctype=incremental file=sys_cumulative_3.dmp log=sys_cumulative_3.log


 例如我設定一個oracle備份策略:

 週六:完全備份

 週日:增量備份

 週一:增量備份

 週二:增量備份

 週三:累積備份

 週四:增量備份

 週五:增量備份


 那麼當週六我的資料庫被破壞了(備份之前),恢復資料庫的流程呢,那就是:

 第一,用命令CREATE DATABASE重新生成資料庫結構。

 第二,建立一個足夠大的附加回段。

 第三,完全備份匯入(週六)

imp system/oracle inctype=RESTORE FULL=y FILE=週六完全備份檔案

 第四,累積備份匯入(週三)

impsystem/oracle inctype=RESTORE FULL=y FILE=週三累積備份檔案

 第五,增量備份匯入(週四)

impsystem/oracle inctype=RESTORE FULL=y FILE=週四累積備份檔案

 第六,增量備份匯入(週五)

impsystem/oracle inctype=RESTORE FULL=y FILE=週五累積備份檔案


注意:使用這種方式對oracle資料庫進行備份的,有一個弊端,就是最後一次備份到資料庫當機前的資料會丟失。


--下面給大家附上一段博主自己寫的完全備份策略指令碼,累積備份和增量備份修改部分引數後即可:

#!/bin/bash

#oracle資料庫備份用指令碼,該指令碼對全庫進行備份,每週六1:00執行

##############################

##author-------***###

##############################

if [ -f ~/.bash_profile ]; then

        . ~/.bash_profile

fi

set -e 

 

last_day=`date -d "-7 day" +%Y%m%d`

#上次資料備份時間

 

stime=`date +%s`

echo `date +"%F %T"`################### 全庫備份開始##################

cd /mnt/sd02/oracle_bak_68/

#備份資料存放目錄

 

/data/app/oracle/product/11.2.0/dbhome_1/bin/exp system/oracle inctype=complete 

file=sys_all_`date +%Y%m%d`.dmp log=sys_all_`date +%Y%m%d`.log

#宣告exp路徑,有些環境下不宣告在定時任務中報錯找不到該命令

rm sys_all_${last_day}.dmp

rm sys_all_${last_day}.log

#刪除上週完全備份檔案

etime=`date +%s`

s=`echo "scale=0; ($etime - $stime)%60" | bc`

m=`echo "scale=0; ($etime - $stime)/60%60" | bc`

h=`echo "scale=0; ($etime - $stime)/60/60" | bc`

echo `date +"%F %T"`################全庫備份結束#####################

echo `date +"%F %T"` end 指令碼執行耗時 $h 小時 $m 分鐘 $s 秒


--定時任務中備份策略設定如下:

####全庫備份用指令碼,每週六早上一點執行

01 01 * * 6 sh /home/oracle/zcb/oracle_all_bak.sh >>/home/oracle/zcb/log/oracle_ a

ll_`date +"\%Y\%m\%d"`.log 2>&1

####增量備份指令碼,每週日,週一,週二,週四,週五 執行

00 01 * * 0 sh /home/oracle/zcb/oracle_incremental_bak.sh >>/home/oracle/zcb/log/oracle_in

cremental_`date +"\%Y\%m\%d"`.log 2>&1

00 01 * * 1 sh /home/oracle/zcb/oracle_incremental_bak.sh >>/home/oracle/zcb/log/oracle_in

cremental_`date +"\%Y\%m\%d"`.log 2>&1

00 01 * * 2 sh /home/oracle/zcb/oracle_incremental_bak.sh >>/home/oracle/zcb/log/oracle_in

cremental_`date +"\%Y\%m\%d"`.log 2>&1

00 02 * * 4 sh /home/oracle/zcb/oracle_incremental_bak.sh >>/home/oracle/zcb/log/oracle_in

cremental_`date +"\%Y\%m\%d"`.log 2>&1

00 01 * * 5 sh /home/oracle/zcb/oracle_incremental_bak.sh >>/home/oracle/zcb/log/oracle_in

cremental_`date +"\%Y\%m\%d"`.log 2>&1

####累積備份指令碼,每週三執行

00 01 * * 3 sh /home/oracle/zcb/oracle_cumulative_bak.sh >>/home/oracle/zcb/log/oracle_cu

mulative_`date +"\%Y\%m\%d"`.log 2>&1


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2639531/,如需轉載,請註明出處,否則將追究法律責任。

相關文章