非常规数据恢复的几种场景(利用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'
ODU全称为Oracle Database Unloader,是类似于Oracle的DUL的软件,用于直接从Oracle数据库的数据文件中获取数据。在各种原因造成的数据库不能打开时,用于抢救数据,最大限度地减少数据丢失。 ODU有什么功能特点? 支持的Oracle数据库版本包括8i,9i,10g,11g 自动检测数据文件的空间号和文件号 在有SYSTEM空间的情况下,自动获取数据字典信息。 支持各种,普通的HEAP,IOT,聚簇(CLUSTER)。 DESC,以显示的列定义 支持10g及以上的大文件(BigFile)空间 列出的分区和子分区 支持truncate后的数据恢复 支持被drop后的数据恢复 支持压缩 支持在没有SYSTEM空间和数据字典损坏的情况下恢复数据,在没有数据字典可用时,ODU能够自动判断数据的类型 支持IOT导出: 普通IOT的导出 压缩IOT的导出 支持IOT溢出段 支持IOT分区(包括子分区) 只能在有SYSTEM空间时才能导出IOT 支持多种平台的数据库,包括AIX、LINUX、HPUX、SOLARIS、WINDOWS等。能够在一个平台上导出其他平台的数据,比如在Windows 32位系统上,使用AIX系统上的数据文件导出数据。 支持的数据类型包括:NUMBER, CHAR, VARCHAR2, NCHAR,NVARHCAR2, LONG, DATE, RAW, LONG RAW, BLOB, CLOB, TIMESTAMP (9i+) , BINARY FLOAT, BINARY DOUBLE (10g+) 导出的数据格式包括纯文本和DMP文件两种。以纯文本导出时,能够自动生成建的SQL和SQLLDR导入所需的CONTROL文件(.CTL) 支持同一个库中不同的块大小的数据文件。 全面支持LOB字段: 支持CLOB、NCLOB和BLOB CLOB支持Big Endian和Little Endian字节序 支持LOB分区,子分区 支持同一个中,不同LOB列使用不同CHUNCK SIZE的情况 CLOB数据可以导出到与其他列相同的文件中,或存储到单独的文件中 LOB列只有在SYSTEM空间存在的情况下才能导出 支持多种字符集之间的转换,能够正确的转换CLOB、NCLOB、NVARCHAR2列类型的数据到指定的字符集。 ODU全面支持64位系统,支持超过4G大小的数据文件。 支持复制操作系统命令不能复制的坏文件 模拟oracle的dump块功能,能够dump数据文件块的数据 目前不支持的功能: 11g的SecureFiles ------------------------ 详细使用说明见 http://www.laoxiong.net/odu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值