xiaoshilangzi
2016-04-09 08:35
采纳率: 0%
浏览 3.1k

oracle 恢复数据 报错 ora-01555,请各位帮忙看看 怎么解决

oracle 恢复数据 两天前的数据,数据量不大,执行下面语句

--开启行移动功能
alter table 表名 enable row movement;
--恢复表数据
flashback table 表名 to timestamp to_timestamp('2016-04-07 17:40:00','yyyy-mm-dd hh24:mi:ss');

报错 :

ORA-01555: snapshot too old: rollback segment number 11 with name "_SYSSMU11$" too small

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • 青城远梦 2016-04-11 02:12

    1、扩大回滚段: 因为回滚段是循环使用的,如果回滚段足够大,那么那些被提交的数据信息就能保存足够长的时间是那些大事务完成一致性读取。

    2、增加undo_retention时间:在undo_retention规定的时间内,任何其他事务都不能覆盖这些数据。

    3、优化相关查询语句,减少一致性读:减少查询语句的一致性读,就降低读取不到回滚段数据的风险。这一点非常重要!

    4、减少不必要的事务提交:提交的事务越少,产生的回滚段信息就越少。

    5、对大事务指定回滚段,通过以下语句可以指定事务的回滚段:SET TRANSACTION USE ROLLBACK SEGMENT rollback_segment; 给大事务指定回滚段,即降低大事务回滚信息覆盖其他事务的回滚信息的几率,又降低了他自身的回滚信息被覆盖的几率。大事务的存在,往往是1555错误产生的诱因。

    6、使用游标时尽量使用显式游标,并且只在需要的时候打开游标,同时将所有可以在游标外做的操作从游标循环中拿出。当游标打开时,查询就开始了,直到游标关闭。减少游标的打开时间,就减少了1555错误发生的几率。

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题