真实试验oracle data unloader进行数据恢复。

oracle的数据恢复方式有很多,但是都比较麻烦,幸好有老熊的ODU的工具,目前这个工具已经不在提供免费的版本,而且听说授权还比较贵,对好的东西的市场化我本人是支持的,但是希望有其他途径可以继续帮助那些像我一样的贫穷的人,毕竟说服老板话费几万银子去买个只能给你用的软件,是很难成功的。幸好还有很多无私的人提供其他的版本,目前可以找到的最新的无限制的版本就是windows下的odu_309,现在网上还有很多下载,itpub上就有,如果大家找不到在联系我。

下面是以一个真实的例子来演示从环境--删除--恢复的全过程,也许很多老手都已经熟悉了,这里只是给自己和新人一个了解的机会,了解我们中国人自己的牛人编写的软件有多牛叉。

一、测试环境搭建
    1.建立测试表空间MYTBS
    create tablespace MYTBS datafile '/opt/oracle/oradata/orcl/mytbs01.dbf' size 10M;

    2.建立测试用户:
    create user james identified james_12345 default tablespace MYTBS;

    3.建立测试表:
    conn james/james_12345
    create table temp(id int,name varchar2(10));
    commit;

    4.建立测试数据:
    begin
      for i in 1..10000
         loop
         insert into temp values(i,'testvalue');
         end loop;
         commit;
    end;

二、模拟truncate 操作:
    1.truncate table temp;
      commit;
    2.触发checkpoint让数据写入数据文件
      alter system checkpoint;

三、准备工作
    1.脱机表空间,防止数据库块被复用
      alter tablespace MYTBS offline;
    2.安装odu,目前只有windows版本没有限制,许可很贵,建议把数据文件拉到 windows下处理
    3. 这一步很重要,需要把删除表所在的表空间MYTBS和 system表空间文件用ssh下载到本地处理

四、恢复操作
    1.修改ODU的control文件
      打开control.txt修改表头为#ts #fno   #rfno     filename只需要这四列就可以
    2.从oracle获取控制信息
      sql>select ts#,file#,rfile#,name from v$datafile;
      这里只需要MYTBS和SYStem表空间信息即可,如。
      0 1 1 /opt/oracle/oradata/orcl/system01.dbf
      6 5 5 /opt/oracle/oradata/orcl/mytbs01.dbf
    3.运行odu.exe
      只要不报错就ok。
    4.unload数据字典
      odu>unload dict
    5.获取temp表逻辑结构,注意大写
      odu>desc james.TEMP
      可以看到类似如下的信息
      Storage(OBj#42252 DataObj#=42255 TS#=6 File#=20 Block#=11 Clister=0)
      这里可以得到表空间号为6
    6.扫描表空间的extend
      ODU>scan extent tablespace 6
    7.恢复数据
      ODU>unload table james.TEMP object auto
     
      至此就可以在data文件夹下看到3个文件,一个是txt数据文件,里面存储的temp表的数据。另外两个是sql*loader使用的文件

,一个是控制文件,一个是建表脚本文件,可以用sql*loader恢复数据导入。
    8.设置表空间联机进行数据导入
      sql>alter tablespace MYTBS online; 

五、模拟恢复删除错误
    
  1.模拟删除
        
insert into temp values(0,'testvalue'); 
         insert into temp values(1,'testvalue');
         insert into temp values(2,'testvalue');
         insert into temp values(3,'testvalue');
         insert into temp values(4,'testvalue');
         delete from temp where id=4;
         commit;
         alter system checkpoint;
         alter tablespace MYTBS offline;
      2.同上的操作,把system和MYTBS表空间的数据文件下载下来
      3.这一步很重要,修改ODU的config.txt增加
         unload_deleted  yes
         如果不增加是无法恢复删除数据的。
      4.ODU下操作:

         unload dict
         desc james.TEMP
         scan extent tablespace 6
         因为temp表还存在直接恢复表数据
         unload table james.TEMP

        这样就可以看到在data下恢复了5条数据。这里有个疑问,加入有个表100万数据,恢复就直接把数据全恢复回来?
        不过好在数据全在,导入测试机器上把数据拿出来就好,毕竟数据在,工作在。

 

  • 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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值