关于对Orcale数据库的闪回操作

原创 2012年03月26日 21:12:54

关于对Orcale数据库的闪回操作

使用Orcale数据库默认的是开启事务的。你进行insert,update,delete操作只要没有commit,就可以通过rollback来回退回去。
但如果你已经commit了呢?该怎么样让数据恢复呢?

传统的方法是用数据库备份,但缺点是你必须得恢复整个表或者整个数据库。假如你只想恢复一天记录,用备份就太得不偿失了。
Orcale
提供了闪回技术,可以对单条记录进行恢复和对删除的某张表进行恢复,以及对某个事务进行恢复。

闪回有两个限制,一个是空间上限制的默认是2G,一个是时间上限制的默认是900秒。
这个设置是的意思是,操作的数据在2G内才能被闪回,如果超过了2G就必须在900秒内执行闪回。否则数据就不能被闪回。

你可以通过命令来修改这些设置。

要进行闪回操作必须被授予闪回操作权限才行。赋予闪回权限需要进入管理员身份,执行以下命令:

LANGUAGE=SQL

1

2

3

 

SQL> --scott用户授予闪回表的权限

SQL> grant flashback any table to scott;

闪回记录的时候,你需要知道当前的系统改变号,也就是系统时间。

LANGUAGE=SQL

1

2

3

4

5

6

7

8

9

 

SQL> --查看系统改变号:当前系统时间

SQL> select sysdate 系统时间, timestamp_to_scn(sysdate) 系统改变号 from dual;

SQL> --这里假设我查询出来的记录是:

系统时间       系统改变号       

 

-------------- ----------  

 

09-7 -11        3584457

那么如果接下来我进行insert,update,delete操作,并且commit了。那么我就可以通过这条命令来撤销这个时间号之后操作的数据。

LANGUAGE=SQL

1

2

 

SQL> flashback table flashback_table to scn 3584457;

但需要注意的是,如果是闪回删除操作的话,你需要启用行移动功能后才能进行闪回。

LANGUAGE=SQL

1

2

3

4

5

 

SQL> --打开行移动功能

SQL> alter table flashback_table enable row movement;

SQL>--进行闪回

SQL> flashback table flashback_table to scn 3584457;

以上是闪回一条记录的方法,下面介绍闪回表的方法。其实闪回表的方法就相当与windows里面从回收站还原数据一样。
执行了drop操作的表会放到Orcale的回收站里面,可以通过下面命令来查看回收站里面有哪些表,但是如果drop一个表时使用了purge参数,该表就不存在于回收站里了,并且不能执行闪回删除。

假如我创建了一个AAA表,并且drop这个表。我就可以通过show recyclebin命令从回收站里面查看到这个表。

LANGUAGE=SQL

1

2

3

4

5

6

7

8

9

 

SQL>--查看回收站

SQL> show recyclebin;

 

ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME     

 

---------------- ------------------------------ ------------ -------------------  

 

AAA              BIN$eMWnpZctTN+DyqLRUZzgSQ==$0 TABLE        2011-07-09:10:45:40

那么我就可以通过这个命令:

LANGUAGE=SQL

1

2

 

SQL> flashbak table aaa to before drop;

或者这个命令:

LANGUAGE=SQL

1

2

 

SQL> flashback table "BIN$eMWnpZctTN+DyqLRUZzgSQ==$0" to before drop;

来恢复AAA这个表。

假如这个表面已经在数据库存在了,那么你就得需要使用rename to命令来改变表名才能恢复。
例如:

LANGUAGE=SQL

1

2

 

SQL> flashback table aaa to before drop rename to bbb;

这里要注意的是管理员用户是没有回收站的,也就是说管理员用户不能进行闪回表的操作。

假如我想闪回一条记录,但我又事先没有查询系统时间号该怎么办呢?这里就需要用到闪回版本查询了。
假如我创建一个表并进行几个操作:

LANGUAGE=SQL

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

 

SQL> create table versions_table

    ( vid number,

      vname varchar(20));

 

SQL> insert into versions_table values(1,'Tom');

 

已创建 1 行。

 

SQL> commit;

 

提交完成。

 

SQL> insert into versions_table values(2,'Mary');

 

已创建 1 行。

 

SQL> commit;

 

提交完成。

 

SQL> insert into versions_table values(3,'Mike');

 

已创建 1 行。

 

SQL> commit;

 

提交完成。

 

SQL> update versions_table set vname='Mary123' where vid=2;

 

已更新 1 行。

 

SQL> commit;

我就可以通过,闪回版本查询来查看我的这些操作了:

LANGUAGE=SQL

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

 

SQL> --执行闪回版本查询,来获取该表所有的历史记录:

SQL> select vid,vname,versions_operation,versions_starttime,versions_endtime

    from versions_table

    versions between timestamp minvalue and maxvalue

    order by vid,versions_starttime;

 

SQL> --得到的记录是:

 

      VID VNAME    V VERSIONS_STARTTIME             VERSIONS_ENDTIME                                                  

---------- -------- - ------------------------------ ------------------------------                                    

         1 Tom      I 09-7-11 11.14.59 上午                                                                         

         2 Mary     I 09-7-11 11.15.11 上午       09-7-11 11.15.59 上午                                          

         2 Mary123  U 09-7-11 11.15.59 上午                                                                         

         3 Mike     I 09-7-11 11.15.26 上午

这里便可以得到每一步操作的系统时间了。VERSIONS_STARTTIME是记录开始时间,VERSIONS_ENDTIME是记录结束时间。那么我想闪回那条update操作,那么我就只要闪回到09-7月 -11 11.15.59 上午 这个时间就行了。

首先把系统时间转变为scn号然后再执行闪回:

LANGUAGE=SQL

1

2

3

4

5

6

7

8

9

10

11

 

--系统时间转变为scn:

SQL> select timestamp_to_scn(to_date('2011-07-09 11:15:59','yyyy-mm-dd hh24:mi:ss')) from dual;

 

SQL> --查询后的snc结果

TIMESTAMP_TO_SCN(TO_DATE('2011-07-0911:15:59','YYYY-MM-DDHH24:MI:SS'))                                                 

----------------------------------------------------------------------                                                 

                                                               3586784          

 

SQL> --执行闪回

SQL> flashback table flashback_table to scn  3586784;

 

Oracle数据库闪回数据与表

 --闪回 --1.查看表历史时刻数据 select * from table_name  AS OF TIMESTAMP to_timestamp('20150501 00:00:0...
  • wensibo
  • wensibo
  • 2015年06月09日 10:14
  • 776

oracle闪回数据库详解

oracle闪回技术详细整理,包括闪回数据库,闪回表,闪回版本和闪回事务 理论+实践 详细了解ORACLE的闪回技术...
  • wanghui5767260
  • wanghui5767260
  • 2014年03月12日 10:00
  • 1310

表空间闪回实例

一、ORACLE闪回原理和配置:   如果Oracle10g数据库中误删除了一个表中的记录,例如删除了一个非常重要的雇员信息,并且该事务已经提交了,如何快速找回误删除的数据呢?   这种情况下...
  • lichangzai
  • lichangzai
  • 2012年10月23日 11:08
  • 1699

打开或关闭oracle数据库的闪回功能步骤

原文链接:http://blog.itpub.net/26194851/viewspace-763582/ 一、打开闪回数据库特性: 1、确保数据库处于归档模式,如果为非归档模式,将数据库...
  • lovedieya
  • lovedieya
  • 2015年02月03日 17:09
  • 1478

oracle数据库闪回查询和闪回表测试

闪回版本查询测试 实现步骤: 1. 使用SQLPLUS连接Oracle数据库 2. 构建简单SQL语句 3. 闪回版本查询测试 实验操作如下: 1.  以SYS用户通过SQLPLUS连接上...
  • qq_24369113
  • qq_24369113
  • 2016年08月11日 15:48
  • 908

Oracle DB执行闪回数据库

• 配置闪回数据库 • 执行闪回数据库操作 • 监视闪回数据库     闪回数据库 闪回数据库操作: • 作用类似于数据库的倒带按钮 • 可以在用户造成了逻辑数据损坏的情况下使用   闪回数据...
  • rlhua
  • rlhua
  • 2013年10月08日 10:35
  • 5087

[Flashback]开启数据库闪回数据库功能

Flashback是Oracle中一个重要的功能,想要使用闪回数据库功能,需要将数据库置于闪回数据库的状态。 1.检查数据库是否开启归档状态 SQL> archive log list; Databa...
  • u011364306
  • u011364306
  • 2015年10月19日 13:57
  • 752

Oracle数据库闪回FLASHBACK命令总结

Oracle数据库闪回FLASHBACK命令总结 一、闪回查询: 1. 方法一 select current_scn from v$database; current_scn为894072...
  • zhaoyangyao888
  • zhaoyangyao888
  • 2015年12月20日 11:30
  • 1430

如何利用闪回数据库特性恢复failover 后的dataguard 环境?

11g dataguard standby 切成主库,测试完成后恢复为原standby 环境 ####################### 概述: 11204 单机对单机实施dg,因局方要求需要...
  • royjj
  • royjj
  • 2015年04月23日 20:52
  • 967

Mysql数据恢复---闪回恢复

使用过商业数据库oracle都知道,oracle有一个闪回功能非常好用,可以非常迅速的找回删除的数据或者删除的表,这个功能在线上要谨慎使用,除非是万般无奈之下才去使用,在转向使用mysql时发现,官方...
  • Y0800508014677
  • Y0800508014677
  • 2017年03月16日 00:17
  • 1430
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于对Orcale数据库的闪回操作
举报原因:
原因补充:

(最多只允许输入30个字)