天地不仁,以万物为刍狗!

ORACLE**手册长篇连载--第五部分

上一篇 / 下一篇  2007-06-18 00:00:00 / 个人分类:oracle

5 备份及恢复ITPUB个人空间k&W$QNh'b!c{ Q
ITPUB个人空间8RP4W*?/ds7NZ
所有参见内容都在附件05_backup/下。ITPUB个人空间E&A JL)X2V(g

O6Rb8Q!@m `N5GPi05.1 export与import方式
f)T O@$rz0ITPUB个人空间%Zl ZC%H$b"c$v"M,b
参见dmp/backup.sh。ITPUB个人空间 O4T9mk'LK ~ _
ITPUB个人空间k7F-w dz,[g
见《工具》对exp和imp的描述ITPUB个人空间M*B'f D0j1G4` Q.V
ITPUB个人空间[$E?4_pQ)D`
数据库中的对象是比较多的,但除了表以外占用的空间不大,所以当表中记录数量达到一定规模后,以用户的方式一下子把数据exp出来就显得不够灵活。考虑以下的策略,先exp出除表数据以外的所有对象,再分别exp出每张表的数据。
4b&N;ZOgYU|0ITPUB个人空间5|3l1P }Z%N3baB
exp dbuser所有的数据对象
.f]BCQ3?S;|0
ZG*Q5b |"js Kp.PA z,]0exp dbuser/oracle file=dbuser.dmp log=user.log owner=user buffer=2048000 rows=n
+|/Eo DA0ITPUB个人空间9VL[S2^AS%f)M
exp单张表的数据
t*ET\H pe0ITPUB个人空间 L%\,NQ Gc*\7R _-}
sqlplus -s dbuser/oracle </dev/null
)X#dn y"N(Q0ITPUB个人空间-y1g j2I$U8`xq$f|
set colsep |;ITPUB个人空间&E{;Q)Ztxj
ITPUB个人空间{kqUu$u7X
set echo off;ITPUB个人空间?CMN)RR m
ITPUB个人空间q*o+\e8b2}4B(x)YE7Z
set feedback off;ITPUB个人空间e Sc1sS4H6L2r
ITPUB个人空间^SwW0o{.C1C
set heading off;ITPUB个人空间P jA,W I

;^2c's uhQI+u T0set pagesize 0;
D6W2J[b RS6c0ITPUB个人空间Q$A;DOl:C/g{
set linesize 1000;ITPUB个人空间*\k r5r9?y `

BaP r6_SC0set termout off;
&Q w)n~Yj J4nse0
3Z.F U7z3{/y_TY-`0set trimout on; ITPUB个人空间6z-J:gO2V|7Y

@*F"C1`/p oZ | M7z0set trimspool on;ITPUB个人空间6gS:kw$H*HA@
ITPUB个人空间O7d@#]%e&Q
spool tables.txt;ITPUB个人空间y\2cvsInO
ITPUB个人空间e!Mn;jXc
select table_name from user_tables;ITPUB个人空间&nN~ _ae

z(~+U"fR \,n0spool off;ITPUB个人空间 a$u8}ud T fSa,B
ITPUB个人空间 G5cM)q~7F
exit;
;hA(x5tz0ITPUB个人空间m g|Kl]+Yg
EOFITPUB个人空间!y)Qu_$|^

/wV"`:[j+BK0for table in $(cat tables.txt)
i YcD!N5p)z0
X$| c}+p._"C+D$l0doITPUB个人空间HGj P UMru6|

} Q;}k#cu0exp dbuser/oracle file=${table}_$(date '+%Y%m%d').dmp tables=$table direct=y
mjj!xR:]v7b0ITPUB个人空间4[/Ej6JS9yW V
done
"t7e8_?I)_5Qcx0ITPUB个人空间/i?O:pS`R*RN,I
5.2 冷备份ITPUB个人空间G*BFz9~D o D f b
ITPUB个人空间]P-G7r!XX\
shutdown数据库,将所有和本实例有关的文件,包括datafile,controlfile,redolog,archived redolog,initora.ora等全部备份。恢复时只要将这些文件放回从前的目录,startup数据库即可。
5na6w@-d8^0
)`R8{2X)jv*Sk/x{ h05.3 联机全备份+日志备份ITPUB个人空间;A*HTT)C.U{._*uD
ITPUB个人空间!XC%x(rDI
5.3.1 设置
u_#G n!T0
6@6`l#_*y:r j3S0如果数据库实例原来没有使用归档日志功能,则必须进行配置修改
b)nU"MU2sq.q*y Q0ITPUB个人空间 v;t7uOE*Ft
initoradb.ora:
(c,M$k6SvGU ~0
/[:_'[d},zb0log_archive_start = true #实例启动时同时启动归档进程。ITPUB个人空间#AXioP

#ty9b6f;\d5T"V0log_archive_dest_1= "location=/appl/oracle/oradata/orafe/arch/arch" #归档日志目录。ITPUB个人空间6Uc i,y z
ITPUB个人空间0u Q+@h u w(r
打开归档日志功能:
-]9cV(a{&~)pv7c0ITPUB个人空间|i%X N;v)^$mHD;p2qG
shutdown数据库ITPUB个人空间!q o,A7zO-k$I/{T
ITPUB个人空间wZy3Gf\`w/b
sqlplus "/ as sysdba"ITPUB个人空间eXwjy&r a

b)U(Z$eG&P3V0SQL>startup mount
Pri8XW;`0
!N1x-x+MN6C?3\)f0SQL>alter database archivelog; ITPUB个人空间c;M-QT'ZJaO p9{
ITPUB个人空间G+S4_Xbs9]
SQL>alter database open;ITPUB个人空间a p4H*o3P[ ANg
ITPUB个人空间?3W([@7D$gQ
可用archive log list查看状态,去除归档日志功能的命令为alter database noarchivelog。ITPUB个人空间%A_2z-pA!}-I [

"rp:U(yy$PpQk p05.3.2 步骤ITPUB个人空间t%X%G#L(r a5x

!lM:BT w8c(g5P0参见online/full.sh、daily.sh,以osdba组的用户执行ITPUB个人空间?*p*NB2] h
ITPUB个人空间 Ikd'A;? ?E
联机全备份:ITPUB个人空间'vD|[6BQa T5It,G

a8F-l4U7Ou F0数据库处于open状态,依次对各个表空间备份ITPUB个人空间.cyl y _e I
ITPUB个人空间2K]@;]0z |;F9J
sqlplus "/ as sysdba"
6a.G0`0Z qwe o0ITPUB个人空间;Af R5o~j+S
SQL>alter tablespace system begin backup;ITPUB个人空间!Q3B.~Rv4r1G`0pS
ITPUB个人空间 F,P}W PD WJ1AZ
复制此tablespace各个datafileITPUB个人空间],_ dtZZf

do'G,p(@hz^1^0SQL>alter tablespace system end backup;ITPUB个人空间Y:At f"H!C.n

k3fd Ao m wY.MF0注意:据推测,begin backup是对tablespace冻结写入,end backup是解除冻结,因此复制datafile的过程不宜过长
a6K PIU9q et|V0ITPUB个人空间$] Pc]PO"s U;[
备份controlfileITPUB个人空间uN+|r4g,fI\})Zqr

A/VD0F8F'[:M2N0SQL>alter database backup controlfile to '…….';ITPUB个人空间n8E-b#B8a nb
ITPUB个人空间6e$\|(U6~:be
日志备份:
!Z$\9I1i!E0ITPUB个人空间 e,p2ihE;L!T2y
sqlplus "/ as sysdba"
.D Vu,o2Cu)I;x-` V0
ha4`1c3UO.c s!K0SQL>alter system archive log stop;ITPUB个人空间${@%`6y/l!YP

D7|'vkX1d/t0移去日志目录下的所有archived redolog
y vwk6~3R;^L0
%m(o:r6IX0SQL>alter system archive log start;ITPUB个人空间0q v L|[Lu
ITPUB个人空间+l1_9C j&G
5.3.3 恢复ITPUB个人空间Z;J'EJ N A
ITPUB个人空间0X)W6fR/m[5Z:U%\
数据库处于shutdown状态
/D l9\Y Z0ITPUB个人空间+N8e[t(f0eA8Z
最差情况:磁盘全部损坏,仅保存上次联机全备份和每天日志备份
o svkX i0ITPUB个人空间z vO}r
解决硬件故障,配置系统软件及环境ITPUB个人空间 o*tU}a&n

^ Xsg7}Q|6f0oracle用户,将全备份和日志备份转移至相应目录,根据initoradb.ora中controlfile的配置,将备份控制文件复制到响应目录下ITPUB个人空间a]5E&N9l;J+Nx7['hY

m[\;zV:~]7AT9@g}0sqlplus "/ as sysdba"ITPUB个人空间;f };U2Oe"X
ITPUB个人空间 Z`"tNr!Yi
SQL>startup mountITPUB个人空间 s6y*_BXZ

VQPe}!jCI.Ks0SQL>recover database until cancel using backup controlfile;
C*vN'Ed0
f"h(B n%m-I+b%_0逐个确认待恢复的archived redolog,待最后一个完成后,键入cancel,使恢复结束ITPUB个人空间,^&S#O"o0k h C w
ITPUB个人空间0]/a8C.E1gY b|c/g
SQL>alter database open resetlogs;
]Y T:v(`e0ITPUB个人空间'u v2Cz7CHuFUP
注意:由于日志已经重置,所以应尽快做一次联机全备份
2h4R5xO kW0
GYGxF:Q]vz0丢失某数据文件
E6L8e8c7IwT0ITPUB个人空间d2m[ei[8jG
只要将此文件从上次联机全备份中复制至其目录,并将自上次联机全备份以来所有日志备份移至归档目录
L(?/^tO4Bd0ITPUB个人空间j?a'`(X*hL
sqlplus "/ as sysdba"ITPUB个人空间:v"s K8FZnfnN

;^:`\;T2fK0SQL>startup mount
(T'\H[ }WM[.S0ITPUB个人空间'[je$Y7o;h_ pN
SQL>alter database recover datafile 'path/file';或者简单些recover database;ITPUB个人空间hoLe,tZ X?7B-w ~ A_U
ITPUB个人空间 P6K9xX2U sd`
SQL>alter database open;
|n,KW |4d:b0
?5u)ec+NJ(h0如果此文件损坏或丢失,又无备份,则只能将此文件脱机,将数据exp出来,重建表空间,再imp进去ITPUB个人空间 WzU G~s,J

$I oH2q's"a8u+Q;hR0sqlplus "/ as sysdba"
vy!X/Bh5{b0
'r6C8q v6q}4r0SQL>connect internalITPUB个人空间e wr.?y'L

mxw2E-nP2Yh5RG5I0SQL>startup mount
+p.ui\E6Lax6t@0ITPUB个人空间$v;PpIIg+\2f^
SQL>alter database datafile 'path/file' offline;ITPUB个人空间 z%|oFV5xR[

V$E2`X8bf#rXvY0SQL>alter database open;ITPUB个人空间'E8J*r*j/q1t

P#G hERE/vfA5u5X$[)r05.4 注意要点
T&@p*z](O0R0
|r C a8U,A5`0无论有多少把握,恢复前先做冷备份,此为第一原则ITPUB个人空间0K?+~8q8] eDB

}&\uu| B"L)@0不这样做,便是无路可退,一旦失误,后果不必多说。
1r ?)Wi3n!HY0
)F Aj HC z7R0rollback段损坏ITPUB个人空间!n9M;slJ5q!d
ITPUB个人空间7i%bcaJQ/me ]dJ
这是非常严重的问题,可在initora.ora中写入_corrupted_rollback_segments=(rxx),启动时避开损坏的rollback段,这只是权宜之计。如数据库处于archivelog,应从上一次全备份起利用备份的日志进行恢复;如数据库处于noarchivelog,应尽快将全部数据export出来,重建数据库,再import进去。所有操作之前,应做冷备份。
bw}:fb0ITPUB个人空间W7|r r-hY [$].c
数据库异常中止处理ITPUB个人空间'o+Z"@*?R'{3z"H

+f*o!j+i8C'r-[0通过手工shutdown abort操作中止数据库,不会产生大的问题,通常直接startup无需使用介质恢复命令ITPUB个人空间q\cK-`U
ITPUB个人空间!^ pBC2~
如果由于机器崩溃引起的中止,则情况严重得多,有可能要使用到上面提到的恢复方法,不过这种现象并不多见。一般需要显式使用介质恢复命令,如下:
1VZ9J+^ V%sb0ITPUB个人空间YlA|*S+} `
sqlplus "/ as sysdba"
%W)Rar~s#S'T8E D7G0
0?z s%c7V)KZj0SQL>startup mount;
i-wkj:O!B^xKV0
I s9n!D ^Q0SQL>recover database;
6y-]O+ET1M0ITPUB个人空间8^H5{6J9}6pK
SQL>alter database open;

SJ)B4@ R*Uj.eL0

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-11-24  
      1
2345678
9101112131415
16171819202122
23242526272829
30      

数据统计

  • 访问量: 12228
  • 日志数: 273
  • 图片数: 1
  • 文件数: 2
  • 建立时间: 2007-12-01
  • 更新时间: 2008-11-19

RSS订阅

Open Toolbar