AIX环境下exp备份Oracle分区表实例
2008-12-16 13:02:40 来源:WEB开发网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
更多精彩
赞助商链接