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. JavaScript-------寄生组合式继承

    组合继承在前面有说过,也是JavaScript中最常用的一个继承模式:不过,它也有自己的不足.组合继承最大的问题就是无论什么情况,都会调用两次构造函数: 那我们来回顾下组合式继承基本模式: funct ...

  2. (转) Data structures

      Data structures A data structure is a group of data elements grouped together under one name. Thes ...

  3. maven配置spring mvc+hibernate+spring框架

    作为一名刚出茅草屋的新手小白写的框架,仅适合新手小白借鉴,大神勿喷,谢谢...... 前天刚知道spring mvc这个框架现在也很流行,决定用它代替struts2来写我的毕业设计. ...作为一名新 ...

  4. MySql移植到嵌入式Linux平台

    最近在做考勤机系统,硬件采用的cortex-A8,哈哈,其实是有点浪费的,2410就可以的.所以就要考虑到考勤数据的存储问题,本来是打算用sqlite数据库存储的,可是后来发现,这个数据库只是一个本地 ...

  5. Java 枚举随笔

    public enum Color{ //定义枚举并赋值 RED("红色", 1), Blue("蓝色", 2), Yellow("黄色", ...

  6. 精简jQuery Tabs

    闲来无事,周末用jQuery写了一个比较精简的Tabs,个别地方可以用到. 截图及代码如下: <!DOCTYPE html> <html> <head lang=&quo ...

  7. CentOS 6.4 LNMP 环境编译安装

    1.关闭 SELinux 编辑 /etc/selinux/config SELINUX="disabled" 2.安装编译器 yum install gcc gcc-c++ -y ...

  8. Python爬虫学习:二、爬虫的初步尝试

    我使用的编辑器是IDLE,版本为Python2.7.11,Windows平台. 本文是博主原创随笔,转载时请注明出处Maple2cat|Python爬虫学习:二.爬虫的初步尝试 1.尝试抓取指定网页 ...

  9. 基于C#—WPF的扫雷游戏

    自学教材:<C#入门经典(第六版)>,1月28日购入,1月29日到2月9日学习了前十六章,由于有C语言基础,在语法阶段学习起来比较轻松,不过在接触到面向对象的时候遇到了一些困难,对于一些概 ...

  10. 学习Emacs

    1.http://ergoemacs.org/emacs/emacs.html 2.Debian7安装emacs24 http://my.oschina.net/xuzhouyu/blog/14954 ...