正常操作数据库N次后,现在 要恢复到其中的第J(j<N)次时的数据状态。
问:用事务回滚可以实现么?怎样实现?
oracle里有一种文件,重做日志文件:含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复。一个数据库至少需要两个重做日志文件,那么理论上是否可以找到当初的日志文件来进行类比可以恢复?

解决方案 »

  1.   

    Oracle 有日志记录,应该可以恢复到你想要的状态,
    还有就是Oracle有回滚段,如果回滚段足够大,里面的数据还没有被完全覆盖时,
    都可以从里面找回未被修改过的数据.
    不过这些我都没有操作过,只是知道而已.
      

  2.   

    利用回滚段?首先大数据量的操作很难不被覆盖,再说commit后再回滚就比较麻烦吧?我想更应该是结合日志文件来做的,但不知道怎样实现。但据了解这种技术已经被实现了。
    希望大家多讨论讨论给个思路:)
      

  3.   

    可以实现
    比如操作 a b c d
    每次操作都记录一个savepoint a b c d
    回滚的时候可以rollback C
    具体的语法你去查查
    很简单
      

  4.   

    我需求提的不够精准,
    正常m个人操作数据库N次后,现在要恢复到其中的某一人的第J(j<N)次时的数据状态。
    这个用rollback好像不行吧?
      

  5.   


    只能利用不完全恢复来恢复了。
    回滚段只是保存数据的前像,保证一致性读。事务完成之后的一定时间内要被wrap。
      

  6.   

    按照重做日志:
    如果按照开始日期结束日期scn,过后的数据集
    EXECUTE dbms_logmnr.start_logmnr(
    DictFileName => ' e:\oracle\logs\ v816dict.ora ', 
    StartTime => to_date('2001-9-18 00:00:00','YYYY-MM-DD HH24:MI:SS')
    EndTime => to_date(''2001-9-18 23:59:59','YYYY-MM-DD HH24:MI:SS ')); 如果我们想知道某个用户对于某张表的操作,可以通过下面的SQL查询得到,该查询可以得到用户DB_ZGXT对表SB_DJJL所作的一切工作。 SQL> SELECT sql_redo FROM v$logmnr_contents WHERE username='DB_ZGXT' AND tablename='SB_DJJL'1.按照这上面说的,似乎是可以做到对某些特定的人的操作做恢复的??2.程式是用JAVA编写,怎样将上述操作重做日志的语句用JAVA实现?
      

  7.   

    treamboy(亲月) 是对的,用logmnr分析联机重作日志,得到反向sql语句。
      

  8.   

    上述确是logminor的分析语句,它的分析语句可以得到所有的操作视图,问题是我怎样在JAVA程序中调用分析语句呢?
      

  9.   

    如果你要使用JAVA程序控制,而不是直接使用ORACLE提供的工具,我建议你还是写程序时,将每次修改都写入你建立的专门一个表(比如修改日志),记录下每一次修改的新旧值和时间点。 回滚时,你直接利用你建立的修改日志表来进行处理。