环境 AIX6.1 + oracle10G问题:开发人员不小心,truncate一个关键表,虽不是生产环境,但在开发环境也至关重要。想恢复。现状:
1、表对应的原数据块已被占用,用AUL等工具无法恢复
2、没有逻辑备份
3、运行在归档模式下,有归档日志。
4、想解析log,然后执行sql,没有找到理想的工具尝试了多种方法,因为没有备份文件,都只能恢复到最后的数据一致性的点。看看各位有何高见

解决方案 »

  1.   

    http://blog.csdn.net/zftang/archive/2011/02/05/6172749.aspx使用ODU恢复oracle被truncate的表数据
      

  2.   

    参考:

    用Oracle归档日志进行恢复方法
      

  3.   


    to zftang ODU的原理和AUL类似,都是直接解析数据文件,前提是数据块不能被覆盖。还有,对应链接无法下载
      

  4.   


    to BOBO12082119 这个帖子被转载N多次,又有几人实践过。我的结果是恢复到最后的数据一致性的点,而不能恢复到指定SCN号
      

  5.   

    不完全恢复怎么样?
    recover database until time ...
      

  6.   

    参考:
    http://topic.csdn.net/u/20090209/08/8270a827-7f90-4748-a2f7-a16d63762432.html
      

  7.   

    3、运行在归档模式下,有归档日志。
    4、想解析log,然后执行sql,没有找到理想的工具
    有归档就好说了,用LOGMNR还原SQL操作脚本,再次执行就好了
    要是有全备份就更好了
      

  8.   

    刚在10g上做了些试验,没有什么恢复成功 等高人帮帮首先想到的是flashback 
    但是对于DDL来说 闪回查询会提示
    SQL> select * from scott.aspen as of timestamp to_date('20110623 10:35:00','yyyy
    mmdd hh24:mi:ss');
    select * from scott.aspen as of timestamp to_date('20110623 10:35:00','yyyymmdd
    hh24:mi:ss')
                        *
    第 1 行出现错误:
    ORA-01466: 无法读取数据 - 表定义已更改
    在网上查到说是开了闪回数据库可以flashback database (我没有测试)11:20:00 SQL> show parameter flashback;NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    db_flashback_retention_target        integer     144011:20:12 SQL> select dbid,name,flashback_on from v$database;      DBID NAME      FLASHBACK_ON
    ---------- --------- ------------------
    2507829495 ORADB     NO
    第二个想到的是用Logmnr
    但是得到的结果很让我失望啊
    开启了补充日志
    11:40:36 SQL> select supplemental_log_data_min from v$database;SUPPLEME
    --------
    YES得到的结果只有sql_redo,没有sql_undo
    此办法也行不通继续关注中~ 楼主想到好办法通知下我哦  谢谢!
      

  9.   

    没有办法flashback,所以只可以进行不一致性的恢复。
      

  10.   


    具体方式呢?我做恢复的时候,只能恢复到最后的数据一致性的点。用recover database until time 提示成功,但却没有恢复回来想要的数据
      

  11.   

    这个比较麻烦
    flashback query应该是不行的
    要通过flashback database to scn/timestamp
    当然,前提是flashback on
      

  12.   


    把该表的有关语句全部抽取出来,例如LOGMNR ,然后重新执行
      

  13.   

    truncate又不是delete,REDO里是不记录日志的,那些说logmnr的,啥理由?
    开发环境不开闪回又无备份...  如果你用ODU确实恢复不了的话,估计是没戏了
      

  14.   

    擦,楼上那些说什么归档模式就可以恢复,我按你们提供的方法去测试,根本就恢复不了,
    不知道你们测试过没有!当truncate后,使用flashback恢复到具体的scn点,都提示结构已发生变化..