因为ODU呼吁斗劲多,出格是关头的unload呼吁斗劲复杂,本文将简单介绍几种场景下使用ODU进行数据恢复时,使用的呼吁序列。; u* l) e1 M. A4 C/ ?3 }3 ^
场景1. 数据库不能启动,可是SYSTEM表空间中的数据字典是完整的。 F% t5 |) h$ {4 X% o
生成数据字典:unload dict( K6 q* L! O' \( b5 c
列出用户: list user
( R# E8 h" f& s 列出用户下的所有表: list table username, K1 X9 F- {; c
恢复表: unload table username.tablename: d8 q5 M4 D! R8 H& s
也可以按用户恢复: unload user username
+ ]- A6 {6 K4 I" s 场景2. 表被TRUNCATE。
6 Q0 w) @% l4 l* @/ u# ^3 Y OFFLINE表地址的表空间
# D2 m# ?. r( F' r9 u6 q7 b 生成数据字典:unload dict
7 y2 Y# w5 b) R3 c' o+ G2 b6 i& { 显示表的段头:desc username.tablename
( J9 m# e+ X, U! ?, _ 找到现实的data object id: dump datafile file# block block## \; `( y7 M2 ^4 R: z+ z0 H! n
扫描数据:scan extent
! s% s9 `& s0 d- A, z* v4 e" q 恢复表:unload table username.tablename object object_id
4 K4 @1 R7 G1 ] [8 E UPDATE:2 V+ z" [4 |* ^4 ~
从3.0.7版本起头,恢复Truncate表更便利,只需要执行下面的轨范:
. e) F. Z5 k$ d$ S! U2 J. o L OFFLINE表地址的表空间& K# c# O5 x+ k8 r5 l
生成数据字典:unload dict
8 Y; p( u* ^6 \- N# I' F. \* r 扫描数据:scan extent, R9 B1 m9 I1 _; i: E
恢复表:unload table username.tablename object auto
0 O) t3 }; |. B" q* K# U 场景3. 表被DROP。' D# b+ T8 K$ j R3 r
OFFLINE表地址的表空间5 `( V3 w1 G* v* `8 o
使用logminer从日志琅缦沔挖掘被drop失踪的表其data object id,如不美观不能挖掘,按下面的场景4进行恢复。1 ~0 v) a2 F$ n1 r; z' A$ }
扫描数据:scan extent, f1 e3 |% |+ T6 o3 s8 T
如不美观没有表结构信息,需要自动来判定:unload object data_object_id sample
2 A' @. e/ o/ t4 ~/ M* d 恢复表:unload object data_object_id column coltype coltype…5 t8 N0 `) V' r& {( r( t7 J4 c. M
场景4. 系统表空间损坏。9 x2 w% H* Q4 r6 E4 ~
扫描数据:scan extent
0 M x1 W/ P J; O0 B! C6 ^ 搜索数据:unload object all sample
% `% G/ E, r. D6 J, D" h# P 从结不美观文件sample.txt查找需要的数据1 h$ j! i" g, _+ V
恢复需要的表:unload object data_object_id column coltype coltype…+ D$ E+ i' u# y% m9 W
场景5. 表中数据被DELETE。
" F! ^9 ?0 N; K& s& F" C 将参数unload_deleted设置为YES
; F0 @! i0 M% Q" q; q 生成数据字典:unload dict( H& z) A7 S0 c5 R/ a6 f
恢复表: unload table username.tablename |