情况是这样的,我在PL/SQL里用的update  语句,更新一个字段的数据,没有加条件,执行完后按F10提交了,结果已经写入数据库,后来发现更新错了,现在想改回为update以前的,相当于rollback,不知有没有办法做到?有知道的帮忙解决下,谢谢了.

解决方案 »

  1.   


    10g 以上的可以使用flashback对表进行闪回如果不是10g的话,只能用不完全恢复了。
      

  2.   

    flashback,支持使用这个来恢复,但限制要10g以上
      

  3.   

    人家是update, 9i是可以闪回去的,只不过看你是什么时候发生的这事儿了.如果flashback已经闪不到了,那么就logmnr吧.
      

  4.   


    确实,9i也支持 update的闪回
      

  5.   

    能再教下flashback怎么用吗?
    我是这样用的:
    flashback table 表名 to timestamp
    to_timestamp('2009-07-23 13:58:00', 'YYYY-MM-DD HH24:MI:SS');
    提示因为未启用行移动功能,不能闪回表.
    用的是10G数据库.
      

  6.   

    大家都说用闪回,那我就来个别的。
    不怕麻烦就用时间函数试试select * from tab_name as of timestamp to_timestamp('20090724120000','yyyymmddHH24miss')这个可以查询出tab_name这个表在2009-07-24 12点之前的数据。
      

  7.   

    9i只是支持闪回查询,也就是说可以看到最后一次commit之前的数据(但要保证undo表空间中的数据没有被覆盖)。10G是支持闪回的,也是靠UNDO中的数据支撑的。在10G中,做闪回之前,要开启表的移动功能:alter table enable row movement;
      

  8.   

    9I是用了UNDO,10G开始用一个闪回的文件区,大小可以设置
      

  9.   


    对于flashback,9i和10g都是用的undo中的数据。
    但对于flashback database,在10g中才用到闪回区(flashback_area)中的闪回文件。
    在默认情况下,闪回区中保存的是:归档日志文件,如果开启了数据库的闪回功能,则还会将数据库的闪回日志文件保存在这个目录中,
    当然,在闪回区中,还可以保存数据文件,控制文件,日志文件,rman的相关文件。闪回区本身与flashback table功能无关。
    flashback table用到的是Undo表空间中的数据(9i,10g)
      

  10.   

    为什么不用RMAN???RMAN我记得可以rollback到任何一个时间点, 
    只要你记得commit的时间(越准确越好), 就搞定.