非常规数据恢复的几种场景(利用ODU恢复被truncate的表)

本次测试采用老的免费的ODU版本,网络上可以找到该免费版本。新版本支持更多的特性,为了生活老熊大师是要收费的

【引用】ODU全称为Oracle Database Unloader,是由OracleODU开发的类似于Oracle的DUL(Oracle内部著名的数据库恢复工具)的一款恢复软件,用于直接从Oracle数据库的数据文件中获取表数据。在各种原因造成的数据库不能打开时,用于抢救数据,最大限度地减少数据丢失。在没有备份或有效备份,或者常规恢复失效的情况下,可作为最后的恢复手段。


【测试】

truncate table b.T;

下载解压odu,如odu_309_win32.tar


SQL> select tablespace_name from user_tables where table_name='T';
TABLESPACE_NAME
--------------------
TBS_BLOCK


SQL> alter tablespace TBS_BLOCK offline;
SQL> alter system checkpoint;


修改ODU控制文件control.txt
SQL> select ts#,file#,rfile#,name,block1_offset From v$datafile; 将输出结果写入到control.txt中,如下
#ts #fno   #rfno     filename                                          block_size
0 1  1 F:\ORACLE\ORADATA\TEST\SYSTEM01.DBF                            8192
1 3  3 F:\ORACLE\ORADATA\TEST\SYSAUX01.DBF                            8192
2 5  5 F:\ORACLE\ORADATA\TEST\UNDOTBS01.DBF                           8192
3 6  6 F:\ORACLE\ORADATA\TEST\USERS01.DBF                             8192
5 7 10 F:\ORACLE\ORADATA\TEST\EXAMPLE01.DBF                           8192
7 8  8 F:\ORACLE\PRODUCT\12.1.0\DBHOME_1\ORADATA\CCDATA.DBF           8192
8 9  9 F:\ORACLE\ORADATA\TEST\TBS_BLOCK.DBF                           8192
注:另外一个配置文件是config.txt里面可以定义字符集、sqlldr分割符等。


运行ODU
ODU> open
ODU> unload dict
ODU> desc b.T
Object ID:99235
Storage(Obj#=99235 DataObj#=99239 TS#=8 File#=9 Block#=10 Cluster=0)


ODU> scan extent tablespace 8
ODU> unload table b.T
Unloading table: T,object ID:99235
Unloading segment,storage(Obj#=99235 DataObj#=99239 TS#=8 File#=9 Block#=10 Cluster=0)
0 rows unloaded


找出objectid后进行恢复
ODU> unload table b.T object 99235
Unloading table: T,object ID:99235
Unloading segment,storage(Obj#=99235 DataObj#=99239 TS#=8 File#=9 Block#=10 Cluster=0)
5841 rows unloaded
注:从3.0.7版本开始,对truncate table的支持更方便。可能不用人工去找到原来的data object id,而支持使用:unload table username.tablename object auto




看到数据已经被unloaded出来了,同时在ODU的data目录下会生成sqlloader脚本,直接调用sqlldr就可以恢复被truncate的数据了。保险起见,在另一个用户下进行恢复,确认数据无误后再导入到原来的用户及对应表空间(开始时被offline的TBL_BLOCK)中
1、执行生成的ODU_0000099235.sql 脚本,创建表;
2、sqlldr z/z control='F:\oracle\odu_309_win32\odu\data\ODU_0000099241.ctl'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值