oracle还原到指定表,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

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

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

原文:https://www.cnblogs.com/autumu/p/11895933.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值