关于Oracle闪回机制知识点

        对于Oracle提供的闪回机制大家应该并不陌生,网上也有很多前辈介绍了相关的用法,我这里就不再赘述。

        本篇博客重点记录一个愚蠢的操作经历。

        在某天上班的时候,测试小姐姐突然误操作一张四百万的表数据,导致全表更新,然后找我求助。哼,小姐姐求助,怎有不帮助的道理,于是信心满满的拍着胸脯,开始了一顿噼里啪啦的操作。

        首先通过闪回的查询语句,找到了正常数据的时间点,接下来就是将表数据还原到该时间戳下,不知当时是怎样的鬼使神差,竟然想着先将表数据清空,然后将正常数据重新导入。说时迟那时快,一个truncate将表数据清理的干净,然后一个潇洒的flashback table 报出了一个Error:ORA-01466:unable to read data - table definition has changed(表定义已变化)。

        这时直接傻眼,我明明没有操作表结构,怎么会这样呢?是不是谁在这个时候修改了表结构?来不及考虑那么多,先想办法把数据补上再说,事已至此,truncate数据想要恢复不是一般的难,何况恢复了也是错误的数据,于是只能通过同构库导一批相似数据进来,然后书写业务相关的更新语句,尽量把数据还原。

        等一切操作就绪,又回到出问题的地方,在测试库自己创建了表又重新将问题还原,这才发现,truncate语句不是简单的删除操作,对于oracle来说相当于一个DDL语句,也就是Data Define Language,即数据定义语言,所以Oracle认为这个表结构被重新定义,然后就不让你进行闪回操作,至此一切谜团解开,吃一堑长一智,希望大家也get起来。

       

下面是我从其他大佬的博客找到的相关闪回问题总结,希望也可以帮助到大家:

来源:https://blog.csdn.net/waterxcfg304/article/details/8473711

总结:

1. Flashback table在真正的高可用环境中,使用意义不大,受限比较多,要必须确保行迁移功能
2. Flashback table过程中,阻止写操作
3. 使用flashback table可以将delete方式删除的表闪回到之前某个时间点,而表中索引却不能正常恢复,因为drop索引的过程是不记录undo的。
4. 恢复的触发器本身还是修改后的,并不随表flashback到修改以前的时间点。说明关键字enable triggers只能保证触发器的状态正常,而不是内容回滚.
5. 由于原理利用其undo信息,来恢复其对象,因此也是不能恢复truncate数据
6. 恢复数据用flashback query实现比较好
7,flashback table功能不能够将被truncate的表内容恢复出来,原因也是truncate操作过程是不记录undo信息。

其他注意:
1.当闪回删除操作之前,如果某个键值如主键被重用,将导致违反主键约束,闪回失败。
2.若闪回所需要的UNDO信息不存在,将引发ORA-08180:no snapshot found based on specified time(未找到基于指定时间的快照)错误
3.如果受闪回影响的记录被其它用户锁定,将引发ORA-00054:resource busy and acquire with NOWAIT specified (资源忙碌)错误
4.表定义在闪回期间不能发生变化,否则导致ORA-01466:unable to read data - table definition has changed(表定义已变化)错误
5.闪回前未启用row movement,将收到ORA-08189: cannot flashback the table because row movement is not enabled 错误
6.对于存在参照关系的情况,建议将主表等一起实施闪回,否则,将收到ORA-02091: transaction rolled back,ORA-02291错误
7.SYS 模式中的表不能使用表闪回技术

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aikes902

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值