使用ODU恢复oracle被truncate的表数据

使用ODU恢复oracle被truncate的表数据


1。ODU 介绍

      ODU全称为Oracle Database Unloader,是类似于Oracle的DUL的软件,用于直接从Oracle数据库的数据文件中获取表数据。在各种原因造成的数据库不能打开时,用于抢救数据,最大限度地减少数据丢失。


      支持的Oracle数据库版本包括8i,9i,10g,11g,12c


      今天是在ORACLE11G下测试完成了通过ODU对TRUNCATE的表数据如何进行恢复;


2。ODU 版本及下载


http://www.oracleodu.com/cn/


Windows版本:odu_309_win32.zip (770KB)
Linux版本:odu_308_linux_x86.tar.gz (1064KB)
Solaris版本:odu_306_sol_x86.tar.gz (766KB)
AIX版本:odu_308_aix53.tar.gz (1344KB)
HP PA-RISC2.0版本:odu_308_hppa.tar.gz (926KB)
HP IA64版本:odu_308_hp_ia64.tar.gz (896KB)
3。使用及配置
 config.txt文件是ODU的配置文件,我们不需要理会;


control.txt文件是ODU的数据文件信息文件。你可以理解为类似于Oracle数据库的控制文件,存放了ODU导出数据时需要的Oracle数据文件信息。这个文件需要我们自己配置(手工把数据文件块等信息加入这个配置文件,以便ODU进行读取)


control.txt文件中的数据格式为:


表空间号 文件号 相对文件号 文件名 块大小


通过V$DATAFILE 找到相应的信息,加入配置文件,只需要前4列就好了。

#ts    #fno     #rfno   filename
0   1     1       /u01/app/oracle/oradata/PROD1/system01.dbf
7   6     6       /u01/app/oracle/oradata/PROD1/TS_TEST 


查询信息,添加到control文件中
select tablespace_name from dba_tables where table_name='TEST';


SYS@PROD1> select ts#,name from v$tablespace;


       TS# NAME
---------- ------------------------------
         0 SYSTEM
         1 SYSAUX
         2 UNDOTBS1
         4 USERS
         3 TEMP
         6 EXAMPLE
         7 TS_TEST


7 rows selected.


 select file#,ts#, RFILE#,NAME from v$datafile where ts#=7;

[oracle@enmoedu1 odu]$ vi control.txt
#ts fno   rfno     filename                                          block_size  is_big_file header_offset blocks 
0   1     1       /u01/app/oracle/oradata/PROD1/system01.dbf
7   6     6       /u01/app/oracle/oradata/PROD1/TS_TEST 


4。恢复方法
  
 对于ODU来说,  4.1.3版本及以后,恢复方法比较简单,具体操作如下:下面以TEST表进行测试:
检查TEST表数据,

然后对于表进行TRUNCATE 操作,truncate table test.此时数据已经被清空,我们需要进行恢复/

4.1):把TEST表所在的表空间进行OFFLINE操作:alter tablespace TS_TEST offline;

4.2):启动ODU,启动界面如图所示,进行读取配置:


4.3):输入:unload dict;进行扫描,结果如下图:
ODU> unload dict
CLUSTER C_USER# file_no: 1 block_no: 208
TABLE OBJ$ file_no: 1 block_no: 240
CLUSTER C_OBJ# file_no: 1 block_no: 144
CLUSTER C_OBJ# file_no: 1 block_no: 144
found IND$'s obj# 19
found IND$'s dataobj#:2,ts#:0,file#:1,block#:144,tab#:3
found TABPART$'s obj# 568
found TABPART$'s dataobj#:568,ts#:0,file#:1,block#:3872,tab#:0
found INDPART$'s obj# 573
found INDPART$'s dataobj#:573,ts#:0,file#:1,block#:3912,tab#:0
found TABSUBPART$'s obj# 580
found TABSUBPART$'s dataobj#:580,ts#:0,file#:1,block#:3976,tab#:0
found INDSUBPART$'s obj# 585
found INDSUBPART$'s dataobj#:585,ts#:0,file#:1,block#:4016,tab#:0
found IND$'s obj# 19
found IND$'s dataobj#:2,ts#:0,file#:1,block#:144,tab#:3
found LOB$'s obj# 80
found LOB$'s dataobj#:2,ts#:0,file#:1,block#:144,tab#:6
found LOBFRAG$'s obj# 601
found LOBFRAG$'s dataobj#:601,ts#:0,file#:1,block#:4144,tab#:0




4.4):scan extent ,根据数据文件块多少等,时间稍微有点长,结果如下
ODU> scan extent


scan extent start: 2015-10-23 10:26:22
scanning extent...
scanning extent finished.
scan extent completed: 2015-10-23 10:26:32
  
4.5):通过自动恢复,进行恢复表数据:unload table username.tablename object auto


    
ODU> unload table linfy.test object 80907


Unloading table: TEST,object ID: 80907
Unloading segment,storage(Obj#=80907 DataObj#=80907 TS#=7 File#=6 Block#=68738 Cluster=0)
1 rows unloaded
 
4.6):设置表空间ONLINE ALTER TABLESPACE TS_TEST ONLINE;


执行完此命令后,会在data目录下生成三个文件:
 
LINFY_TEST.ctl是用于sqlldr装入数据所需要的控制文件,LINFY_TEST.sql是建表SQL脚本,LINFY_TEST.txt是导出的数据。
我们可以用sql文件建表,然后使用sqlldr装入数据。
 
 sqlldr linfy/linfy control=LINFY_TEST.ctl
 

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

转载于:http://blog.itpub.net/543979/viewspace-1815830/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值