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闪回详解的更多相关文章

  1. Oracle 闪回特性(FLASHBACK DATABASE)

    --===================================== -- Oracle 闪回特性(FLASHBACK DATABASE) --======================= ...

  2. Oracle闪回flashback

    参考资料:Using Oracle Flashback Technology Oracle 11g的新特性闪回操作 闪回查询 闪回查询 闪回版本查询 闪回事务查询 闪回数据 闪回表 闪回删除 闪回数据 ...

  3. Oracle权限管理详解

    Oracle权限管理详解 转载--CzmMiao的博客生活 Oracle 权限 权限允许用户访问属于其它用户的对象或执行程序,ORACLE系统提供三种权限:Object 对象级.System 系统级. ...

  4. Oracle AWR 报告详解

    转自:http://blog.csdn.net/laoshangxyc/article/details/8615187 持续更新中... Oracle awr报告详解 DB Name DB Id In ...

  5. ORACLE数据库备份与恢复详解

    ORACLE数据库备份与恢复详解 学习过程中的总结,有兴趣不妨看看,如果有不对的地方,高手不要留情!! Oracle的备份与恢复有三种标准的模式,大致分为两 大类,备份恢复(物理上的)以及导入导出(逻 ...

  6. Oracle执行计划详解

    Oracle执行计划详解 --- 作者:TTT BLOG 本文地址:http://blog.chinaunix.net/u3/107265/showart_2192657.html --- 简介:   ...

  7. oracle表分区详解

    原文来自:http://www.cnblogs.com/leiOOlei/archive/2012/06/08/2541306.html oracle表分区详解 从以下几个方面来整理关于分区表的概念及 ...

  8. Java从入门到精通——数据库篇Oracle 11g服务详解

    装上Oracle之后大家都会感觉到我们的电脑慢了下来,如何提高计算机的速度呢?我们应该打开必要的服务,关闭没有用的服务.下面是Oracle服务的详解: Oracle ORCL VSS Writer S ...

  9. oracle rac IP详解

    rac环境下vip/public/private IP的区别 每个节点要2块网卡, 3个IP,虚拟IP或者叫做业务IP,单个网卡当掉可以“漂”到其他网卡是继续提供服务 在Oracle RAC环境下,每 ...

随机推荐

  1. C# 让textbox 只能输入数字的方法

    使用textBox控件的KeyPress事件 private void textBox_KeyPress(object sender, KeyPressEventArgs e) { if (e.Key ...

  2. AsyncTask使用注意事项

    AsyncTask是android自带的一个异步处理线程 它带了很多参数 都很方便使用 但是有一些注意事项 1: 官网说明: AsyncTasks should ideally be used for ...

  3. Sql server 数据库 单用户切换为多用户

    使用master 下的sysprocesses 查询 db正在使用的spid 如 select spid from sysprocesseswhere dbid=DB_ID('DbName') 然后执 ...

  4. ORA-14450

    ORA-14450 attempt to access a transactional temp table already in use Cause: An attempt was made to ...

  5. C++重难点知识

    1.顶层const和底层const const int a=10; int b=5; const int *p1=&a; int (*const)p2=&b; p1是顶层const,表 ...

  6. java基础知识4

    58.线程的基本概念.线程的基本状态以及状态之间的关系线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身.Java中的线程有四种状态分别是:运行.就绪.挂 ...

  7. NOIP前模板整理

    图 最短路径 #include <queue> #define N 1000 typedef long long ll; using namespace std; int d[N], w[ ...

  8. QT中的OpcDa 客户端 实现

    前段时间开发Windows下的设备端软件接触到了OPC DA,虽然现在有了更强大的OPC UA,但是为了兼容一些老的设备,不得不硬着头皮去啃这个老掉牙的已经过时了的技术.本来只是想粗略了解一下,简单写 ...

  9. [C入门 - 游戏编程系列] 贪吃蛇篇(一) - 世界定义

    每个游戏都有一个很明确的目的或者说游戏主题,贪吃蛇的目的很明确:蛇找到并吃掉食物.只有目的是很无聊的,算不上一个好游戏.所以设计者增加了创意:1. 吃掉食物后蛇会增长:2. 吃掉食物后分数会增加.有些 ...

  10. 如何使用Prism框架的EventAggregator在模块间进行通信

    目的 本文主要介绍如何使用Prism类库提供的事件机制在松耦合组件之间相互通信,Prism类库的事件机制建立在事件聚合服务之上,允许发布者和订阅者通过事件进行通信,不需要彼此之间引用. 事件聚合 Ev ...