【使用场景】:1、操作失误导致delete、update的数据已经提交。

2、对一个表做了改动,你想看看有哪些数据发生了变化。

3、误删除了function,procedure,trigger等

【使用环境】:oracle 10g r1 、oracle 10g r2、 Oracle 11g r1、 oracle 11g r2

【注意事项】:(1)基于undo 的表恢复,需要注意DDL 操作的影响。修改并提交过数据之后,对表做过DDL 操作,包括:drop/modify 列, move 表, drop 分区(如果有的话), truncate table/partition,这些操作会另undo 表空间中的撤销数据失效,对于执行过这些操作的表应用flashback query 会触发ORA-01466 错误。

另外一些表结构修改语句虽然并不会影响到undo 表空间中的撤销记录,但有可能因表结构修改导致undo 中重做记录无法应用的情况,比如对于增加了约束,而flashback query 查询出的undo 记录已经不符合新建的约束条件,这个时候直接恢复显然不可能成功,你要么暂时disable 约束,要么通过适当逻辑,对要恢复的数据进行处理之后,再执行恢复。

(2)基于undo 的表恢复,flashback table 实际上做的也是dml 操作(会在被操作的表上加dml 锁),因此还需要注意triggers 对其的影响,默认情况下,flashback table to scn/timestamp 在执行时会自动disable 掉与其操作表相差的triggers,如果你希望在此期间trigger 能够继续发挥做用,可以在flashback table 后附加 ENABLE TRIGGERS 子句。
Flashback Query分Flashback Query,Flashback Version Query, Flashback Transaction Query 三种。

如果使用truncate 删除表数据或者drop user XXX cascade;这样的话貌似只能使用flashback database(数据库默认不开启)、imp/impdp(需要提前备份)、RMAN恢复(需要备份集)、LOGMINER 日志挖掘(需要开归档)。并且还会造成很多工作白做。

主要写一下上次罗丹同志提到的方法,也是最常用的:例如有一个A表数据删除,但我又想找回删除的数据。

语法:SELECT * FROM tablename AS OF TIMESTAMP
TO_TIMESTAMP('2013-01-11 11:10:17', 'YYYY-MM-DD HH24:MI:SS');

SQL>create table A (id number);

SQL> insert into a values (1);

1 row created.

SQL> insert into a values (2);

1 row created.

SQL> insert into a values (3);

1 row created.

SQL> insert into a values (4);

1 row created.

SQL> commit;

Commit complete.

SQL> select * from a;

ID

----------

1

2

3

4

模拟用户误操作,删除数据

SQL> delete from A;

已删除4行。

SQL> commit;

提交完成。

SQL> select * from A;

未选定行

查看删除之前的状态:假设当前距离删除数据已经有5 分钟左右的话:

SQL> select * from A as of timestamp sysdate-5/1440;

ID

----------

1

2

3

4

或者:

SQL>select * from A as of timestamp to_timestamp('2013-01-13 12:00:16','YYYY-MM-DD hh24:mi:ss');

ID

----------

1

2

3

4

用Flashback Query恢复之前的数据:

SQL>Insert into A select * from A as of timestamp to_timestamp('2013-01-13 12:00:16','YYYY-MM-DD hh24:mi:ss');

已创建4行。

SQL> COMMIT;

提交完成。

SQL> select * from A;

ID

----------

1

2

3

4

如上述示例中所表示的,as of timestamp 的确非常易用.

到底flashback query 能查询多长时间的呢?

这要取决于undo_retention的值。--默认900秒,15分钟。

但是,并不是说保留15分钟。UNDO_RETENTION是指在有足够空间的情况下"最少保留多久"。关于这个大家可以测试下。

更详细的信息,请google、baidu ,如果有兴趣可以看看官方文档。

本文参考官方文档:

Oracle® Database

Advanced Application Developer's Guide

11g Release 2 (11.2)

E17125-05

Using Oracle Flashback Technology

Using Oracle Flashback Query (SELECT AS OF)

利用flashback query解决误删除表数据相关推荐

  1. 如何利用Flashback Query 恢复误删除的数据

    网上有很多关于数据回复的文章,这里整理一篇供大家参考,希望能帮助的大家! 推荐一家即时通讯云服务商:www.yun2win.com,功能包含im即时通讯.实时音视频.电子白板.屏幕共享的多种融合通讯云 ...

  2. 利用锁机制解决商品表和库存表并发问题

    利用锁机制解决商品表和库存表并发问题 参考文章: (1)利用锁机制解决商品表和库存表并发问题 (2)https://www.cnblogs.com/hgj123/p/4817923.html 备忘一下 ...

  3. oracle 误删除表数据,Oracle误删除表数据后的数据恢复详解

    Oracle误删除表数据后的恢复详解 测试环境: SYSTEM:IBM AIX 5L                         Oracle Version:10gR2 1. undo_rete ...

  4. Linux环境下利用句柄恢复Oracle误删除的数据文件

    在误删除Oracle的数据文件后,如果未关闭数据库,文件句柄还没有释放,且被删除的数据文件占用的磁盘块未被复写,则可以利用句柄的方式来恢复数据文件.下面模拟恢复过程. (一)环境 OS版本:redha ...

  5. 【mysql】mysql利用mysqldump导出表结构或者表数据

    加-d参数代表只导表结构,不加此参数则代表导出结构以及表数据,> 代表录入某一文件,若为>>则表示将内容追加到某文件末尾. 加-d参数代表只导表结构,不加此参数则代表导出结构以及表数 ...

  6. Oracle回收站解决误删除表

    不小心使用drop table 语句把表删除了,数据也没有备份.就是数据备份了恢复的时候还是会丢失数据的,这时候不必太慌张,或许oracle的回收站(recyclebin)可以解决问题. [使用环境] ...

  7. 如何解决数据库表数据碎片化导致数据处理堆积

    1. 重构表结构 将原表创建sql语句备份留用 创建备份表并复制数据A create table A_bak as select * from A; 校验数据是否一致 将原表A删除: drop tab ...

  8. oracle 查询 历史数据,利用闪回查看Oracle表历史时刻数据

    利用闪回查看Oracle表历史时刻数据 1.查看表历史时刻数据 select * from tab_test AS OF TIMESTAMP to_timestamp( 利用闪回查看Oracle表历史 ...

  9. mysql清空表分区数据恢复_清空表数据恢复 mysql恢复某个表数据

    excel表格删除后如何恢复? 谢邀,如果是删除时间很短且只是删除内容,可以使用撤回.如果是整个文件删除,回收站没有,可以使用数据恢复软件恢复. excel数据清空保存了,怎么恢复原数据? 1.首先在 ...

最新文章

  1. 2018年不能错过的 14 个 Java 库
  2. ad file type not recognised_Java实用工具类:File工具类方法学习,可创建目录及文件...
  3. find查找文件和目录
  4. java查看当前活动的线程数量
  5. Python入门-traceback
  6. 实验 VoIP通信的配置
  7. 软件登录账号信息 删除
  8. xp 安装程序在计算机中识别出下列大容量存储设备,大容量存储控制器驱动程序安装步骤[图形]...
  9. C#线程 访问资源同步简介
  10. ARCore 使用 SceneForm 框架 —— 三维空间中,通过三个点绘制平面(Plane)
  11. R语言:SVD分解求解线性方程组AX=b
  12. 2019牛客多校赛第8场 D Distance 三维树状数组
  13. Microsoft Web Farm Framework (WFF) 2.0正式发布
  14. APP是怎么做出来的呢?
  15. oracle多维度查询数据
  16. 报表和专业BI有什么区别?
  17. 制作全集成定制版Office2007安装包
  18. CISCO XRV-9K KVM虚机启动问题
  19. Java Exer0905 玩家1、2互相攻击,直至一方生命值小于零,战斗结束,三局两胜,公布胜方。for循环、while循环、三元运算符、if-else、Scanner
  20. 阿里巴巴2015校招笔试题附加题1解答

热门文章

  1. 【报告分享】2019年12月郭广昌混沌课程ppt(附下载链接)
  2. 投放Facebook广告,跑到爆品之后怎样扩量效果更好?
  3. SpringBoot指南(六)——错误页面、单元测试、文件上传
  4. 交叉熵的本质是极大似然估计
  5. 网络基础知识(面试基础)
  6. LeetCode刷题(46)--Search in Rotated Array
  7. linux中 字符串,linux内核驱动中对字符串的操作
  8. spring 主从表_听听京东架构师浅谈,MySQL binlog 主从同步
  9. echarts时间散点图_ECharts 实现地图散点图(下)
  10. oracle 新增加控制文件,Oracle增加控制文件副本