各位大侠:
 我昨天在修改数据时 出现数据丢失:(原数据库表中有707条数据,我又从excel中复制了3000条数据到表中。 是直接复制粘贴过来的。 但是发现表中吧之前的707条数据丢失了)。就用
alter table bzuserdb.userinformation enable row movement
 
 
flashback table bzuserdb.userinformation to timestamp to_timestamp('2008-07-24 16:00:00','yyyy-mm-dd hh24:mi:ss'); 这个语句想恢复到指定的时间。 但是报错。错误提示:递归sql级别1出现错误。并行查询服务器p000中发出错误信号。快照过旧 回退段号5(名称为“_SYSSMU5$”)过小。
 请大家指教 这个是什么原因  如何修改啊?? 在线等!!! 小弟就80分了  全部发了!!

解决方案 »

  1.   

    这是因为你的撤销段中用于闪回的数据已经没了。
    可能是因为你的撤销保留时间设的不够长,也可能就是说DML操作太多了,已经重复使用了用于闪回的撤销段。你可以尝试把闪回时间点再缩小点,看能不能找到记录。
    还有一点就是你的这个数据丢失的原因是什么,是别人DELETE了,还是当时没提交,等等。不是所有操作都能闪回。
      

  2.   

    我的数据是吧excel的数据复制到表中以后提交了  然后就没有之前的数据了。 是不是我的回滚段 太小了?? 还是有设置大的回滚段?
      

  3.   

    “吧excel的数据复制到表中以后提交了  然后就没有之前的数据了”
    这怎么会呢?你怎么复制到表中的?用了sqlldr的replace?
      

  4.   

    快照过旧 回退段号5(名称为“_SYSSMU5$”)过小。
    ============================================
    回滚段过小,造成数据行的 before image 被新的事物覆盖。指定使用空间足够的回滚段。
      

  5.   


    增大UNDO_RETENTION参数,并增加undo表空间的大小。
    改了之后,以后的操作才起左右。
    以前的估计没有办法通过flashback找到了,因为已经被其它的覆盖了。
      

  6.   

    看来是undo 信息丢了,没法flashback table 了。如果数据特别重要,用rman 恢复另一个环境出来,然后再获得之前的数据吧。为了吸取这次的经验:
    1。你的dml操作一定要特别注意,即,尽量不要出错
    2.要能及时发现你的错误,即使是事后,即,即使出错了,也要越早发现越好
    3.review 你的undo_retention 设置,设置的足够大,并且保证有足够大的undo tablespace