oracle odu抽数,Oracle数据恢复工具-ODU

ODU全称为Oracle Database Unloader,偶然在ITPUB看到一款数据小工具,创作者-老熊,网站地址为http://www.laoxiong.net/odu

初试了一下,工具虽小但功能挺强大的,通过直接扫描数据文件来获取误删的数据,在某些情况下合理使用能发挥很不错的效果。

将自己的其中一个测试过程发布在这里:

三、恢复truncate的表

被Truncate的表,只要原来的空间没有被重用(即数据被覆盖),则数据都是可以恢复的。

如果发现一个表被意外地Truncate,而需要马上恢复。首先要做的就是关闭数据库,或者OFFLINE那个表所在的表空间,或者关闭所有应用。目的只有一个,确保空间不会被重用,数据不会被覆盖。

1、创建测试场景

建立测试表空间、数据文件、测试用户、测试表

CREATE TABLESPACE ODU

LOGGING

DATAFILE

'E:\ORACLE\PRODUCT\10.2.0\ORADATA\JIONG\ODU.ORA' SIZE 100M

AUTOEXTEND

ON NEXT 64M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL

SEGMENT SPACE MANAGEMENT  AUTO;

CREATE USER odu identified by odu default tablespace ODU;

grant connect,dba to odu;

create table test(id number(9),name varchar2(50));

begin

for i in 1 .. 100 loop

insert into test (id, name) values (i, 'adasda');

end loop;

commit;

end;

执行truncate

truncate table test;

2、准备恢复

数据库做一个Checkpoint,让ODU能够读到最新的数据字典数据。

alter system checkpoint;

将相关数据文件拷出

SYSTEM01.DBF

SYSTEM02.DBF

ODU.ORA

将system数据文件位置配置进ODU的control.txt文件:

可以预先查询数据字典设置内容:

select d.TS#        ts,

d.FILE#      fno,

d.FILE#      fno,

d.NAME       filename,

d.BLOCK_SIZE block_size

from v$datafile d

order by ts;

修改filename的路径,将如下内容写入control.txt并保存

0 1 1 D:\odu\SYSTEM01.DBF 8192

0 13 13 D:\odu\SYSTEM02.DBF 8192

16 16 16 D:\odu\ODU.ORA 8192

3、进行恢复

点击odu.exe进入命令行界面

unload数据字典

ODU> unload dict

获取需要恢复的表的信息

ODU> desc odu.test

输出如下:

Object ID:61536

Storage(Obj#=61536 DataObj#=61537 TS#=16 File#=16 Block#=11 Cluster=0)

NO. SEG INT Column Name                    Null?     Type

--- --- --- ------------------------------ --------- -------------------

---

1   1   1 ID                                       NUMBER(9)

2   2   2 NAME                                     VARCHAR2(50)

可以看到,odu.test表所在的表空间号为16,数据段头部为16号文件的11号块。data object id为Obj#=61536

扫描表空间的extent

ODU> scan extent tablespace 16

输出如下:

scan extent start: 2011-01-20 16:11:09

scanning extent...

scanning extent finished.

scan extent completed: 2011-01-20 16:11:13

ODU> dump datafile 16 block 11  dump数据文件数据块

unload数据:

ODU> unload table odu.test object 61536

输出如下:

Unloading table: TEST,object ID: 61536

Unloading segment,storage(Obj#=61536 DataObj#=61536 TS#=16 File#=16 Block#=11 Cl

uster=0)

100 rows unloaded

执行完后,会在ODU目录的DATA文件夹中生成三个文件(默认生成SQLLDR文件时):

ODU_TEST.ctl     控制文件

ODU_TEST.txt     文本数据文件

ODU_TEST.sql    表创建的DDL语句

使用SQLLDR导入数据

D:\odu\data>sqlldr odu/odu@jiong control=ODU_TEST.ctl

至此,数据恢复完成。

新版本中支持的更好,恢复命令不需要查询object_data_id:

ODU> unload table username.tablename object auto

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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
ODU0到ODU4是光数字单元(Optical Digital Unit)的不同速率等级。ODU代表光数字单元,是用于传输光信号的标准化单位。ODU0到ODU4是ITU-T G.709标准中定义的五个速率等级。 ODU0的速率为1.25 Gbit/s,它是最低的速率等级。ODU0一般用于传输低速率的数据,如Ethernet以太网信号。它可以通过OTU1的光载波来传输。 ODU1的速率为2.5 Gbit/s,是ODU0的两倍。ODU1通常用于传输中等速率的数据,如多个ODU0信号的聚合,或者用于传输其他高速率ODUODU2、ODU3或ODU4)信号的交叉连接。它可以通过OTU2的光载波来传输。 ODU2的速率为10 Gbit/s,是ODU1的四倍。ODU2一般用于传输高速率的数据,如多个ODU1信号的聚合,或者用于传输其他高速率ODUODU3或ODU4)信号的交叉连接。它可以通过OTU2或OTU2e的光载波来传输。 ODU3的速率为40 Gbit/s,是ODU2的四倍。ODU3一般用于传输超高速率的数据,如多个ODU2信号的聚合,或者用于传输其他高速率ODUODU4)信号的交叉连接。它可以通过OTU3的光载波来传输。 ODU4的速率为100 Gbit/s,是ODU3的两倍。ODU4是最高的速率等级,一般用于传输超高速率的数据,如多个ODU3信号的聚合。它可以通过OTU4的光载波来传输。 总而言之,ODU0到ODU4是一系列不同速率的光数字单元,可用于传输不同速率的数据。随着数据传输需求的增加,可以选择合适的ODU等级来满足需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值