对于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 模式中的表不能使用表闪回技术

关于Oracle闪回机制知识点相关推荐

  1. Oracle 10g的闪回机制

    第5章Oracle 10g的闪回机制 5.1 简介 在Oracle中,对于提交的变化,是没有办法回退的.所以这时候就可能存在这样一种情况,对于表做了DML操作,并且在提交后才发现,对表的操作是错误的, ...

  2. 怎样恢复oracle函数,Oracle闪回恢复误删除的表、存储过程、包、函数...

    在日常的数据库开发过程汇总难免会出现一些误删除的动作, 对于一些误删的操作我们可以通过oracle提供的闪回机制恢复误删数据, 从而避免出现较大的生产事故. 下面是本人平时工作中积累的一些常用的操作, ...

  3. Oracle 闪回技术详解

    概述 闪回技术是Oracle强大数据库备份恢复机制的一部分,在10g的时候就被推出一直延续到现在.在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成 ...

  4. oracle闪回区和归档的关系,闪回与归档参数的设置

    Oracle闪回技术提供了一组功能用来查看数据的过去状态并且支持数据按时间返回到之前的状态不用对数据库从备份中执行大量的还原操作或者执行按时间点恢复.在大部分情况下闪回功能非常有效破坏性比介质恢复小. ...

  5. oracle闪回 分区,Oracle 闪回区(Oracle Flash recovery area)

    闪回区已经有了好几载的岁月了,在10g的时候就被推出一直延续到现在.Oracle闪回区是为RMAN准备的,尽管抛开它我们可以同样完成数据库备份恢复的相关工作,Oracle依旧强烈推荐使用且它让其成为R ...

  6. 6. Oracle闪回特性

    Oracle 闪回 (flashback)是9i版本提供的新特性.这一特性:其他数据库(PostgreSQL,Mysql)是羡慕不已.对数据恢复提供非常便捷的方式.闪回技术通常用于快速简单恢复数据库中 ...

  7. oracle闪回某个时间点的数据库,oracle11g 使用闪回查询恢复表到过去某一个时间点...

    一.新建测试表并插入数据:oracle 二.模拟表数据误删并提交:测试 三.使用闪回查询来查误删前表的数据:(表误删是在15:08分左右误删,所以在15:08分以前表的数据仍是在的):spa 四.用如 ...

  8. oracle11g创建闪回分区多大,Oracle闪回区大小预估

    一个朋友问如何设置Oracle闪回区大小,有什么依据没有. 查证官方文档,有如下描述 For example, if you intend to setDB_FLASHBACK_RETENTION_T ...

  9. Oracle闪回报错,oracle 闪回区满了,ORA-19815

    oracle 闪回区满了,查看日志报错:ORA-19815,命令行输入:sqlplus / as sysdba startup  mount   //如果你的数据库出现了无法连接的情况时,可以加上这句 ...

最新文章

  1. php循环输出sql数组吗,在PHP中循环SQL结果 – 没有获得整个数组
  2. NoSQL生态系统——事务机制,行锁,LSM,缓存多次写操作,RWN
  3. java list.add()与list.addAll()方法
  4. android 布局适配虚拟键适配
  5. plsql(轻量版)_异常处理机制
  6. 处理对象的多种状态及其相互转换——状态模式
  7. python在mac上_在Mac上Python多版本切换
  8. 【Transformer】Are Transformers More Robust Than CNNs?
  9. 修改安装路径 pip 以及修改运行路径
  10. Linux sed命令实例详解
  11. cmd 实用快捷键。。
  12. 三角形个数(找规律)
  13. paper论文搜集技巧(paperswithcode)
  14. php radio是什么意思,radio是什么意思_radio在线翻译_英语_读音_用法_例句_海词词典...
  15. 财帮子(caibangzi.com)网站架构
  16. 消费者理论:效用函数
  17. 智能座舱又迎来一个新的「蓝海」赛道!谁在领跑?
  18. rsem比对_链特异性参数设不对 结果全是错的
  19. SQL 开源替代品,诞生了!
  20. 四、 Spark Webchat的安装

热门文章

  1. [技术干货] 惠普3par命令行配置snmptrap
  2. 关于 scrollIntoView() 锚点 元素滚动到指定位置 平滑
  3. PHP画a梦,html打造动漫人物--哆啦A梦
  4. 数据结构: 中序非递归遍历二叉树
  5. 程序员鄙视链python_关于程序员之间的鄙视链
  6. Design下TextInputLayout结合EditText的简单使用
  7. [原创] 再忙也要写个教程(仙女)
  8. 公司股东该发工资吗?发多少?
  9. 水利水电课程指导之建设项目管理_第十一章
  10. jquery 添加点击添加class样式 移除兄弟元素样式