使用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
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/