a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 170|回复: 1

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

[复制链接]
发表于 2012-8-4 14:06:19 | 显示全部楼层 |阅读模式
1 简述
/ e5 T- o; j# Z  一般情况下,为保证数据库数据不丢失或少丢失,降低事故恢复时间,我们常使用Oracle数据库export工具对数据库进行定期备份。对于常用的exp备份,无论是备全库、备用户或是备单个表,命令都比较简单。/ u1 o; N3 J1 ^9 ?  _* I+ a
  下面说明一下如何每天定时备份分区表的某个分区的详细步骤。& X$ F( @& h6 M4 I/ V
  2 环境描述. _: I# {8 n4 i$ K
  硬件环境:IBM P5703 v7 q1 I( _- ^3 d3 j
  操作系统:AIX5.3# L: J8 S) o8 [" y7 `
  数据库版本:Oracle9.2.0.6
- @5 H" x% [# u$ `  业务场景:数据库t_sms表包含每天所有的短信发送历史数据(每天大约700W),由于数据量庞大,且平时有查询需要,所以根据月日建立了分区(每天一个分区,比如P01_01代表1月1日的数据)(t_sms脚本: )
' ^3 K% A/ L; b  备份需要:每天700W数据存放在一张表中,造成此表数据量庞大,极易产生索引失效等副作用,故决定对此表历史数据进行迁移,迁移策略为保留前天到目前的数据在表中,其他数据迁移到历史归档库中。如有查询需要,可直接连接归档库进行短信数据查询。这样一方面可以减少t_sms表的数据量,另一方面也把查询数据迁移到归档库,降低生产库负荷。
& M+ r  P4 B9 J1 b+ O  3 备份策略
8 n% Z7 E6 ~0 J, o: x! S  1、每天凌晨00:30分,利用crontab执行exp脚本,把前天分区里的数据生成dmp文件;9 p; D& \9 k. k1 U/ Z1 [
  2、3:30分,ftp到归档库
8 V5 Y8 U* X* G2 `1 y. d7 q  3、4:30分,归档库执行imp脚本导入归档数据+ r$ P# c9 Y. Z" |3 G
  4 操作步骤) y' l- K, L2 |/ k
  1、以Oracle用户身份登陆小型机;
" g6 v! R- l( I3 ~/ W  C- p; p, U6 u  2、把exp.sh脚本拷贝到小型机/sms目录下! y1 y  [3 ^! v
  3、chmod 755 /sms/exp.sh. Q( o; `+ \2 w0 S
  4、执行crontab –e,输入30 00 * * * /sms/exp.sh
% Z  ?$ B( O3 ?  5、建立ftp用户: E4 \0 D: r: E+ H1 j
  6、在归档库上设定自动任务,定时ftp到小型机下载dmp文件,并imp到归档库中。
回复

使用道具 举报

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

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

 5 Exp脚本解释 
$ R$ j1 j/ A, x5 T5 v/ i8 o& c  GetPrevDate(){/ l2 @" s% v0 `& N! X) U
  str=$1
# i' i3 S' Y4 k+ J. p! E- P  days=$2
+ X' k9 d" q: _7 {6 L# |3 U" d" a  yy=`echo $str|cut -c 1-4`
# q: ]1 M; H4 N, r  }  mm=`echo $str|cut -c 5-6`% j5 Q. x- }0 q' F8 A! `" u
  dd=`echo $str|cut -c 7-8`
3 s) `; ^2 }7 T0 A9 h* |  sav_dd=$days+ v9 M; u( m* J( Y
  days=`expr $days - $dd`
( a8 b6 P( U+ L( {7 U1 w  while [ $days -ge 0 ]) m8 L0 p2 ?& i  m9 o! I# t% ]
  do7 `+ |  S) l  k: P+ T+ F, L
  mm=`expr $mm - 1`6 ^' s  [3 n! h4 w% u( k& L
  [ $mm -eq 0 ] && mm=12 && yy=`expr $yy - 1`
, W3 {8 `+ @* n  aaa=`cal $mm $yy`6 A- e4 T* y, o. e* r, l3 x/ O
  bbb=`echo $aaa|awk ’{print $NF}’`
$ [$ T9 r; e* \" M* g+ w2 W  days=`expr $days - $bbb`
# h5 C; v9 ^1 x) Q  done2 Z0 s+ b! M, V* b
  dd=`expr 0 - $days`- L% t, K' \; k* @5 h6 s
  expr $dd : "^.$" > /dev/null && dd=0$dd& b2 X( |6 G0 o) P& Q; e4 q
  expr $mm : "^.$" > /dev/null && mm=0$mm
$ ^: ^4 ~$ K& X* b& B3 u  echo $mm"_"$dd- N2 ~( v% z) l: W, k1 A4 K1 A
  }
( @, P$ ?# Z! {+ f* }( q  注释:Ksh下的函数,用于取得第n天前日月数+ B3 p  p3 a1 p; v# @7 n8 S
  todayDate=`date "+%Y%m%d"`
( a/ V9 I$ m" c5 \2 f) L% y0 C  thisday="`GetPrevDate ${todayDate} 2`"* X' J3 t, x' Q0 M# H
  注释:用于取得前天的日月,形如08_08 
+ k# r4 K. G% X" ^7 D. t, W  x  dmpfile="/sms/t_sms.dmp"* W% c& ^3 l2 n
  注释:Dmp文件名称及路径  + r6 l! t8 q* M" \! v
  logfile="/sms/t_sms_"$thisday".log"' b- H7 J& I/ f1 w
  注释:备份日志名称及路径 - C  Q  S& i. Y0 h0 I# J$ j4 T
  partitionno="t_sms:P"$thisday`` & ~7 B3 {1 |9 L4 H8 g; m
  exp sms/sms rows=y indexes=n compress=n buffer=204800000 direct=y feedback=100000 / X$ R0 a! D7 P
  file=$dmpfile log=$logfile tables=$partitionno
* ^* a7 F# D9 i' j6 h8 y  注释:tables=$partitionno
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-8 10:13 , Processed in 0.231910 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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