因为无法使用flashback(闪回)的方式恢复truncate掉的数据,
如果有备份,truncate掉的数据是可以恢复的,但是要进行不完全恢复,这在生产环境是不允许的.
如果没有备份,就无法恢复数据.
ODU工具就是针对没有备份的情况来恢复truncate掉的数据,其实有备份也可以使用ODU来恢复数据.
因此使用ODU工具来恢复truncate掉的数据:
(ODU详细用法不在本篇中介绍)
---------------------------------------------
测试环境:
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
windows xp系统平台
(同样适合oracle9i数据库版本)
开始:
1.建立测试表
SQL*Plus: Release 10.2.0.1.0 - Production on 星期六 2月 26 17:27:05 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn /as sysdba
已连接。
SQL> conn scott/tiger
已连接。
SQL> select count(*) from test;
COUNT(*)
----------
40701
SQL> insert into test select * from test;
已创建40701行。
SQL> /
已创建81402行。
SQL> /
已创建162804行。
SQL> commit;
提交完成。
SQL> select count(*) from test;
COUNT(*)
----------
325608
SQL> truncate table test;
表被截断。
SQL> select count(*) from test;
COUNT(*)
----------
0
误删除数据之后,立刻锁定该表所在表空间,使其离线,保留
该数据不被覆盖.
SQL> alter tablespace users online;
表空间已更改。
SQL> alter system checkpoint;
2.运行ODU工具:
(这个工具你可以搜索下载得到.)
Oracle Data Unloader:Release 3.0.5
loading default config.......
byte_order little
block_size 8192
data_path data
lob_path lob
charset_name ZHS16GBK
ncharset_name AL16UTF16
output_format text
lob_storage file
clob_byte_order little
trace_level 1
delimiter |
load control file 'config.txt' successful
loading default control file ......
ts# fn rfn bsize blocks bf offset filename
---- ---- ---- ----- -------- -- ------ ----------------------------------------
----
0 1 1 8192 62720 N 0 D:\ORACLE\PRODUCT\10.2.0\ORADATA\MVIEW\S
YSTEM01.DBF
1 2 2 8192 16640 N 0 D:\ORACLE\PRODUCT\10.2.0\ORADATA\MVIEW\U
NDOTBS01.DBF
2 3 3 8192 39680 N 0 D:\ORACLE\PRODUCT\10.2.0\ORADATA\MVIEW\S
YSAUX01.DBF
4 4 4 8192 5280 N 0 D:\ORACLE\PRODUCT\10.2.0\ORADATA\MVIEW\U
SERS01.DBF
6 5 5 8192 12800 N 0 D:\ORACLE\PRODUCT\10.2.0\ORADATA\MVIEW\E
XAMPLE01.DBF
load control file 'control.txt' successful
loading dictionary data......
ODU> unload dict
CLUSTER C_USER# file_no: 1 block_no: 89
TABLE OBJ$ file_no: 1 block_no: 121
CLUSTER C_OBJ# file_no: 1 block_no: 25
CLUSTER C_OBJ# file_no: 1 block_no: 25
found IND$'s obj# 19
found IND$'s dataobj#:2,ts#:0,file#:1,block#:25,tab#:3
found TABPART$'s obj# 266
found TABPART$'s dataobj#:266,ts#:0,file#:1,block#:2121,tab#:0
found INDPART$'s obj# 271
found INDPART$'s dataobj#:271,ts#:0,file#:1,block#:2161,tab#:0
found TABSUBPART$'s obj# 278
found TABSUBPART$'s dataobj#:278,ts#:0,file#:1,block#:2217,tab#:0
found INDSUBPART$'s obj# 283
found INDSUBPART$'s dataobj#:283,ts#:0,file#:1,block#:2257,tab#:0
found IND$'s obj# 19
found IND$'s dataobj#:2,ts#:0,file#:1,block#:25,tab#:3
found LOB$'s obj# 151
found LOB$'s dataobj#:2,ts#:0,file#:1,block#:25,tab#:6
found LOBFRAG$'s obj# 299
found LOBFRAG$'s dataobj#:299,ts#:0,file#:1,block#:2393,tab#:0
ODU> desc scott.test
Object ID:54518
Storage(Obj#=54518 DataObj#=54519 TS#=4 File#=4 Block#=35 Cluster=0)
NO. SEG INT Column Name Null? Type
--- --- --- ------------------------------ --------- ---------------------------
---
1 1 1 OWNER NOT NULL VARCHAR2(30)
2 2 2 OBJECT_NAME NOT NULL VARCHAR2(30)
3 3 3 SUBOBJECT_NAME VARCHAR2(30)
4 4 4 OBJECT_ID NOT NULL NUMBER
5 5 5 DATA_OBJECT_ID NUMBER
6 6 6 OBJECT_TYPE VARCHAR2(19)
7 7 7 CREATED NOT NULL DATE
8 8 8 LAST_DDL_TIME NOT NULL DATE
9 9 9 TIMESTAMP VARCHAR2(19)
10 10 10 STATUS VARCHAR2(7)
11 11 11 TEMPORARY VARCHAR2(1)
12 12 12 GENERATED VARCHAR2(1)
13 13 13 SECONDARY VARCHAR2(1)
ODU>
ODU> scan extent tablespace 4
scan extent start: 2011-02-26 17:42:07
scanning extent...
scanning extent finished.
scan extent completed: 2011-02-26 17:42:09
ODU> dump datafile 4 block 35
Block Header:
block type=0x23 (ASSM segment header block)
block format=0xa2 (oracle 10)
block rdba=0x01000023 (file#=4, block#=35)
scn=0x0000.005d5bff, seq=1, tail=0x5bff2301
block checksum value=0x6878=26744, flag=4
Data Segment Header:
Extent Control Header
-------------------------------------------------------------
Extent Header:: extents: 51 blocks: 4608
last map: 0x00000000 #maps: 0 offset: 2716
Highwater:: 0x01000024 (rfile#=4,block#=36)
ext#: 0 blk#: 3 ext size:8
#blocks in seg. hdr's freelists: 0
#blocks below: 0
mapblk: 0x00000000 offset: 0
--------------------------------------------------------
Low HighWater Mark :
Highwater:: 0x01000024 ext#: 0 blk#: 3 ext size: 8
#blocks in seg. hdr's freelists: 0
#blocks below: 0
mapblk 0x00000000 offset: 0
Level 1 BMB for High HWM block: 0x01000021
Level 1 BMB for Low HWM block: 0x01000021
--------------------------------------------------------
Segment Type: 1 nl2: 1 blksz: 8192 fbsz: 0
L2 Array start offset: 0x00001434
First Level 3 BMB: 0x00000000
L2 Hint for inserts: 0x01000022
Last Level 1 BMB: 0x01000021
Last Level 1I BMB: 0x01000022
Last Level 1II BMB: 0x00000000
Map Header:: next 0x00000000 #extents: 51 obj#: 54520 flag: 0x2100000
00
Extent Map
-------------------------------------------------------------
0x01000021 length: 8
0x01000199 length: 8
0x010001a1 length: 8
0x010001a9 length: 8
0x010001b1 length: 8
0x010001b9 length: 8
0x010001c1 length: 8
0x010001d9 length: 8
0x010001e9 length: 8
0x01000201 length: 8
0x01000209 length: 8
0x01000211 length: 8
0x01000219 length: 8
0x01000221 length: 8
0x01000229 length: 8
0x01000231 length: 8
0x01000289 length: 128
0x01000309 length: 128
0x01000389 length: 128
0x01000409 length: 128
0x01000489 length: 128
0x01000509 length: 128
0x01000589 length: 128
0x01000609 length: 128
0x01000689 length: 128
0x01000709 length: 128
0x01000789 length: 128
0x01000809 length: 128
0x01000889 length: 128
0x01000909 length: 128
0x01000989 length: 128
0x01000a09 length: 128
0x01000a89 length: 128
0x01000b09 length: 128
0x01000b89 length: 128
0x01000c09 length: 128
0x01000c89 length: 128
0x01000d09 length: 128
0x01000d89 length: 128
0x01000e09 length: 128
0x01000e89 length: 128
0x01000f09 length: 128
0x01000f89 length: 128
0x01001009 length: 128
0x01001089 length: 128
0x01001109 length: 128
0x01001189 length: 128
0x01001209 length: 128
0x01001289 length: 128
0x01001309 length: 128
0x01001389 length: 128
Auxillary Map
-------------------------------------------------------------
Extent 0 : L1 dba: 0x01000021 Data dba: 0x01000024
Extent 1 : L1 dba: 0x01000021 Data dba: 0x01000199
Extent 2 : L1 dba: 0x010001a1 Data dba: 0x010001a2
Extent 3 : L1 dba: 0x010001a1 Data dba: 0x010001a9
Extent 4 : L1 dba: 0x010001b1 Data dba: 0x010001b2
Extent 5 : L1 dba: 0x010001b1 Data dba: 0x010001b9
Extent 6 : L1 dba: 0x010001c1 Data dba: 0x010001c2
Extent 7 : L1 dba: 0x010001c1 Data dba: 0x010001d9
Extent 8 : L1 dba: 0x010001e9 Data dba: 0x010001ea
Extent 9 : L1 dba: 0x010001e9 Data dba: 0x01000201
Extent 10 : L1 dba: 0x01000209 Data dba: 0x0100020a
Extent 11 : L1 dba: 0x01000209 Data dba: 0x01000211
Extent 12 : L1 dba: 0x01000219 Data dba: 0x0100021a
Extent 13 : L1 dba: 0x01000219 Data dba: 0x01000221
Extent 14 : L1 dba: 0x01000229 Data dba: 0x0100022a
Extent 15 : L1 dba: 0x01000229 Data dba: 0x01000231
Extent 16 : L1 dba: 0x01000289 Data dba: 0x0100028b
Extent 17 : L1 dba: 0x01000309 Data dba: 0x0100030b
Extent 18 : L1 dba: 0x01000389 Data dba: 0x0100038b
Extent 19 : L1 dba: 0x01000409 Data dba: 0x0100040b
Extent 20 : L1 dba: 0x01000489 Data dba: 0x0100048b
Extent 21 : L1 dba: 0x01000509 Data dba: 0x0100050b
Extent 22 : L1 dba: 0x01000589 Data dba: 0x0100058b
Extent 23 : L1 dba: 0x01000609 Data dba: 0x0100060b
Extent 24 : L1 dba: 0x01000689 Data dba: 0x0100068b
Extent 25 : L1 dba: 0x01000709 Data dba: 0x0100070b
Extent 26 : L1 dba: 0x01000789 Data dba: 0x0100078b
Extent 27 : L1 dba: 0x01000809 Data dba: 0x0100080b
Extent 28 : L1 dba: 0x01000889 Data dba: 0x0100088b
Extent 29 : L1 dba: 0x01000909 Data dba: 0x0100090b
Extent 30 : L1 dba: 0x01000989 Data dba: 0x0100098b
Extent 31 : L1 dba: 0x01000a09 Data dba: 0x01000a0b
Extent 32 : L1 dba: 0x01000a89 Data dba: 0x01000a8b
Extent 33 : L1 dba: 0x01000b09 Data dba: 0x01000b0b
Extent 34 : L1 dba: 0x01000b89 Data dba: 0x01000b8b
Extent 35 : L1 dba: 0x01000c09 Data dba: 0x01000c0b
Extent 36 : L1 dba: 0x01000c89 Data dba: 0x01000c8b
Extent 37 : L1 dba: 0x01000d09 Data dba: 0x01000d0b
Extent 38 : L1 dba: 0x01000d89 Data dba: 0x01000d8b
Extent 39 : L1 dba: 0x01000e09 Data dba: 0x01000e0b
Extent 40 : L1 dba: 0x01000e89 Data dba: 0x01000e8b
Extent 41 : L1 dba: 0x01000f09 Data dba: 0x01000f0b
Extent 42 : L1 dba: 0x01000f89 Data dba: 0x01000f8b
Extent 43 : L1 dba: 0x01001009 Data dba: 0x0100100b
Extent 44 : L1 dba: 0x01001089 Data dba: 0x0100108b
Extent 45 : L1 dba: 0x01001109 Data dba: 0x0100110b
Extent 46 : L1 dba: 0x01001189 Data dba: 0x0100118b
Extent 47 : L1 dba: 0x01001209 Data dba: 0x0100120b
Extent 48 : L1 dba: 0x01001289 Data dba: 0x0100128b
Extent 49 : L1 dba: 0x01001309 Data dba: 0x0100130b
Extent 50 : L1 dba: 0x01001389 Data dba: 0x0100138b
-------------------------------------------------------------
Second Level Bitmap block DBAs
-------------------------------------------------------------
DBA 1: 0x01000022
ODU> dump datafile 4 block 36 header
Block Header:
block type=0x06 (table/index/cluster segment data block)
block format=0xa2 (oracle 10)
block rdba=0x01000024 (file#=4, block#=36)
scn=0x0000.005d5755, seq=1, tail=0x57550601
block checksum value=0xcd0a=52490, flag=6
Data Block Header Dump:
Object id on Block? Y
seg/obj: 0xd4f7=54519 csc: 0x00.5d5719 itc: 2 flg: E typ: 1 (data)
brn: 0 bdba: 0x1000021 ver: 0x01
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0003.00e.000007c9 0x00800c42.02d1.13 --U- 79 fsc 0x0000.005d5755
0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000
Data Block Dump:
================
flag=0x0 --------
ntab=1
nrow=79
frre=-1
fsbo=0xb0
ffeo=0x3f5
avsp=0x345
tosp=0x345
ODU> unload table scott.test object 54519
Unloading table: TEST,object ID: 54518
Unloading segment,storage(Obj#=54518 DataObj#=54519 TS#=4 File#=4 Block#=35 Clus
ter=0)
325608 rows unloaded ####数据已经找回!
ODU>exit
-----------------------------------------------
E:\oracle资料\ODU\odu_305_win32\odu\data>sqlldr scott/tiger control=scott_test.ctl
SQL*Loader: Release 10.2.0.1.0 - Production on 星期六
Copyright (c) 1982, 2005, Oracle. All rights reserve
达到提交点 - 逻辑记录计数 7025
达到提交点 - 逻辑记录计数 14050
达到提交点 - 逻辑记录计数 21075
达到提交点 - 逻辑记录计数 28100
达到提交点 - 逻辑记录计数 35125
达到提交点 - 逻辑记录计数 42150
达到提交点 - 逻辑记录计数 49175
达到提交点 - 逻辑记录计数 56200
达到提交点 - 逻辑记录计数 63225
达到提交点 - 逻辑记录计数 69202
达到提交点 - 逻辑记录计数 76227
达到提交点 - 逻辑记录计数 83252
达到提交点 - 逻辑记录计数 90277
达到提交点 - 逻辑记录计数 97302
达到提交点 - 逻辑记录计数 104327
达到提交点 - 逻辑记录计数 111352
达到提交点 - 逻辑记录计数 118377
达到提交点 - 逻辑记录计数 125402
达到提交点 - 逻辑记录计数 132427
达到提交点 - 逻辑记录计数 138594
达到提交点 - 逻辑记录计数 145619
达到提交点 - 逻辑记录计数 152644
达到提交点 - 逻辑记录计数 159669
达到提交点 - 逻辑记录计数 166694
达到提交点 - 逻辑记录计数 173719
达到提交点 - 逻辑记录计数 180744
达到提交点 - 逻辑记录计数 187769
达到提交点 - 逻辑记录计数 194794
达到提交点 - 逻辑记录计数 201819
达到提交点 - 逻辑记录计数 207916
达到提交点 - 逻辑记录计数 214941
达到提交点 - 逻辑记录计数 221966
达到提交点 - 逻辑记录计数 228991
达到提交点 - 逻辑记录计数 236016
达到提交点 - 逻辑记录计数 243041
达到提交点 - 逻辑记录计数 250066
达到提交点 - 逻辑记录计数 257091
达到提交点 - 逻辑记录计数 264116
达到提交点 - 逻辑记录计数 271141
达到提交点 - 逻辑记录计数 276730
达到提交点 - 逻辑记录计数 283755
达到提交点 - 逻辑记录计数 290780
达到提交点 - 逻辑记录计数 297805
达到提交点 - 逻辑记录计数 304830
达到提交点 - 逻辑记录计数 311855
达到提交点 - 逻辑记录计数 318880
达到提交点 - 逻辑记录计数 325608
E:\oracle资料\ODU\odu_305_win32\odu\data>sqlplus /nolog
SQL> conn scott/tiger
已连接。
SQL> select count(*) from test;
COUNT(*)
----------
325608
至此,325608条数据已经成功恢复!