程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> AIX環境下exp備份Oracle分區表實例

AIX環境下exp備份Oracle分區表實例

編輯:Oracle數據庫基礎

1 簡述

一般情況下,為保證數據庫數據不丟失或少丟失,降低事故恢復時間,我們常使用Oracle數據庫export工具對數據庫進行定期備份。對於常用的exp備份,無論是備全庫、備用戶或是備單個表,命令都比較簡單。

下面說明一下如何每天定時備份分區表的某個分區的詳細步驟。

2 環境描述

硬件環境:IBM P570

操作系統:AIX5.3

數據庫版本:Oracle9.2.0.6

業務場景:數據庫t_sms表包含每天所有的短信發送歷史數據(每天大約700W),由於數據量龐大,且平時有查詢需要,所以根據月日建立了分區(每天一個分區,比如P01_01代表1月1日的數據)(t_sms腳本: )

備份需要:每天700W數據存放在一張表中,造成此表數據量龐大,極易產生索引失效等副作用,故決定對此表歷史數據進行遷移,遷移策略為保留前天到目前的數據在表中,其他數據遷移到歷史歸檔庫中。如有查詢需要,可直接連接歸檔庫進行短信數據查詢。這樣一方面可以減少t_sms表的數據量,另一方面也把查詢數據遷移到歸檔庫,降低生產庫負荷。

3 備份策略

1、每天凌晨00:30分,利用crontab執行exp腳本,把前天分區裡的數據生成dmp文件;

2、3:30分,FTP到歸檔庫

3、4:30分,歸檔庫執行imp腳本導入歸檔數據

4 操作步驟

1、以Oracle用戶身份登陸小型機;

2、把exp.sh腳本拷貝到小型機/sms目錄下

3、chmod 755 /sms/exp.sh

4、執行crontab –e,輸入30 00 * * * /sms/exp.sh

5、建立FTP用戶

6、在歸檔庫上設定自動任務,定時FTP到小型機下載dmp文件,並imp到歸檔庫中。

5 Exp腳本解釋

GetPrevDate(){
str=$1
days=$2
yy=`echo$str|cut-c1-4`
mm=`echo$str|cut-c5-6`
dd=`echo$str|cut-c7-8`
sav_dd=$days
days=`expr$days-$dd`
while[$days-ge0]
do
mm=`expr$mm-1`
[$mm-eq0]&&mm=12&&yy=`expr$yy-1`
aaa=`cal$mm$yy`
bbb=`echo$aaa|awk'{print$NF}'`
days=`expr$days-$bbb`
done
dd=`expr0-$days`
expr$dd:"^.$">/dev/null&&dd=0$dd
expr$mm:"^.$">/dev/null&&mm=0$mm
echo$mm"_"$dd
}

注釋:Ksh下的函數,用於取得第n天前日月數

todayDate=`date"+%Y%m%d"`
thisday="`GetPrevDate${todayDate}2`"

注釋:用於取得前天的日月,形如08_08 

dmpfile="/sms/t_sms.dmp"

注釋:Dmp文件名稱及路徑

logfile="/sms/t_sms_"$thisday".log"

注釋:備份日志名稱及路徑

partitionno="t_sms:P"$thisday``
expsms/smsrows=yindexes=ncompress=nbuffer=204800000direct=yfeedback=100000 
file=$dmpfilelog=$logfiletables=$partitionno

注釋:tables=$partitionno

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved