闪回(Flashback)

原创 2012年03月23日 16:45:54

闪回(Flashback)

1、 Oracle的操作工程中,会不可避免地出现操作失误或者用户失误,例如不小心删除了一个表等,这些失误和错误可能会造成重要数据的丢失,最终导致Oracle数据库停止允许。

2、 在传统意义上,当发生数据丢失、数据错误问题时,解决的主要办法是数据的导入导出、备份恢复技术,这些方法都需要在发生错误前,有一个正确的备份才能进行恢复。

3、 为了减少这方面的损失,Oracle提供了闪回技术。有了闪回技术,就可以实现数据的快速恢复,而且不需要数据备份。

闪回的益处

1、    恢复中,闪回技术是革命性的进步

2、 传统的恢复技术缓慢:

    它是整个数据库或者一个文件恢复,不只恢复损坏的数据

    在数据库日志中每个修改都必须被检查

3、 闪回速度快:

    通过行和事务把改变编入索引

    仅仅改变了的数据会被恢复

4、 闪回命令很容易:

没有复杂棘手的多步程序

闪回的类型

1、  闪回表(flashbacktable)

2、  闪回删除(flashbackdrop)

3、  闪回版本查询(flashbackversion query)

4、  闪回事务查询(flashbacktransaction query)

回表

1、  闪回表,实际上是将表中的数据快速恢复到过去的一个是焦点或者系统改变号SCN上。实现表的闪回,需要使用到与撤销表空间相关的undo信息,通过show parameter undo命令可以了解这些信息。

2、  用户对表数据的修改操作,都记录在撤销表空间中,这为表的闪回提供了数据恢复的基础。例如,某个修改操作在提交后被记录在撤销表空间中,保留时间为900秒,用户可以在这900秒的时间内对表进行闪回操作,从而将表中的数据恢复到修改之前的状态。

3、  执行表的闪回,需要有flashbackany table的权限

> --系统改变号

SQL> select timestamp_to_scn(sysdate)from dual;

> --闪回的时间限制

SQL> show parameters undo

conn sys/password as sysdba

已连接。

SQL> alter system setundo_retention=1200 scope=both;

系统已更改。

SQL> show parameters undo

回表语法

FLASHBACK TABLE [schema.]<table_name>

TO 

{[BEFORE DROP [RENAME TO table]] 

[SCN|TIMESTAMP]expr

[ENABLE|DISABLE]TRIGGERS}

schema:模式名,一般为用户名。

TO TIMESTAMP:系统邮戳,包含年、月、日、时、分、秒。

TO SCN:系统更改号,

ENABLE TRIGGERS:表示触发器恢复以后为enable状态,而默认为disable状态。

TO BEFORE DROP:表示恢复到删除之前。

RENAME TO table:表示更换表名。

回表

注意:闪回表需要将表的行移动功能打开

alter table <table_name> enable row movement;

alter table flashbacktable enable rowmovement;

表已更改。

闪回表举例:

1、  通过timestamp闪回表

2、  通过SCN号闪回表

flashback table flashbacktable to timestampto_date('2011-05-03 14:22:20','yyyy-mm-dd hh24:mi:ss');

闪回完成。

> --通过scn号实现同样的功能

SQL> selecttimestamp_to_scn(to_date('2011-05-03 14:22:20','yyyy-mm-dd hh24:mi:ss')) fromdual;

闪回表: 需要考虑的事情

1、  FLASHBACK TABLE命令作为单一的事务执行,会得到一个单一的DML

2、  表的统计数据不会被闪回

3、  当前的索引和从属的对象会被维持

4、  闪回表操作:

a)系统表不能被闪回

b)不能跨越DDL操作

c)会被写入警告日志

d)产生撤销和重做的数据

闪回删除

1、  闪回删除,实际上从系统的回收站中将已删除的对象,恢复到删除之前的状态。

2、  系统的回收站只对普通用户有作用。

SQL> show recyclebin –-显示回收站

SQL> drop table flashbacktable; --删除表

表已删除。

闪回删除:回收站(recyclebin)简介

1、  回收站是所有被删除对象及其相依对象的逻辑存储容器,例如当一个表被删除(drop)时,该表及其相依对象并不会马上被数据库彻底删除,而是被保存到回收站中。

2、  回收站将用户执行的drop操作记录在一个系统表中,也就是将被删除的对象写到一个数据字典中。如果确定不再需要该对象,可以使用purge命令对回收站进行清空。

3、  被删除的对象的名字可能是相同的,例如用户创建了一个test表,使用drop命令删除该表后,又创建了一个test表,这时,如果再次删除该表就会导致向回收站中添加了两个相同的表。

Oracle回收站举例。

闪回删除:回收站中对象的命名规则

为了确保添加到回收站中的对象的名称都是唯一的,系统会对这些保存到回收站中的对象进行重命名,重命名的格式如下:

         BIN$globalUID$version

其中:BIN表示RECYCLEBINglobalUID是一个全局唯一的、24个字非长的对象,该标识与原对象名没有任何关系;version指数据库分配的版本号。

闪回删除举例:

闪回删除对下列表无效:

SYSTEM 表空间内的表

用精细审计的数据库或虚拟的私人数据库

属于字典管理的表空间

由于空间不足已经被手动或自动删除的表

以下依赖不被保护:

位图索引

表之前删掉的索引

回版本查询

闪回版本查询,提供了一个审计行改变的查询功能,通过它可以查找到所有已经提交了的行记录。其语法格式如下:

select column_name[,column_name,...]

from table_name

versions between [SCN|TIMESTAMP][expr|MINVALUE]

                  and     [epxr|MAXVALUE] as of [SCN|TIMESTAMP]expr;

其中:column_name列名;table_name表名;between...and时间段;SCN系统改变号;TIMESTAMP时间戳;AS OF表示恢复单个版本;MAXVALUE最大值;MINVALUE最小值;expr指定一个值或者表达式。

闪回版本查询举例

创建一张新表:

    create table version_table(vid int, content varchar(20));

执行如下操作:

    insert into version_table values(1,'aaa');

    commit;

    insert into version_table values(2,'bbb');

    commit;

    update version_table set content='bbb1' where vid=2;

    commit;

    insert into version_table values(3,'ccc');

    commit;

执行闪回版本查询

SQL> --通过闪回版本查询,获取该表的历史记录

SQL> select empno,ename,versions_operation,versions_starttime,versions_endtime

 2  from version_table

 3  versions between timestampminvalue and maxvalue;

--通过时间的指定返回获取闪回版本(指定时间段)的信息

SQL> selectempno,ename,versions_operation,versions_starttime,versions_endtime

 2  from version_table

 3  versions between timestampto_date('2011-05-03 14:42:19','yyyy-mm-dd hh24:mi:ss')

 4           andto_date('2011-05-03 14:43:28','yyyy-mm-dd hh24:mi:ss');

闪回事务查询

1、闪回事务查询实际上闪回版本查询的一个扩充,通过它可以审计某个事务甚至撤销一个已经提交的事务。

2、实现闪回事务查询,需要先了解flashback_transaction_query视图,从该视图中可以获取事务的历史操作记录以及撤销语句(UNDO_SQL)

3、使用闪回事务查询,可以了解某个表的历史操作记录,这个操作记录对应一个撤销SQL语句,如果想要撤销这个操作,就可以执行这个SQL语句。

闪回事务查询

注意,要查询flashback_transaction_query视图的信息,需要有selectany transaction的权限。

SQL> --闪回事务查询

SQL> conn sys/password as sysdba

已连接。

SQL> grant select any transaction tomytest123;

授权成功。

回事务查询举例

1、  从闪回版本查询中,获取xid号。

2、  基于xid号,在flashback_transaction_query视图中获取相应事务的信息。

3、利用UNDO_SQL撤销事务操作。

SQL> --先通过闪回版本查询获取事务相关信息

SQL> select empno,ename,versions_operation,versions_xid

 2  from transaction_table

  3  versions between timestamp minvalue andmaxvalue;

---查询某个具体的事务的闪回信息

select xid, operation,table_name,undo_sql

from flashback_transaction_query

where xid='0500090032020000‘

利用UNDO_SQL撤销事务操作。

  --如果UNDO_SQL中有多个sql语句就执行多次

 

Oracle闪回技术之二 Oracle 11g 利用Oracle RecycleBin (回收站)闪回删除功能

回收站介绍:实现闪回删除功能,需要使用oracle回收站。回收站是所有被删除对象及其相依对象的逻辑存储容器,例如当一个表被drop时,该表及其相依对象并不会马上被数据库彻底删除,而是被保存到回收站中。...
  • yaucyj
  • yaucyj
  • 2013年01月26日 21:05
  • 1733

FlashBack总结之闪回数据库与闪回删除

闪回数据库的特性  Flashback Database 功能非常类似与RMAN的不完全恢复, 它可以把整个数据库回退到过去的某个时点的状态, 这个功能依赖于Flashback log 日志...
  • techsupporter
  • techsupporter
  • 2016年02月15日 15:47
  • 2129

回收站&闪回删除

一、回收站     回收站本身是一个数据字典表,用于维护已删除对象的原始名称与各自系统生成名称之间 的关系。可使用DBA_RECYCLEBIN 视图查询回收站。     初始化参数RECYCLE...
  • gua___gua
  • gua___gua
  • 2013年11月17日 14:33
  • 498

Oracle 六大闪回技术,flashback

Flashback 技术是以Undo segment中的内容为基础的, 因此受限于UNDO_RETENTON参数。 要使用flashback 的特性,必须启用自动撤销管理表空间。 在Oracle ...
  • demonson
  • demonson
  • 2014年10月14日 09:35
  • 1676

闪回日志 自动删除 实验记录

1、准备导入备份集合 从192.168.0.31 上讲dmp文件scp到192.168.0.11上(含备份集 和 导出log ) 经过查看日志 可以使用的用户 为count,imp表空间的话是tbsr...
  • junshi66
  • junshi66
  • 2015年12月16日 15:46
  • 415

基于时间点的闪回

1、 模拟用户误删除数据 SQL> select count(*) from kel; COUNT(*) ---------- 1 SQL> truncate table kel; T...
  • kellyseeme
  • kellyseeme
  • 2014年07月23日 12:43
  • 1215

闪回删除(Flashback Drop)

Flashback Drop 允许您将之前删除的表(但不是截断的表)恢复到刚好删除它之前的状态,同时还会恢复所有索引以及任何触发器和权限。唯一的主键和非空约束也会被恢复,但不包括外键。 Flashba...
  • wym880124
  • wym880124
  • 2013年10月14日 11:39
  • 1276

PLSQL_闪回删除FlashBack Delete表误删除如何进行恢复(案例)

一、摘要 在PLSQL开发时,有时候会遇到对表中数据的误删除,其实遇到这种情况不需要紧张,如果问题较大,请DBA帮忙,如果只是小问题,只需自己处理,利用flashback闪回操作即可,可可将表进行...
  • hdblocal
  • hdblocal
  • 2016年11月28日 13:52
  • 523

flashback table 闪回表到指定时间或SCN

闪回表特性: 闪回表是对闪回查询的增强。 可以在线操作, 恢复到指定时间点或SCN的任何数据 自动恢复相关属性,如索引,触发器,约束 满足分布式的一致性? 满足数据一致性,所有相关对象将自动一致。 闪...
  • q947817003
  • q947817003
  • 2013年09月11日 20:45
  • 3320

闪回删除和管理回收站

当你删除一张表时,数据库不会立即删除与表现关联的空间。数据库重命名表,并将关联的对象放置在回收站。然而,在表被错误删除的情况下,可以在稍后的时间里进行恢复。这种结构叫做闪回删除, FLASHBACK ...
  • chiclewu
  • chiclewu
  • 2013年11月20日 21:52
  • 908
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:闪回(Flashback)
举报原因:
原因补充:

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