写在前面:删库跑路,相信这是绝大多数程序员会经常听到的一个词。俗话说:常在河边走,哪有不湿鞋,作为经常和数据打交道的程序员也好,运维实施也好,有时难免会出现数据误删除,误操作等情况。如果你是一个oracle用户,那么你如果知道这些关于数据闪回恢复的基本知识,或许可以帮你在出现类似情况的时候解决很多问题。

本文主要介绍一下数据库的误drop操作的一些闪回技术,至于整库的删除恢复,想在另一篇文章里详细介绍。

再来说一个案例吧:今年34月的时候吧,一次现场运维在操作测试库的时候,误连了生产数据库,执行了一个drop操作,将生产的流程核心业务表删除,删除之后发现连错库了,当时,情急之下,他将测试库建表脚本导出,在生产环境执行建表脚本,然后才联系我找解决措施(当然,后续通过我们的闪回技术,将之前删除的业务表数据以及后续表重建后的数据全部找回)。下面就来详细介绍下我们的闪回技术

1,概念
闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成)。需要注意的是,闪回技术旨在快速恢复逻辑错误,对于物理损坏或是介质丢失的错误,闪回技术就回天乏术了,还是得借助于Oracle一些高级的备份恢复工具如RAMN去完成
在讲闪回技术前,需要先了解Oracle中一个逻辑结构–撤销段。因为大部分闪回技术都需要依赖撤销段中的撤销数据。
撤销数据是反转DML语句结果所需的信息,只要某个事务修改了数据,那么更新前的原有数据就会被写入一个撤销段。
(事务回滚也会用到撤销段中的数据)。事务启动时,Oracle 会为其分配一个撤销段,事务和撤销段存在多对一的关系,即一个事务只能对应一个撤销段(你可以理解为windows系统中的回收站)。

2,闪回drop(闪回drop可以轻松将一个已经被Drop的表还原。相应的索引,数据库约束也会被还原(除了外键约束))
先直接来个例子,让大伙感受下什么是闪回drop
1)连接sqlplus / as sysdba,查看是否开启回收站,如果未开启(如下图我已经开启了回收站):

ALTER SYSTEM SET recyclebin = ON;     开启系统回收站
ALTER SESSION SET recyclebin = ON;    开启当前连接回收站
ALTER SYSTEM SET recyclebin = OFF;    关闭系统回收站
ALTER SESSION SET recyclebin = OFF;    关闭当前连接回收站


2)新建测试表,差插入四条数据,效果如下
3),对user_test执行drop操作,再查询时报:表或视图不存在
4),查询数据字典:select * from dba_recyclebin; 查看我们的user_test是否在回收站中,如图确实在回收站中找到了我删除的user_test表,并且是通过drop操作删除的

5)接下来就是我们的明星命令了:FLASHBACK table tableName to before drop; 将表闪回到drop前的一个工作点

执行完闪回之后,你看表数据又恢复了,不过这种flashback 对 TRUNCATE 操作没用哦,至于TRUNCATE操作如何恢复,需要借助第三方插件或其他容灾方式恢复了,后面我会介绍通过第三方插件恢复TRUNCATE操作
注:
a)不通过表名,直接通过对象名也同样可以完成闪回操作(如果我们同一个表名被删除后,重新建表了,然后又删除了,这是我们表名在回收站中可能就有两个了,这时闪回的时候,可以通过对象名加以区分具体需要闪回的是哪张表了,命令如下)
flashback table “BIN$mKoYM02RCojgQAB/AQAvyw==$0” to before drop;
b)闪回之后重命名,这个比较简单,命令如下
flashback table tableName to before drop rename to new_tableName;
6)当然还有一种情况,我们表被删除了,但是我还想查询里面的数据,又不能把表恢复的情况,可以直接通过回收站的对象名进行闪回查询(注意对象名需要加 “”,不然会报错的)
Drop命令其实是Rename命令,早期的Oracle版本(10g之前),闪回删除意味着从数据字典中删除了该表的所有引用,虽然表中数据可能还存在,但已成了孤魂野鬼,没法进行恢复了,10g版本之后,Drop命令则仅仅是一个Rename操作,所以恢复就很容易了
10g版本开始,删除表只是重命名,但是不保证flashback 一定成功。比如删除的表的表名字被占用,期间先创建一个表和被删除的重名则是由于10g版本后对表的删除仅表现为一个rename操作,引入回收站的概念,但此回收站仅是当前表空间的一块逻辑划分,所以会受限于当前表空间的可用空间的限制
上述案例中:
由于同事在drop后执行了建表操作,导致无法直接闪回成原来的表名:
解决方法:1,先将表rename
2,执行闪回操作
3,执行insert select 操作,将后续产生的数据更新到业务表中
注意:drop table table_name [purge] 如果你再drop操作中加入了purge参数,那么我们这次介绍的闪回操作就不适用了(当然也是可以找回的,具体操作后面有机会再做介绍)

3,回收站管理
对于回收站管理,我这边主要介绍三个命令,谨慎使用哦
> show recycle; 查看回收站.
> purge recyclebin; 清空回收站.
> purge table t2 ; 清空回收站中t2的表.

关于oracle的闪回drop就先介绍到这里了,希望对大家有所帮助!

有兴趣的可以看下下一篇,闪回查询相关介绍:https://blog.csdn.net/baomw/article/details/84196984

oracle闪回技术详解之闪回drop(神奇的flashback)相关推荐

  1. 【转载】oracle闪回技术详解之闪回drop(神奇的flashback)

    写在前面:删库跑路,相信这是绝大多数程序员会经常听到的一个词.俗话说:常在河边走,哪有不湿鞋,作为经常和数据打交道的程序员也好,运维实施也好,有时难免会出现数据误删除,误操作等情况.如果你是一个ora ...

  2. Oracle 闪回技术详解

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

  3. Oracle闪回技术详解

    Oracle的闪回技术提供了一组功能,可以访问过去某一时间的数据并从人为错误中恢复.闪回技术是Oracle 数据库独有的,支持任何级别的恢复,包括行.事务.表和数据库范围.使用闪回特性,您可以查询以前 ...

  4. oracle对查询结果求和_Oracle 闪回技术详解

    概述 闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成).需要注意的是,闪回技术旨在快速恢复 ...

  5. oracle flash_back oracle闪回技术详解,oracle flashback 闪回技术实例

    oracle flashback 闪回技术实例 相关操作 1.DBA必须设定undo保持力足够大以能够重构需要闪回的数据 ALTER SYSTEM SET UNDO_RETENTION=; secon ...

  6. Oracle 闪回技术详解(flashback)

    文章目录 1 概述 2 实例说明 2.1 闪回查询 2.2 闪回版本查询 2.3 闪回事务查询 2.4 闪回表 2.5 闪回删除 3 扩展 1 概述 为了使 Oracle 数据库从误操作中迅速地恢复, ...

  7. oracle数据库并行数限制,Oracle数据库并行处理技术详解(上)

    Oracle数据库并行处理技术是数据库的一项核心技术,它使组织能够高效地管理和访问TB级的数据.如果不能提供高效的Oracle数据库并行处理技术,这些大型数据库(通常用于数据仓库但也越来越多地出现在业 ...

  8. SSD固态硬盘闪存技术详解

    传统的机械硬盘(HDD)运行主要是靠机械驱动头,包括马达.盘片.磁头摇臂等必需的机械部件,它必须在快速旋转的磁盘上移动至访问位置,至少95%的时间都消耗在机械部件的动作上.SSD却不同机械构造,无需移 ...

  9. Oracle的学习心得和知识总结(七)|Oracle数据库Literals技术详解

    目录结构 注:提前言明 本文借鉴了以下博主.书籍或网站的内容,其列表如下: 1.参考书籍:<Oracle Database SQL Language Reference> 2.参考书籍:& ...

最新文章

  1. C#Redis列表List
  2. C语言递归方式实现冒泡排序(bubble排序)算法(附完整源码)
  3. 文字阴影-CSS Text-Shadow
  4. c语言检查字符数组不为空,【C语言】检查输入是否为空,如为空,程序退出
  5. 编程猫海龟编辑器python_海龟编辑器下载
  6. JS中的立即执行函数
  7. 深度学习福利入门到精通第五讲——ResNet模型
  8. SFML 与 VS2015 的安装配置
  9. Struts,Hibernate,Spring经典面试题收藏(转)
  10. Oracle sql给一列赋值,简单的Oracle变量SQL赋值
  11. 在线支付(易宝支付)
  12. 实验三,基于Unittest框架的单元测试
  13. 计算机usb接口是一种通用,USB接口大科普,你用的是哪一种?
  14. UnityECS-PureECS与HyBridECS
  15. 边缘计算2.0时代,“云边缘”与“边缘云”你分清了吗?
  16. 路由选择协议——RIP协议
  17. COGS 729 [网络流24题] 圆桌聚餐
  18. 物联网实训-物联网行业实训仿真_3.0.2
  19. svg格式文件转换为png图片文件
  20. FireFox浏览器缓存路径设置

热门文章

  1. 免疫算法Python实现
  2. linux文件名后 rc 是什么意思
  3. gmtsar哨兵一号卫星两景数据拼接
  4. 专利学习笔记4:权利要求书中的注意事项
  5. CANoe DEMO12.0安装包下载地址
  6. 使用js将网页导出为图片并下载
  7. 面试常问集锦——分布式系列
  8. NHANES数据库的介绍及使用(一)
  9. 中国移动真正比联通强的原因
  10. mysql和postsql分页数据的区别