ࡱ> 9( / 0DTimes New Roman t\d 0t & 0DTahomaew Roman t\d 0t & 0" DArialew Roman t\d 0t & 0" ` .  @n?" dd@  @@`` &*9z)#%$! 55/7A5227C5"   !  /"&(")** 0e0e     A@  A5% 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||S"@87xʚ;2Nʚ;g4ddddd 0hdppp@ <4!d!dg? 0$<4ddddg? 0$ ? %"Oracle Crash RecoveryOracle Crash RecoveryOracle Crash Recovery# Oracle Crash RecoveryOracle Crash Recovery Oracle Crash Recovery Oracle Crash Recovery)&Oracle Crash Recovery Oracle Crash Recovery*'Oracle Crash Recovery$!Oracle Crash Recovery  Oracle Crash Recovery%"Oracle Crash Recovery  Oracle Crash Recovery Oracle Crash Recovery Oracle Crash Recovery+(Oracle Crash Recovery Oracle Crash RecoveryOracle Crash RecoveryOracle Crash RecoveryOracle Crash Recovery(%Oracle Crash RecoveryOracle Crash RecoveryOracle Crash RecoveryOracle Crash RecoveryOracle Crash RecoveryOracle Crash RecoveryOracle Crash RecoveryOracle Crash RecoveryOracle Crash RecoveryOracle Crash RecoveryOracle Crash RecoveryOracle Crash RecoveryOracle Crash Recovery Oracle Crash Recovery!Oracle Crash Recovery&#Oracle Crash Recovery'$Oracle Crash Recovery ` f3` f333ff̙` 333` ̙f` fAff` O̙>?" dd@$?" dd@   " @ ` n?" dd@   @@``PT    @ ` `(p>> :2 (    p   "p,$D  0  B T?"   Z-?"p (  P   " P,$D  0   `Ld?"     `Ld?"P d   "d,$D 0   `?"d    `?"P 0o   "o0,$D  0   fd?"   fd?"0oT -o   "o-   fd?"   fd?"-o  TH ?"  T Click to edit Master title style! !B  N(:?"P  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S  T?"   >*  T?"   @*  T$?"  @*H  0޽h ? f3 Neon Frame   7 / P (   p  "p,$D  0 B T?"  Zx*?"p (  P  " P,$D  0   `Ld?"     `Ld?"P d  "d,$D 0    `?"d     `?"P 0o   "o0,$D  0    fd?"    fd?"0o  T}*?" * T Click to edit Master title style! !  N(*?" `   * W#Click to edit Master subtitle style$ $  Tr*?" * >*  T*?"  * @*  T*?"l * @*H  0޽h ? f3;  0{(  x  c $ P     T?0   ?By Mark RamsayH  0޽h ? f3  @4+(  4x 4 c $D     4 0x  YD f6Before we start remember& & &  4 0  EUNDO GENERATES REDOH 4 0޽h ? f3%     0 Y (  x  c $ć      6"`SC J Buffer Cache" 0 b  <  P  20b  6А"`Y BRedo"0b  0"`6 Y BUndo"0b  <Hc ] , 20b  6"` `  G Datafiles" 0 l ] ],$D 0   B]G@,$D 0 @User A0t  6@ ,$ 0 update curr_accnt set sort_code= 20-20-20 where sort_code= 20-20-21 (H0F  6"`] F Log Buffer 0    0  F20-20-21" 0 2 H  0޽h ? f3   z r  (  x  c $lZ      6["`SC J Buffer Cache" 0 b  <` P  20b  6xc"`Y BRedo"0b  0f"`6 Y BUndo"0b  <jc ] , 20b  6m"` `  G Datafiles" 0 z ]  ],$ 0  <q]G@,$D 0 @User A0  0t ,$ 0 User A requests the server process to perform the update. The server process firsts checks to see if the block to be updated already exists in the buffer cache.(0  6@y"`] F Log Buffer 0    0}  F20-20-21" 0 2 8  C  C  B`JC,$D 0 <SP0B  0D*,$@ 0B  ND?`` ,$D 0H  0޽h ? f3  { s @, (  , , 6F"`SC J Buffer Cache" 0 b , <l P  20b , 6"`Y BRedo"0b , 0l"`6 Y BUndo"0b  , <c ] , 20b  , 6("` `  G Datafiles" 0 z JC  , JC,$ 0  , <,`JC,$D 0 <SP0B , s *D*,$@ 0z ]h , ]h,$ 0 , <o]G@,$D 0 @User A0U , 0s h,$ 0 uWhen the server process does not find the block in the buffer cache. It accesses the datafile to retrieve the block.(v0u , 6@x"`] F Log Buffer 0   , 0x|  F20-20-21" 0 2   , B m # I,$  0 F20-20-20" 0 |B , TD?@  , c $    EOracle Crash RecoveryH , 0޽h ? f3;  8{(  8x 8 c $|     8 6"`SC J Buffer Cache" 0 b 8 < $ P  20b 8 6'"`Y BRedo"0b 8 0,+"`6 Y BUndo"0b 8 <h.c ] , 20b 8 641"` `  G Datafiles" 0 z JC  8 JC,$ 0  8 <5`JC,$D 0 <SP0B  8 s *D*,$@ 0Hz ]h  8 ]h,$ 0 8 <9]G@,$D 0 @User A0 8 0= h,$ 0 2The server process places the data block into the buffer cache. Next the the server process gets an empty undo block& .(x0w 8 6A"`] F Log Buffer 0   8 0E  F20-20-21" 0 2 l `p  8p` ,$D 0  8 <8I9f  ,$ 0 F20-20-21" 0 ~B 8 ND?`p  l  Z 8 Z,$D  0Bt   8 ,$D  0 8 <M ,$@   0 F20-20-20" 0  8 T4R?j j <20-20-21   8 HT? Z,$D 0 : Data Block  H 8 0޽h ? f3Y   4< (  <x < c $     < 6"`SC,$ 0 J Buffer Cache" 0 b < < P  20b < 6"`Y BRedo"0b < 0"`6 Y BUndo"0b < <@c ] , 20b < 6 "` `  G Datafiles" 0 z JC  < JC,$ 0  < <`JC,$D 0 <SP0B  < s *D*,$@ 0z ]   < ] ,$ 0  < <]G@,$D 0 @User A0D < 0  ,$ 0 d& and places the Undo block into the buffer cache. (302 < 6$"`] F Log Buffer 0   < 0  F20-20-21" 0 2 z  Z )<  Z,$ 0P   *<  ,$D  0 +< < ,$@   0 F20-20-20" 0  ,< T?j j <20-20-21   -< H? Z,$D 0 : Data Block  8l  Z 1< Z,$D  0 < B ,$@   0 F20-20-20" 0  .< N? Z : Undo Block  H < 0޽h ? f3  4@ (  @x @ c $     @ 6"`SC J Buffer Cache" 0 b @ < P  20b @ 6̌"`Y BRedo"0b @ 0"`6 Y BUndo"0b @ < c ] , 20b @ 6"` `  G Datafiles" 0 z JC  @ JC,$ 0  @ <Ț`JC,$D 0 <SP0B  @ s *D*,$@ 0  @ B]G@,$ 0 @User A0K @ 6` e8,$ 0 yThe server process first writes the change vectors for the data and undo blocks to the log buffer and then the redo log. z0z @ 6 "`] F Log Buffer 0   @ 0  F20-20-21" 0 2  @ 6D"`SC,$ 0 J Buffer Cache" 0 N   @#  ,$ 0 @ <Դ ,$@   0 F20-20-20" 0  @ T?j j <20-20-21    @ N? Z,$ 0 : Data Block   "@ B ,$  0 F20-20-20" 0  #@ N? Z : Undo Block   '@ Zx?,$D 0 DUser A Change Record (@ Zd?t,$D 0 BUser A Undo Record:l p`4 1@p`4,$D 0B )@ TD?pB *@ TD?0P +@ NT?P`t DUser A Change Record ,@ Z ?P`4 BUser A Undo RecordH @ 0޽h ? f3  kc !(     `6?      64M"`SC J Buffer Cache" 0 b  <U P  20b  6X"`Y BRedo"0b  0\"`6 Y BUndo"0b  <Wc ] , 20b  6,3"` `  G Datafiles" 0 z JC   JC,$ 0   < A`JC,$D 0 <SP0B   s *D*,$@ 0  < ]G@,$ 0 @User A0`  0L P5,$ 0 The before data i.e. column and row id, is then copied to the undo block& .K0K  6d"`] F Log Buffer 0    0L  F20-20-21" 0 2   6"`SC,$ 0 J Buffer Cache" 0 N   #  ,$ 0  < ,$@   0 F20-20-20" 0   T4?j j <20-20-21    Hh? Z,$ 0 : Data Block    < ,$  0 F20-20-20" 0   HL? Z : Undo Block    TdS?,$ 0 DUser A Change Record  TV?t,$ 0 BUser A Undo Record0z p`4  p`4,$ 0~B  ND?p~B  ND?0P  Hؘ?P`t DUser A Change Record  TP?P`4 BUser A Undo Recordz  zj   zj,$D 0~   N? 0 ` ! H? zj <20-20-21  H  0޽h ? f3}  -%&.D0 (  Dx D c $<#     D 6p$"`SC J Buffer Cache" 0 b D <) P  20b D 6H,"`Y BRedo"0b D 0X/"`6 Y BUndo"0b D <3c ] , 20b D 66"` `  G Datafiles" 0 z JC  D JC,$ 0  D <|:`JC,$D 0 <SP0B  D s *D*,$@ 0  D B>]G@,$ 0 @User A0F D 6@ pZ,$ 0 t& and the value in the data block is then updated to reflect the value in the update statement. In this case 20. User A then commits his update and a commit record is written to Redo.0 D 6`E"`] F Log Buffer 0   D 0I  F20-20-21" 0 2  D 6L"`SC,$ 0 J Buffer Cache" 0  D H0Q? zj <20-20-21  ^   D#  ,$ 0 D <hT ,$@   0 F20-20-20" 0  D T0X?j j L20-20-20(    D H(]? Z,$ 0 : Data Block   D <` ,$  0 F20-20-20" 0  D Hd? Z : Undo Block  2 D N? `,$D  0 D Zh? DUser A Change Record D Zi?t BUser A Undo Record0z p`4 D p`4,$  0~B  D ND?p~B !D ND?0P "D Hp?P`t DUser A Change Record #D Tt?P`4 BUser A Undo Record $D T8y?`,$D   0 :Commitl  -D,$D 0B %D TD? &D Zt}?G = User A Commitl  ] .D ],$D 0zB +D <D?"   ,D TJ?PP] = User A CommitH D 0޽h ? f3@  (     `Ў?      <Lc ?"Z  At this point it is worth remembering& .. The the log writer writes according to a very aggressive algorithm: Effectively in real time, and when you say commit, it IS real time ( your session hangs until the log buffer has been written). H  0޽h ? f3   { s  (  x  c $      6"`SC J Buffer Cache" 0 b  < P  20b  6$"`Y BRedo"0b  0"`6 Y BUndo"0b  <c ] , 20b  6 "` `  G Datafiles" 0   <H]G@,$ 0 @User A0  6\"`] F Log Buffer 0    0  F20-20-21" 0 2   6P"`SC,$ 0 J Buffer Cache" 0   H?@ p,$D 0  H?` p,$D 0B  HD?Pp,$D 0B  HD?`Pp`,$D 0B  HD?0Pp0,$D 0Z  < ?"7  So we now have our two blocks in the buffer cache (Data and Undo) and our Redo records& XXH  0޽h ? f3g  6H0 (  Hx H c $x     H 6"`SC J Buffer Cache" 0 b H < P  20b H 6"`Y BRedo"0b H 0"`6 Y BUndo"0b H <c ] , 20b H 6"` `  G Datafiles" 0   H B]G@,$ 0 @User A0 H 6\"`] F Log Buffer 0   H 0  F20-20-21" 0 2  H 6"`SC,$ 0 J Buffer Cache" 0  (H N?@ p,$ 0 )H N?` p,$ 0B +H HD?Pp,$ 0B ,H HD?`Pp`,$ 0B -H HD?0Pp0,$ 0l ` 2H`,$D 0 .H <x`>C,$D 0 @User B0d 1H 6 ,$ 0 ~update acct_balance set balance= 2000 where accnt_no 123456 (@0>H H 0޽h ? f3  ^(  x  c $      6 "`SC J Buffer Cache" 0 b  <H P  20b  6"`Y BRedo"0b  0"`6 Y BUndo"0b  <pc ] , 20b  6<"` `  G Datafiles" 0   <]G@,$ 0 @User A0  6"`] F Log Buffer 0    0   F20-20-21" 0 2   6Я"`SC,$ 0 J Buffer Cache" 0   H?@ p,$ 0  H?` p,$ 0B  HD?Pp,$ 0B  HD?`Pp`,$ 0B  HD?0Pp0,$ 0z `  `,$ 0  <`>C,$D 0 @User B0u  0x ,$ 0 User B requests the server process to perform the update. The server process firsts checks to see if the block to be updated already exists in the buffer cache.0z JC   ,$D 0  <А`JC,$D 0 <SP0B  s *D*,$@ 0B  ND? 0 h ,$D  0H  0޽h ? f3l  L(  Lx L c $4T     L 6hU"`SC J Buffer Cache" 0 b L <Z P  20b L 6@]"`Y BRedo"0b L 0P`"`6 Y BUndo"0b L <dc ] , 20b L 6g"` `  G Datafiles" 0   L <C,$D 0 @User B0I L 0D< h,$ 0 uWhen the server process does not find the block in the buffer cache. It accesses the datafile to retrieve the block.v0vz JC L  ,$ 0 L <h`JC,$D 0 <SP0B L s *D*,$@ 0$l h # I Lh # I,$D 0B L ND?h @ ,$D  0 L <m # I,$  0 F20-20-20" 0 H L 0޽h ? f3  G?@T(  Tx T c $L     T 6"`SC J Buffer Cache" 0 b T <` P  20b T 6,"`Y BRedo"0b T 0"`6 Y BUndo"0b  T <c ] , 20b !T 6L!"` `  G Datafiles" 0  "T <$]G@,$ 0 @User A0 #T 6'"`] F Log Buffer 0   $T 0+  F20-20-21" 0 2  %T 6/"`SC,$ 0 J Buffer Cache" 0  &T H?@ p,$ 0 'T H?` p,$ 0B (T HD?Pp,$ 0B )T HD?`Pp`,$ 0B *T HD?0Pp0,$ 0<z `h +T `h,$ 0 ,T <5`>C,$D 0 @User B0 -T 0`9 h,$ 0 &The server process places the data block into the buffer cache. Next the the server process gets an empty undo block& .x0xz JC .T  ,$ 0 /T <T>`JC,$D 0 <SP0B 0T s *D*,$@ 0z `p  4T  P ,$D 0 5T < B9f  ,$ 0 F20-20-21" 0 ~B 6T ND?`p  z  S T <F ,$@   0 F20-20-20" 0  ?T TK?O c < 1000   @T HN? S,$D 0 : Data Block  H T 0޽h ? f3%  %4\Y(  \x \ c $h     \ 6\"`SC J Buffer Cache" 0 b \ < P  20b \ 64"`Y BRedo"0b \ 0D"`6 Y BUndo"0b \ < c ] , 20b \ 64"` `  G Datafiles" 0   \ <]G@,$ 0 @User A0  \ 6 "`] F Log Buffer 0    \ 0  F20-20-21" 0 2   \ 6"`SC,$ 0 J Buffer Cache" 0   \ H?@ p,$ 0 \ H?` p,$ 0B \ HD?Pp,$ 0B \ HD?`Pp`,$ 0B \ HD?0Pp0,$ 0 \ B`>C,$ 0 @User B0V \ 6| ,$ 0 & and places the Undo block into the buffer cache. The server process then writes the change vectors that it is going to apply to the data and undo blocks, to the log buffer and the redo log.. 0z JC \  ,$ 0 \ <`JC,$D 0 <SP0B \ s *D*,$@ 0:z  Z #\  ,$D  0 $\ < ,$@   0 F20-20-20" 0  %\ H? Z : Undo Block  z  S &\  ,$ 0P   '\  ,$D  0 (\ < ,$@   0 F20-20-20" 0  )\ T<?O c < 1000   *\ H? S,$D 0 : Data Block   .\ T6?,$D 0 DUser B Change Record /\ Tr?t,$D 0 BUser B Undo Record0z @0 0\ @0,$D 0~B 1\ ND?@P~B 2\ ND?0  3\ H s? `04 DUser B Change Record 4\ Th?   BUser B Undo RecordH \ 0޽h ? f3/  ()o(     `^?      67"`SC J Buffer Cache" 0 b  <& P  20b  6^"`Y BRedo"0b  0="`6 Y BUndo"0b  <}c ] , 20b  6xR"` `  G Datafiles" 0   <4$]G@,$ 0 @User A0  6@8"`] F Log Buffer 0    0?  F20-20-21" 0 2   6"`SC,$ 0 J Buffer Cache" 0   H?@ p,$ 0  H?` p,$ 0B  HD?Pp,$ 0B  HD?`Pp`,$ 0B  HD?0Pp0,$ 0  <`%`>C,$ 0 @User B0b  0% PL,$ 0 The before data i.e. column and row id, is then copied to the undo block& . L0Lz JC   ,$ 0  <x(`JC,$D 0 <SP0B  s *D*,$@ 0:z  Z   ,$ 0  <k ,$@   0 F20-20-20" 0   Hn? Z : Undo Block  z  S   ,$ 0P     ,$D  0  <r ,$@   0 F20-20-20" 0   Tv?O c < 1000    Hz? S,$D 0 : Data Block  z  zj    z,$D 0~ ! N? 0 ` " H? zj < 1000   # TT?,$ 0 DUser B Change Record $ TL?t,$ 0 BUser B Undo Record0z @0 % @0,$ 0~B & ND?@P~B ' ND?0  ( H,? `04 DUser B Change Record ) T?   BUser B Undo RecordH  0޽h ? f3.  p'1`PR(  `x ` c $0e     ` 6df"`SC J Buffer Cache" 0 b ` <k P  20b ` 6C,$ 0 @User B0A ` 6؍ e,$ 0 oThe value in the data block is then updated to reflect the value in the update statement. In this case 2000. p0pz JC `  ,$ 0 ` <`JC,$D 0 <SP0B ` s *D*,$@ 0z  S `  ,$ 0R   `  ,$D  0 ` < ,$@   0 F20-20-20" 0  ` TT?O c > 2000   ` H? S,$D 0 : Data Block  *z  Z  `  ,$ 0 !` <\ ,$@   0 6"0 "` H̦? Z : Undo Block  2 #` N?` P ,$D   0 '` Z? DUser B Change Record (` Zh?t BUser B Undo Record:l @0 1`@0,$  0B *` TD?@PB +` TD?0  ,` N? `04 DUser B Change Record -` Z ?   BUser B Undo Record 0` HĹ? z < 1000  H ` 0޽h ? f3  YQ`'1d (  dx d c $      d 6@ "`SC J Buffer Cache" 0 b d < P  20b d 6<"`Y BRedo"0b d 0"`6 Y BUndo"0b d <c ] , 20b d 6 "` `  G Datafiles" 0   d <!]G@,$ 0 @User A0  d 6$"`] F Log Buffer 0    d 0h)  F20-20-21" 0 2   d 6h."`SC,$ 0 J Buffer Cache" 0   d H?@ p,$ 0 d H?` p,$ 0B d HD?Pp,$ 0B d HD?`Pp`,$ 0B d HD?0Pp0,$ 0 d B0`>C,$ 0 @User B0 d 603 h,$ 0 8User B, instead of issuing a commit, goes to lunch for several hours. Meanwhile, User A s block is continuously updated. ({0zz JC d  ,$ 0 d <8`JC,$D 0 <SP0B d s *D*,$@ 0z  S d  ,$ 0R   d  ,$D  0 d <\= ,$@   0 F20-20-20" 0  d TA?O c > 2000   d HC? S,$D 0 : Data Block  *z  Z d  ,$ 0 d <XH ,$@   0 6"0 d HK? Z : Undo Block  2  d N?` P ,$  0 $d ZO? DUser B Change Record %d ZS?t BUser B Undo Record +d HT? z < 1000  0z @0 -d @0,$  0~B .d ND?@P~B /d ND?0  0d H[? `04 DUser B Change Record 1d T_?   BUser B Undo RecordH d 0޽h ? f3  P'6lM(  lx l c $Ы     l 6,"`SC J Buffer Cache" 0 b l < P  20b l 6"`Y BRedo"0b l 0"`6 Y BUndo"0b l <Lc ] , 20b l 6"` `  G Datafiles" 0   l <H]G@,$ 0 @User A0  l 6"`] F Log Buffer 0    l 0  F20-20-21" 0 2   l 6"`SC,$ 0 J Buffer Cache" 0   l H?@ p,$ 0 l H?` p,$ 0B l HD?Pp,$ 0B l HD?`Pp`,$ 0B l HD?0Pp0,$ 0 l <`>C,$ 0 @User B0z JC l  ,$ 0 l <`JC,$D 0 <SP0B l s *D*,$@ 0z  S l  ,$ 0R   l  ,$D  0 l <T ,$@   0 F20-20-20" 0  l T?O c > 2000   l H,? S,$D 0 : Data Block  *z  Z l  ,$ 0 l < ,$@   0 6"0 l H(? Z : Undo Block  2 l N?` P ,$  0 #l Z? DUser B Change Record $l Z?t BUser B Undo Record *l H8? z < 1000  L ,l 0@ e,$ 0 DBWR starts to search the buffer cache for changed blocks which are no longer active. In this case, User B s block. Not user A s block. User A s block may have changed, but it is still active.0z @0 2l @0,$  0~B 3l ND?@P~B 4l ND?0  5l H? `04 DUser B Change Record 6l T?   BUser B Undo RecordH l 0޽h ? f3#  8#0#@0Bp@"(  px p c $A     p 6C,$ 0 @User B0z JC p  ,$ 0 p < l`JC,$D 0 <SP0B p s *D*,$@ 0z  S p  ,$ 0R   p  ,$D  0 p <pp ,$@   0 F20-20-20" 0  p Tt?O c > 2000   p Hx? S,$D 0 : Data Block  *z  Z p  ,$ 0 p <} ,$@   0 6"0 p H? Z : Undo Block  2 p N?` P ,$  0 "p Z? DUser B Change Record #p Z?t BUser B Undo Record )p HP? z < 1000   *p 0 h,$ 0 Having found User B s block, DBWR writes the block to the datafiles and writes a block written record (BWR) to Redo.uul  `  1p ` ,$D 0~B +p ND?  P  .p B@@ P ` ,$@   0 U2000040 0z @0 6p @0,$  0~B 7p ND?@P~B 8p ND?0  9p H? `04 DUser B Change Record :p T<?   BUser B Undo Recordl    >p  ,$D 0B ;p TD? @   ? * < 1000  B  HD?Pp,$ 0H  0޽h ? f3  mep.(  x  c $      6"`SC J Buffer Cache" 0 b  <X P  20b  6"`Y BRedo"0b  0\"`6 Y BUndo"0b  <c ] , 20b  6"` `  G Datafiles" 0   6|"`] F Log Buffer 0    0   F20-20-21" 0 2   6"`SC,$ 0 J Buffer Cache" 0 d  0 \,$ 0 Oracle has one finally task to complete. The rollback of User B s transaction.PPB  HD?Pp,$ 0B  HD?0Pp0,$ 0B  HD?`Pp`,$ 0z  `  ` ,$ 0  < `,$  0 F20-20-20" 0   H?  : Undo Block    Ht? * < 1000  B  HD?Pp,$ 0 # H?@ p,$ 0 $ H?` p,$ 0 l 0 ` ( .`0 (,$D 0  S  0 ` (,$D  0P     ,$D  0   < ,$@   0 F20-20-20" 0  ! T?O c < 1000   " H ? S,$D 0 : Data Block  " , <?"p  ,$D 0H  0޽h ? f3  um`(  x  c $<      6p"`SC J Buffer Cache" 0 b  < P  20b  6"`Y BRedo"0b  0 "`6 Y BUndo"0b  <c ] , 20b  6x"` `  G Datafiles" 0   60"`] F Log Buffer 0    0x  F20-20-21" 0 2   6"`SC,$ 0 J Buffer Cache" 0 "  0 ,$ 0 \It is at this stage Oracle opens the database, as rollback can occur with the database open.]]B  HD?Pp,$ 0B  HD?0Pp0,$ 0B  HD?`Pp`,$ 0z  `  ` ,$ 0  < `,$  0 F20-20-20" 0   H?  : Undo Block    HH? * < 1000  B  HD?Pp,$ 0z  S  `0  (,$ 0P     ,$D  0  <$ ,$@   0 F20-20-20" 0   TH?O c < 1000    H? S,$D 0 : Data Block    H?@ p,$ 0  H?` p,$ 0"  <?"p ,$D 0  p  W?OPENArial Black"k~N,$Dp 0H  0޽h ? f3`   (  x  c $      < ?"p\ nZThanks to John Watson, an Oracle trainer, for explaining all this to me on an RMAN course.H  0޽h ? f3)  Pi(  x  c $      <@ ?"  7THE ENDH  0޽h ? f3r0A3*p<:Sa tn%Zm2mw1E{YTl/ك Я7%G4ibO6+Oh+'0$R hp  < H T`hOracle Crash RecoveryP Mark.RamsayPC:\Program Files\Microsoft Office\Templates\Presentation Designs\Neon Frame.pot Mark.Ramsay17kMicrosoft PowerPointoso@E[@JR(@@8GPg  R('& &&#TNPP2OMi & TNPP &&TNPP     'A x(xKʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwwBBBBBBBBBBBBBBBBBBBkBkBkBkBkBkkkkkkkkkk<B<C?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdeghijklmnopqrstuvwxyz{|}~Root EntrydO)Current UserSummaryInformation(fTRPowerPoint Document(DocumentSummaryInformation8Root EntrydO)p-q*9Current UserASummaryInformation(fTRPowerPoint Document(#_ John WatsonJohn Watson