Oracle 恢复表数据到指定时间点

Oracle 恢复表数据到指定时间点

昨天在操作数据库的时候,对一张表执行了update语句,但是没有加上where过滤条件,导致表中的数据全部都被修改了。所以就想着尝试将表恢复到指定的时间点上。

尝试执行如下语句:

  • select * from table_name as of timestamp to_timestamp('time','yyyy-mm-dd hh24:mi:ss');
  • alter table table_name enable row movement;
  • flashback table table_name to timestamp TO_TIMESTAMP('time','yyyy-mm-dd hh24:mi:ss');

以上的语句分别用来:

  • 查看缓存区指定时间点指定表的数据
  • 为表开启行迁移(允许Oracle 修改分配给行的rowid。在Oracle 中,插入一行时就会为它分配一个rowid,而且这一行永远拥有这个rowid。闪回表处理会对EMP 完成DELETE,并且重新插入行,这样就会为这些行分配一个新的rowid。要支持闪回就必须允许Oracle 执行这个操作)
  • 闪回到指定时间点

但是昨天执行第一条语句的时候出错了

ORA-01555 snapshot too old:
    rollback segment number string with name "string" too small

是的,说是快照太旧了。

这个就很无语,然后网上查了一下,引起这个报错的原因如下:

  • undo段太小
  • 事务被频繁提交
  • 查询时间过长

这个其实就是undo段太小然后事务的频繁提交导致undo段被覆盖了,再想去查的时候就会报snapshot too old

解决方法就是避免上面三个原因的发生了。

但是,我误操作的数据怕是还原不回来了- -

猜你喜欢

转载自www.cnblogs.com/autumu/p/11895933.html