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

编程知识 更新时间:2023-05-02 22:12:23

本次测试采用老的免费的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'

更多推荐

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

本文发布于:2023-04-29 01:11:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/afde6eade656697c00130d52b6515b65.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:几种   数据恢复   非常规   场景   truncate

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 109695文章数
  • 27894阅读数
  • 0评论数