基于ODU恢复truncate表的总结操作

一、ODU功能的描述:
        ODU全称为Oracle Database Unloader,是类似于Oracle的DUL的软件,用于直接从Oracle数据库的数据文件中获取表数据。在各种原因造成的数据库不能打开时,用于抢救数据,最大限度地减少数据丢失。
       ODU所拥有的功能特点:
        1)支持的Oracle数据库版本包括8i,9i,10g,11g;
        2)自动检测数据文件的表空间号和文件号;
        3)在有SYSTEM表空间的情况下,自动获取数据字典信息;
        4)支持各种表,普通的HEAP表,IOT表,聚簇(CLUSTER)表;
        5)支持10g及以上的大文件(BigFile)表空间;
        6)列出表的分区和子分区;
        7)支持表被truncate、drop后的数据恢复;
  8)支持压缩表;
        9)支持在没有SYSTEM表空间和数据字典损坏的情况下恢复数据,在没有数据字典可用时,ODU能够自动判断数据的类型;
       10)支持IOT表、普通IOT表、压缩IOT表导出;
  11)支持IOT表溢出段;
        12)支持IOT表分区(包括子分区);
        13)只能在有SYSTEM表空间时才能导出IOT表;
        14)支持多种平台的数据库;
        15)模拟oracle的dump块功能,能够dump数据文件块的数据;
        16)支持复制操作系统命令不能复制的坏文件;
        17)支持多种字符集之间的转换;
二、基于Truncate表后恢复实践操作
1、首先将相关信息配置到ODU中的control.txt文件中,其中control.txt文件是ODU的数据文件信息文件。你可以理解为类似于Oracle数据库的控制文件,存放了ODU导出数据时需要的Oracle数据文件信息,其默认格式:表空间号 文件号 相对文件号 文件名 块大小
select t1.TS#,
       t2.FILE_ID,
       t2.RELATIVE_FNO,
       t2.FILE_NAME,
       t2.blocks
  from v$tablespace   t1,
       dba_data_files t2
 where t1.NAME = t2.TABLESPACE_NAME
 order by t1.TS#;
2、在数据库中创建两个测试表t1,t2
SQL> connect easypub/easypub;
SQL> create table t1 as select * from user_objects;
SQL> create table t2 as select * from t1;
之后清空t1表的数据
SQL> truncate table t1;
3、我们OFFLINE掉T1表的表空间、或者关闭数据库、或者关闭所有的应用,目的只有一个,确保空间不会被重用,数据不会被覆盖,然后做个checkpoint,让ODU能够读到最新的数据字典数据。
SQL>select tablespace_name from user_tables where table_name=’T1′;
  TABLESPACE_NAME
  ------------------------------
  TBS_CORE
SQL> alter tablespace tbs_core offline;
 Tablespace altered
 SQL> alter system checkpoint;
 System altered
4、运行ODU,并在提示符下输入命令unload dict,将从SYSTEM表空间中导出数据字典,并存储在后缀名为.odu文件中。
5、获取easypub用户下的T1表,也就是我们要恢复的表的信息:
ODU> desc easypub.t1
6、从上面的输出中,我们可以看到,easypub.t1表所在的表空间号为7,数据段头部为6号文件的7611号块。
7、接下来用ODU扫描表空间的extent:
ODU> scan extent tablespace 7
8、我们使用ODU来确定T1表原来的data object id。一般来说,数据段的数据块,一般是在段头后面相邻的块中。但是我们可以从段头来确认
ODU> dump datafile 6 block 7611
9、从上面的输出中的“Extent 0 : L1 dba:0x01801db9 Date dba:ox01801dbc
段的数据块也就是6号文件的7611
我们dump第6号文件的7611块头,来得到表T1原来的data object id:
ODU> dump datafile 6 block 7611 header;
可以看到,T1表原来的data object id就是60156。
10、使用ODU来unload数据:
ODU> unload table easypub.t1 object 60156;
 
ODU会自动将恢复的数据添加到data文件中
11、将TBS_CORE表空间ONLINE:
SQL> alter tablespace tbs_core online;
 Tablespace altered
12、使用sqlldr导入我们恢复的数据即可
13、最后检验恢复的数据是否完全恢复
SQL> select * from t2 minus select * from t1;
未选定行
SQL> select * from t1 minus select * from t2;
未选定行
可以看到数据已经完全恢复
 
 
 
 

fj.png显示结果1.jpg

fj.png显示desc结果2.jpg

fj.png显示scan结果.jpg

fj.png显示dump datafile结果.jpg

fj.png显示dump datafile head结果.jpg

fj.png显示unload table 结果.jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26423870/viewspace-759549/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26423870/viewspace-759549/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值