利用flashBack恢复误删除(delete)的表数据
Flashback query(闪回查询)原理
Oracle根据undo信息,利用undo数据,类似一致性读取方法,可以把表置于一个删除前的时间点(或SCN),从而将数据找回。
Flashback query(闪回查询)前提
SQL> show parameter undo;

其中undo_management = auto,设置自动undo管理(AUM),该参数默认设置为:auto;
Undo_retention = n(秒),设置决定undo最多的保存时间,其值越大,就需要越多的undo表空间的支持。
修改undo_retention的命令如下:
SQL> alter system set undo_retention = 3600;
操作步骤:
1:获取数据删除前的一个时间点或scn
--获取一个时间点
SELECT to_timestamp('2013-08-16 09:40:00','yyyy-MM-dd hh24:mi:ss') AS TIMESTAMP FROM DUAL;
--获取scn
SELECT TO_CHAR(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER) SCN FROM DUAL;
2:查询该时间点(或scn)的数据
--通过时间点查询已删除的数据
SELECT * FROM T_FLASHBACK AS OF TIMESTAMP TO_TIMESTAMP('2013-08-16 09:40:00','yyyy-MM-dd hh24:mi:ss')
--通过scn查询已删除数据
SELECT * FROM T_FLASHBACK AS OF SCN +步骤1中获得的scn
3:将查询出来的数据插入回原来的表
INSERT INTO T_FLASHBACK SELECT * FROM T_FLASHBACK AS OF TIMESTAMP TO_TIMESTAMP('2013-08-16 09:40:00','yyyy-MM-dd hh24:mi:ss')
INSERT INTO T_FLASHBACK SELECT * FROM T_FLASHBACK AS OF SCN +步骤1中获得的scn
示例:
--新建一个表用于测试
CREATE TABLE T_FLASHBACK(
ID NUMBER(2)
)
--插入测试数据
INSERT INTO T_FLASHBACK(ID) VALUES (1);
INSERT INTO T_FLASHBACK(ID) VALUES (2);
INSERT INTO T_FLASHBACK(ID) VALUES (3);
INSERT INTO T_FLASHBACK(ID) VALUES (4);
INSERT INTO T_FLASHBACK(ID) VALUES (5);
--查看测试数据
SELECT * FROM T_FLASHBACK;

--删除数据(并提交commite)
DELETE FROM T_FLASHBACK;
--再次查看数据
SELECT * FROM T_FLASHBACK;
--查找未删除数据前某个时间点或SCN
SELECT to_timestamp('2013-08-16 09:40:00','yyyy-MM-dd hh24:mi:ss') AS TIMESTAMP FROM DUAL;
SELECT TO_CHAR(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER) SCN FROM DUAL WHERE ; --14677482
--根据这个SCN(或时间点)查找出已删除的数据
SELECT * FROM T_FLASHBACK AS OF SCN 14677482;
--把已删除的数据重新插回到原来的表(并提交)
INSERT INTO T_FLASHBACK SELECT * FROM T_FLASHBACK AS OF SCN 14677482;
--查看操作结果
SELECT * FROM T_FLASHBACK;

Falshback query查询的局限:
1. 不能Falshback到5天以前的数据。
2. 闪回查询无法恢复到表结构改变之前,因为闪回查询使用的是当前的数据字典。
3. 受到undo_retention参数的影响,对于undo_retention之前的数据,Flashback不保证能Flashback成功。
4. 对drop,truncate等不记录回滚的操作,不能恢复。
5. 普通用户使用dbms_flashback包,必须通过管理员授权。命令如下:
SQL>grant execute on dbms_flashback to orcl(拥有当前表的用户);
利用flashBack恢复误删除(delete)的表数据的更多相关文章
- ORACLE 利用SCN恢复误delete的表
--kg是误删除的表 SQL> select count(*) from kg; COUNT(*) ---------- 820861 SQL> delete from kg; ...
- 利用FinalData恢复shift+delete误删的文件
当前位置 : 首页 » 文章分类 : 生活 » 利用FinalData恢复shift+delete误删的文件 上一篇 有关可变形部件模型(Deformable Part Model)的一些说明 ...
- Linux中利用extundelete恢复误删除的数据
利用extundelete工具恢复磁盘误删除的数据 原理: 简单介绍下关于inode的知识.在Linux下可以通过"ls -id"命令来查看某个文件或者目录的inode值,例如查看 ...
- ORACLE恢复误删除的对象(表、存储过程等)
1.恢复存储过程 原理就是利用了oracle里所有的存储过程的源代码都是存在dba_source里,而drop某个存储过程的时候,oracle这里肯定要去dba_source里把相关的源代码给dele ...
- 针对mysql delete删除表数据后占用空间不变小的问题
开发环境 Yii1版本 MySQL PHP5.6.27 前言 物流规则匹配日志表记录订单匹配规则相关日志信息,方便管理员维护和查阅不匹配的订单,四个月时间,该日志表数据就有174G,当前,这么大的数据 ...
- 一句DELETE引发的加班(Mysql 恢复Delete删除的数据)
本机用的Navicat连mysql测试DB又连了正式DB,因为本地与正式要频繁操作所以都打开了很多查询,本来要DELETE删除测试DB的数据,没看清在正式环境执行了.共删除了325条数据,然后在网上找 ...
- window下Mysql 恢复Delete删除的数据
转载:https://www.cnblogs.com/q149072205/p/11940591.html 本机用的Navicat连mysql测试DB又连了正式DB,因为本地与正式要频繁操作所以都打开 ...
- 利用flashback query 恢复表数据
flashback query可以查询过去某个时间点对象的状态,从而可以利用此来进行恢复数据 1 准备测试数据 用普通用户创建一个表,表中插入部分数据: SQL> show user USER ...
- 利用logminer恢复delete误删除操作的数据
1环境准备 日志挖掘可以基于日志.基于时间.基于SCN分析,这里我们将演示一个基于SCN的分析案例. 开启补充日志功能(必须开始,否则不能捕获DML操作日志): 创建一张livan表,往里面插入了14 ...
随机推荐
- elasticsearch data importing
ElasticSearch stores each piece of data in a document. That's what I need. Using the bulk API. Trans ...
- C# ASP.net 入门之简单通讯录
简单通讯录功能虽然简单,却包括了制作一个网站的基本功能!各个模块可以作为新手入门的参考. 简单通讯录实现功能:1.登录 2.注册 3.后台管理 4.前台登录显示 5.创建联系人 6.密码修改 代码下载 ...
- C语言序列点浅析
摘要: 现行国内的C语言教材普遍不介绍序列点,这使得读者只能“死记硬背”有序列点表达式的求值顺序,不仅造成了读者对C语言知识的认知残缺不全,而且也影响了读者学习的积极性.本文总结了序列点的作用,即表达 ...
- 开发一个微信小程序教程
一.注册小程序账号 1.进入微信公众平台(https://mp.weixin.qq.com/),注册小程序账号,根据提示填写对应的信息即可. 2.注册成功后进入首页,在 小程序发布流程->小程序 ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第四章:更高级的数据管理
在这一章我们将学习如何正确地删除分类信息,如何向数据库填充种子数据,如何使用Code First Migrations基于代码更改来更新数据库,然后学习如何执行带有自定义错误消息的验证. 注意:如果你 ...
- elike.python.function()
将python用于基本的科学计算,能完全替代matlab.就最近写的一个物理模型程序来看,用python建立的物理模型的可控性,代码的层次性都优于matlab,只不过python没有matlab那样的 ...
- TypeScript开发ReactNative之fetch函数的提示问题
使用TypeScript开发ReactNative时,发现在类中调用 fetch 函数时IDE可能会提示找不到,无法加载,特别是当类中存在同名的 fetch 成员方法时更是郁闷了,虽然程序是可以执行的 ...
- DPDK support for vhost-user
转载:http://blog.csdn.net/quqi99/article/details/47321023 X86体系早期没有在硬件设计上对虚拟化提供支持,因此虚拟化完全通过软件实现.一个典型的做 ...
- vue使用resource发送ajax请求
<script type="text/javascript"> new Vue({ el:'#app', created:function(){ var url=&qu ...
- DB2表是否存在
select count(1) from syscat.tables where tabname='T1';