a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 179|回复: 1

[考试辅导] 应用技术:AIX环境下exp备份Oracle分区表实例

[复制链接]
发表于 2012-8-4 14:06:19 | 显示全部楼层 |阅读模式
1 简述
2 k# w. M9 R' f8 V* K0 `$ k  一般情况下,为保证数据库数据不丢失或少丢失,降低事故恢复时间,我们常使用Oracle数据库export工具对数据库进行定期备份。对于常用的exp备份,无论是备全库、备用户或是备单个表,命令都比较简单。
) T  M6 c+ @8 d- m5 }  下面说明一下如何每天定时备份分区表的某个分区的详细步骤。
5 _9 D- D+ |- Q$ c0 s2 C  2 环境描述! _: e* x. o- g% |* a4 ~# G6 @
  硬件环境:IBM P570
  H4 m7 f. A  Z/ n5 ^  操作系统:AIX5.37 }8 M& X8 I+ D+ s0 g
  数据库版本:Oracle9.2.0.6
3 A% y5 A0 h( \! F- _  业务场景:数据库t_sms表包含每天所有的短信发送历史数据(每天大约700W),由于数据量庞大,且平时有查询需要,所以根据月日建立了分区(每天一个分区,比如P01_01代表1月1日的数据)(t_sms脚本: )7 y& M0 u8 B8 B% [
  备份需要:每天700W数据存放在一张表中,造成此表数据量庞大,极易产生索引失效等副作用,故决定对此表历史数据进行迁移,迁移策略为保留前天到目前的数据在表中,其他数据迁移到历史归档库中。如有查询需要,可直接连接归档库进行短信数据查询。这样一方面可以减少t_sms表的数据量,另一方面也把查询数据迁移到归档库,降低生产库负荷。& G: U; g6 V) s5 L+ T- C
  3 备份策略
7 }, ?* o! t/ B/ S  u: H+ [7 K  1、每天凌晨00:30分,利用crontab执行exp脚本,把前天分区里的数据生成dmp文件;
% S1 L1 p4 ]2 m8 D. ?  2、3:30分,ftp到归档库
2 ?# s8 ]* T: U/ l7 F/ k  3、4:30分,归档库执行imp脚本导入归档数据
7 k0 {5 x2 U3 f6 C8 |+ G5 J8 e  4 操作步骤
! G* f6 g( E& s/ G  x  1、以Oracle用户身份登陆小型机;
- p' ?) X9 O- S3 u3 D  2、把exp.sh脚本拷贝到小型机/sms目录下" y) j" v  U" E! _$ n5 ~
  3、chmod 755 /sms/exp.sh
& P& l' z5 \) ?4 E1 K7 C- e2 h  4、执行crontab –e,输入30 00 * * * /sms/exp.sh+ r& U/ {) v' X, g
  5、建立ftp用户. x4 b9 [- N7 W3 p# ~( }
  6、在归档库上设定自动任务,定时ftp到小型机下载dmp文件,并imp到归档库中。
回复

使用道具 举报

 楼主| 发表于 2012-8-4 14:06:20 | 显示全部楼层

应用技术:AIX环境下exp备份Oracle分区表实例

 5 Exp脚本解释   ]. q0 h+ f! B; L  A
  GetPrevDate(){
9 O' o4 P2 o, H: P2 A  str=$12 H: u% P2 I* p: m0 O! S7 I
  days=$26 ^  ^, n6 |( }( }) M7 S* o3 N7 t
  yy=`echo $str|cut -c 1-4`
; ^; c- g  p6 {5 U) s, V2 R: ?  mm=`echo $str|cut -c 5-6`
' j9 w- `2 E3 Z  dd=`echo $str|cut -c 7-8`
  [, v) T: \) E3 o3 A0 ?9 {  sav_dd=$days* }, q) [4 g# {% s5 c
  days=`expr $days - $dd`
1 h1 r  o1 r/ X; ^7 x" y  while [ $days -ge 0 ]
% ?- ], b' G0 d( t  do: q# Q. g1 m& D. J# ]
  mm=`expr $mm - 1`% b" Y. w- s; i- Y
  [ $mm -eq 0 ] && mm=12 && yy=`expr $yy - 1`& Z7 m; j' I0 c! W9 G/ _' m
  aaa=`cal $mm $yy`1 a, E# [  y, O
  bbb=`echo $aaa|awk ’{print $NF}’`
) l6 g) J; C& ^* R% W  days=`expr $days - $bbb`: a  v: A6 L8 q6 b/ t' m/ w. w( F
  done, B3 P5 D% K: L1 ~# y
  dd=`expr 0 - $days`- Z* d' h3 z' A4 b% s/ o9 ?2 H
  expr $dd : "^.$" > /dev/null && dd=0$dd: v, A! v8 R5 v- B6 h
  expr $mm : "^.$" > /dev/null && mm=0$mm
( s1 [1 s& _8 E0 e  echo $mm"_"$dd
- D4 @+ r" u7 a, P: E( ^/ \7 Q  }
! R; r8 C, M- U  注释:Ksh下的函数,用于取得第n天前日月数
5 i; h$ Q9 U1 M* h& w  todayDate=`date "+%Y%m%d"` ( V- y+ Q  Y1 N: i! J. r
  thisday="`GetPrevDate ${todayDate} 2`"
3 N# A# v' b' l% }) K  注释:用于取得前天的日月,形如08_08 
' _; f8 P! `4 q3 t! l% S/ }' u$ a  dmpfile="/sms/t_sms.dmp"- p) Z% y* P, _: u
  注释:Dmp文件名称及路径  
" R% B2 v% t, D, ^& M0 |: J  logfile="/sms/t_sms_"$thisday".log"3 y9 k! i# r' B  b. h  U% y7 `. S
  注释:备份日志名称及路径 ; i! k: k4 F, y) O. x
  partitionno="t_sms:P"$thisday``
% J* ^( B$ {/ U; G" c  exp sms/sms rows=y indexes=n compress=n buffer=204800000 direct=y feedback=100000
1 T) J& M; L( b  j  file=$dmpfile log=$logfile tables=$partitionno+ G0 ^6 ]5 `/ u2 X( a+ o/ Q  N
  注释:tables=$partitionno
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-9-28 06:34 , Processed in 0.203977 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表