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
解决方法就是避免上面三个原因的发生了。
但是,我误操作的数据怕是还原不回来了- -
原文:https://www.cnblogs.com/autumu/p/11895933.html