Oracle闪回详解
1、问题定义
闪回是dba做的工作。现在也可授权给某个用户。
闪回的定义:就是将用户错误的操作回恢到以前的状态。即使你的事务提交的commit。
如果你删除了一个表。Drop table(DDL) 不用commit直接生效的。
闪回:flashback。
概念:
Oracle默认有2G硬盘空间,这2G的数据,保存的是用户的某些操作记录。如果用户操作的数据在这2G之内的。则可以条件闪回。
这个区域可以设置为最大10G。
在Oracle中,默认还有一个选项,时间选项。默认是900秒。
通过以下方式可以查询这个时间选项:

可以修改这个值:

2、闪回
闪回分类:
1:闪回表中的数据 –
闪回执行错误的CRUD语句。
且是提交以后的数据。
即对insert,update,delete有效。且已经提交了,则可以使用闪回。
2:闪回删除
错误的执行了drop table语句。则通过闪回删除可以找回以前数据。
3:闪回版本查询
向一个表中,做的任何一个commit语句。Oracle数据库,都会给你记录一个版本。
4:闪回事务查询
执行了多条sql语句,且是对多个表,或是对一个表的多次操作。
闪回的语法:
Flashback table {tableName} to
{
(scn|timestamp)
|
Before drop
}
SCN :System Changement Number – 其实就是一个时间。与时间一一对应的
Timestamp: 时间点 ,sysdate
--如何获取时间号:SCN
通过一个函数:

2.1、闪回表
必须要打开行移动功能,为rowid设置移动空间。

根据SCN时间号闪回:

根据时间闪回:

2.2、闪回删除
就是闪回通过drop删除到回收站中的表数据。
Flashback table tableName to before drop;
SQL> --删除stud这表
SQL> drop table stud;
表已删除。
SQL> select *from tab;
TNAME TABTYPE CLUSTERID
--------------- ---------------- ----------
BIN$O1guMhXtQtK TABLE
BrmH0wA44/Q==$0
BONUS TABLE
DEPT TABLE
EMP TABLE
SALGRADE TABLE
SYS_TEMP_FBT TABLE
已选择6行。
SQL> --通过show 可以查看回收站中信息
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
STUD BIN$O1guMhXtQtKBrmH0wA44/Q==$0 TABLE 2013-03-28:19:29:16
SQL> --闪回
SQL> flashback table stud to before drop;
闪回完成。
SQL> show recyclebin;
SQL> select *from tab;
TNAME TABTYPE CLUSTERID
--------------- ---------------- ----------
BONUS TABLE
DEPT TABLE
EMP TABLE
SALGRADE TABLE
STUD TABLE
SYS_TEMP_FBT TABLE
已选择6行。
SQL> select * from stud;
ID NAME
---------- ----------
1 Jack
2 张三
3 Rose
表如果重名:
SQL> drop table stud;
表已删除。
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -----------------
STUD BIN$jMt4lVtBQXieHhRHitV3KA==$0 TABLE 2013-03-28:19:33:
STUD BIN$4mfx44bSSo+NPkgEhU/Mig==$0 TABLE 2013-03-28:19:31:
SQL> --通过表名闪回,只会删除最近删除的那一个
SQL> flashback table stud to before drop;
闪回完成。
SQL> select * from stud;
AGE ADDR
---------- ------------------------------------------------------------
90 山东
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -----------------
STUD BIN$4mfx44bSSo+NPkgEhU/Mig==$0 TABLE 2013-03-28:19:31:
SQL> flashback table stud to before drop rename to stud2;
闪回完成。
SQL> select * from stud2;
ID NAME
---------- ----------
1 Jack
2 张三
3 Rose
还有一种闪加方式:

2.3、闪回版本查询
在Oracle数据库中,有一个对象versions记录的是对某个表的commit操作。
记录下的信息
1:versions_starttime – 什么时间开始的。对insert
2:versions_endtime – 什么时间数据就没有了,当执行delete,update时。
3:versions_startscn – 与1对应
4:versions_endscn – 与2对应
5:versions_xid – 操作的事务的id。
2.3.1、在Oracle中事务的边界
开始:
在Oracle中以insert,update,delete为事务的开始标记。
结束:
在执行rollback,commit.
在执行DDL(create ,drop ,alter)语句时,也是事务的结束。Commit
示例:
SQL> select *from stud;
AGE ADDR
---------- ----------------------------------------
90 山东
SQL> insert into stud values(12,'BJ');
已创建 1 行。
SQL> select * from stud;
AGE ADDR
---------- ----------------------------------------
90 山东
12 BJ
SQL> create table stss(iii int);
表已创建。
SQL> rollback;
回退已完成。
SQL> select * from stud;
AGE ADDR
---------- ----------------------------------------
90 山东
12 BJ
SQL> commit;
提交完成。
SQL> delete from stud where age=12;
已删除 1 行。
SQL> select * from stud;
AGE ADDR
---------- ----------------------------------------
90 山东
SQL> drop table st;
drop table st
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> select * from stud;
AGE ADDR
---------- ----------------------------------------
90 山东
SQL> rollback;
回退已完成。
SQL> select * from stud;
AGE ADDR
---------- ----------------------------------------
90 山东
SQL>
2.3.2、查询一个表的版本信息
对于versions而言语法:
Select id,name,
Versions_xid
From person
Versions between ( scn | timestamp) minvalue and maxvalue;
SQL> select id,name,versions_xid from person versions between timestamp minvalue
and maxvalue;
ID NAME VERSIONS_XID
---------- ---------- ----------------
22 BCCCCC 0500130099020000
2 BBBBB 0500130099020000
11 ABBBB 0700020080020000
1 AAA 0700020080020000
2.4、闪回事务查询
原则就是根据某个versions_xid- 事务id
对应这versionss_id会有一个撤销的sql==== undo_sql
即对于insert的commit来说,则撤销应该是delete

在oracle中,有一个表
Flashback_transaction_query表。保存了所有用户可撤销的sql语句。
以下是这个表的结构:
Table_name
Undo_sql
Xid对应的就是versions_xid
Grant select any transaction to scott;
Oracle闪回详解的更多相关文章
- Oracle 闪回特性(FLASHBACK DATABASE)
--===================================== -- Oracle 闪回特性(FLASHBACK DATABASE) --======================= ...
- Oracle闪回flashback
参考资料:Using Oracle Flashback Technology Oracle 11g的新特性闪回操作 闪回查询 闪回查询 闪回版本查询 闪回事务查询 闪回数据 闪回表 闪回删除 闪回数据 ...
- Oracle权限管理详解
Oracle权限管理详解 转载--CzmMiao的博客生活 Oracle 权限 权限允许用户访问属于其它用户的对象或执行程序,ORACLE系统提供三种权限:Object 对象级.System 系统级. ...
- Oracle AWR 报告详解
转自:http://blog.csdn.net/laoshangxyc/article/details/8615187 持续更新中... Oracle awr报告详解 DB Name DB Id In ...
- ORACLE数据库备份与恢复详解
ORACLE数据库备份与恢复详解 学习过程中的总结,有兴趣不妨看看,如果有不对的地方,高手不要留情!! Oracle的备份与恢复有三种标准的模式,大致分为两 大类,备份恢复(物理上的)以及导入导出(逻 ...
- Oracle执行计划详解
Oracle执行计划详解 --- 作者:TTT BLOG 本文地址:http://blog.chinaunix.net/u3/107265/showart_2192657.html --- 简介: ...
- oracle表分区详解
原文来自:http://www.cnblogs.com/leiOOlei/archive/2012/06/08/2541306.html oracle表分区详解 从以下几个方面来整理关于分区表的概念及 ...
- Java从入门到精通——数据库篇Oracle 11g服务详解
装上Oracle之后大家都会感觉到我们的电脑慢了下来,如何提高计算机的速度呢?我们应该打开必要的服务,关闭没有用的服务.下面是Oracle服务的详解: Oracle ORCL VSS Writer S ...
- oracle rac IP详解
rac环境下vip/public/private IP的区别 每个节点要2块网卡, 3个IP,虚拟IP或者叫做业务IP,单个网卡当掉可以“漂”到其他网卡是继续提供服务 在Oracle RAC环境下,每 ...
随机推荐
- Linux串口编程のtermios 结构
termios 结构是在POSIX规范中定义的标准接口,它类似于系统V中的termio接口,通过设置termios类型的数据结构中的值和使用一小 组函数调用,你就可以对终端接口进行控制. 可以被调整来 ...
- stl学习之模板
模板是实现代码重用机制的一种工具,实质就是实现类型参数化,即把类型定义为参数. C++提供两种模板:函数模板,类模板. template<typename T> //或者 templa ...
- 数值的N次方
问题描述: 实现函数double Power(double base,int exponent),求base的exponent次方.不得使用库函数, 同时不需考虑大数问题. 思路分析: 要是你秒秒钟想 ...
- YUI Array 之some(检测|any)
YUI原码 YUI someYArray.some = Lang._isNative(Native.some) ? function (array, fn, thisObj) { return Nat ...
- 关于mysql中数据存储复合树形结构,查询时结果按树形结构输出
1.主要思想:根据已有数据,规则性的造数据 select * FROM(select lId,strName,lId as lParentId,-1 as orderIdx from tbClassi ...
- 【solr专题之四】关于VelocityResponseWriter
一.关于Velocity的基本配置 在Solr中,可以以多种方式返回搜索结果,如单纯的文本回复(XML.JSON.CSV等),也可以返回velocity,js等格式.而VelocityResponse ...
- Lucene学习总结之七:Lucene搜索过程解析
一.Lucene搜索过程总论 搜索的过程总的来说就是将词典及倒排表信息从索引中读出来,根据用户输入的查询语句合并倒排表,得到结果文档集并对文档进行打分的过程. 其可用如下图示: 总共包括以下几个过程: ...
- 如何让EcStore和微博同步来推广网站
EcStore是创建B2C商城的首选PHP系统,它功能强大.操作方便,安装后马上就能建立起一个自己的B2C商城,但建好后如何推广运营商城却不是件容易的事. 新浪微博用户数量大.传播速度快,互联网上拥有 ...
- Strtus2工作流程及原理
从上图可以看出,一个请求在Struts2 框架中的处理大概分为以下几个步骤:1.客户端初始化一个指向Servlet 容器(例如Tomcat)的请求:2.这个请求经过一系列的过滤器(Filter)(这些 ...
- SQLServer优化资料整理(一)
查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 ...