4. Oracle 闪回特性(Flashback Version、Flashback Transaction)

转载自:https://blog.csdn.net/leshami/article/details/6112981

Oracle闪回特性为数据的快速回复某一对象的特定数据提供了更多的便利。前面介绍了闪回的几种特性,包括flashback database,flashback drop ,flashback query ,flashback table 。接下来本文将介绍Flashback Version与Flashback Transaction。

一、Flashback Version Query(闪回版本查询)

闪回版本查询指的是Oracle可以针对特定的对象来查询某一特定段内该对象的变化的所有情况,可以对此跟踪该对象的变更情况。
也可以根据特定的需要来将该对象修正到特定的时刻。回版本查询同闪回查询,闪回表一样,同样是使用了UNDO段的数据,
即数据变更的多次镜像,当UNDO段的数据由于空间压力而被清除,则产生无法闪回的情况。

--1.闪回版本查询语法,使用VERSIONS BETWEEN 关键字
SELECT <columns>
FROM <schema_name.table_name>
VERSIONS BETWEEN SCN <minimum_scn> AND <maximum_scn>   --基于SCN的版本查询
[WHERE <column_filter>]
[GROUP BY <non-aggregated_columns>]
[HAVING <group filter>
[ORDER BY <position_numbers_or_column_names>]

SELECT <columns>
FROM <schema_name.table_name>
VERSIONS BETWEEN timestamp to_timestamp(‘start_timestamp‘) and to_timestamp(‘end_timestamp‘) --基于TIMESTAMP的版本查询
[WHERE <column_filter>]
[GROUP BY <non-aggregated_columns>]
[HAVING <group filter>
[ORDER BY <position_numbers_or_column_names>]

--2.创建演示环境

--对表tb1作如下操作,插入empno为的记录后,更新其职务,然后再删除该记录,最后再次插入该记录
[email protected]>create table tb1 tablespace users as select empno,ename,job,deptno from scott.emp; --创建表tb1
[email protected]> insert into tb1 values(1000,‘Jack‘,‘Clerk‘,20);  --插入记录
[email protected]> commit;     --提交事务
[email protected]> update tb1 set job=‘Manager‘ where empno=1000;   --将职务更新为Manager
[email protected]> commit;     --提交事务
[email protected]> delete from tb1 where empno=1000;    --删除该记录
[email protected]> commit;    --提交事务
[email protected]> insert into tb1 values(1000,‘Jack‘,‘President‘,20);  --重新插入该记录
[email protected]> commit;     --提交事务

--3.使用Version Query(闪回版本查询)
--通过使用versions关键字来获得版本信息
[email protected]> select empno,ename,job,versions_xid xid,versions_startscn v_stcn,
  2  versions_endscn v_edcn,versions_operation v_ops
  3  from tb1 versions between scn minvalue and maxvalue where empno=1000;  

EMPNO ENAME    JOB       XID                  V_STCN     V_EDCN V_OPS
----- -------- --------- ---------------- ---------- ---------- -----
 1000 Jack     President 0A000C007E010000    1124320            I
 1000 Jack     Manager   09000C00EE010000    1124301            D
 1000 Jack     Manager   0A0009007E010000    1124282    1124301 U
 1000 Jack     Clerk     06000E00A9010000    1124245    1124282 I     

上面的示例通过为表tb1中插入一条empno=1000记录,并更新其职务,接下来对该记录进行删除,最后再次添加empno=1000,且职务不同的记录,可以看出对empno=1000所作的不同的修改被全部记录下来。

注意,一个事务中,如果多次对该记录进行了修改,则查询中仅仅显示最后一次提交的状态,我们可以通过使用versions between关键字来查询对该表中的某条特定记录修改的不同版本

查看不同的版本使用了类似于rowid的伪列
versions_xid          --记录指定版本的事务的唯一标识符
versions_startscn     --记录的起始SCN号
versions_endscn       --记录的终止SCN号
versions_operation    --记录的操作类型(DML操作,I表示插入,U表示更新,D表示删除)
versions_starttime    --记录被修改的起始时间
versions_endtime      --记录被修改的终止时间

--也可以修改查询的条件来获取更多不同的版本,如下查询则为查询该记录一个小时以内的不同版本
[email protected]> select empno,ename,job,versions_xid xid,versions_startscn v_stcn,
  2  versions_endscn v_edcn,versions_operation v_ops
  3  from tb1 versions between timestamp
  4  to_timestamp(systimestamp-1/24) and systimestamp where empno=1000;

  

二、Flashback Transaction Query(闪回事务查询)

闪回事务查询是对闪回版本查询的扩展。从某种程度上来说,闪回版本查询通常用于更细粒度的查询,如针对特定的记录。而闪回事务则是
针对某一事务进行闪回,是基于事务级别的。闪回事务查询通过查询视图flashback_transaction_query来获得某个或多个特定事务信息,
同时可以根据该视图中提供的undo_sql 列中的语句来反转事务,从而保证数据的完整性。
查询该视图需要具有select any transaction权限,默认情况下sys用户和DBA角色具有该权限

--下面演示基于事务的闪回示例

[email protected]> create table tb2 tablespace users as select empno,ename,sal,deptno from scott.emp;  --创建表tb2
[email protected]> insert into tb2 select 9999,‘Robinson‘,3000,50 from dual;  --插入新记记录
[email protected]> commit                                                   --提交事务一

[email protected]> select * from tb2 where empno=9999;

EMPNO ENAME          SAL DEPTNO
----- -------- --------- ------
 9999 Robinson   3000.00     50

[email protected]> update tb2 set sal=sal+500 where empno=9999;             --更新记录
[email protected]> commit;                                                  --提交事务二
[email protected]> update tb2 set deptno=20 where empno=9999;               --再次更新记录
[email protected]> commit;                                                  --提交事务三

[email protected]> select empno,ename,sal,deptno,versions_xid,versions_operation
  2  from tb2 versions between scn minvalue and maxvalue        --使用Version Query查询从中看到了三个事务
  3  where empno=9999;

     EMPNO ENAME             SAL     DEPTNO VERSIONS_XID     V
---------- ---------- ---------- ---------- ---------------- -
      9999 Robinson         3500         20 08000400C9010000 U
      9999 Robinson         3500         50 09001600BE010000 U
      9999 Robinson         3000         50 04002C00CA010000 I     -- I为最早的事务

[email protected]> select operation,undo_sql from flashback_transaction_query
  2  where xid=hextoraw(‘09001600BE010000‘);        --根据事务号获得一个反转该事务的DML语句

OPERATION  UNDO_SQL
---------- --------------------------------------------------------------------------------
UPDATE     update "FLASHER"."TB2" set "SAL" = ‘3000‘ where ROWID = ‘AAANUPAAGAAAAAkAAN‘; 

[email protected]> select operation,undo_sql from flashback_transaction_query
  2  where xid=hextoraw(‘08000400C9010000‘);        --根据事务号获得一个反转该事务的DML语句

OPERATION  UNDO_SQL
---------- --------------------------------------------------------------------------------
UPDATE     update "FLASHER"."TB2" set "DEPTNO" = ‘50‘ where ROWID = ‘AAANUPAAGAAAAAkAAN‘;           

从上面的两个查询中可以得到反转事务的DML语句,直接执行相应的反转语句,即可将事务变更到特定的状态,有点类似于回滚,但不
是执行了回滚操作。

三、总结

1.Flashback Version 多用于查看某条特定记录所有已提交的版本,包括每个版本的创建时间以及结束时间。
2.Flashback Transaction Query 多用于查看某个事务内的特定对象,可以通过视图flashback_transaction_query构造倒退事务的DML语句。

  

原文地址:https://www.cnblogs.com/llill/p/8628323.html

时间: 2024-10-04 04:11:02

4. Oracle 闪回特性(Flashback Version、Flashback Transaction)的相关文章

Oracle 闪回特性(FLASHBACK DATABASE)

--===================================== -- Oracle 闪回特性(FLASHBACK DATABASE) --===================================== 闪回技术通常用于快速简单恢复数据库中出现的认为误操作等逻辑错误,从闪回的方式可以分为基于数据库级别闪回.表级别闪回.事务 级别闪回,根据闪回对数据的影响程度又可以分为闪回恢复,闪回查询.闪回恢复将修改数据,闪回点之后的数据将全部丢失.而闪回查询则可 以查询数据被DML的

专题实验 oracle 闪回特性

在 oracle 9i 之前的版本中, 如果用户因为误操作 delete 或 update 并提交了, 那么恢复这些用户的操作错误是极其低效的. 为此, oracle 提供了闪回功能, 通过回退, 我们可以找回正确的数据. oracle 闪回查询特性 通过闪回查询我们可以按照时间戳或SCN来向前查询, 获取修改之前的数据镜像, 再通过insert等操作就可以恢复数据. 闪回查询一来于回滚段中存储的数据前镜像, 在oracle9i以前的版本中, 通常只要事务提交后, 前镜像数据就可以被覆盖, 空间

2.Oracle 闪回特性(FLASHBACK DROP &amp; RECYCLEBIN)

转载自:https://blog.csdn.net/leshami/article/details/6105327 FLASHBACK DROP 特性允许在不丢失任何数据库的情况下将指定的表恢复至其被删除的时间点,并保持数据库为当前状态.闪回删除并不是真正的删除表,而是把该表重命名并放入回收站,类似于Windows的回收站一样.当某个活动对象需要使用该表所占用的空间时,该表才会被真正删除.只要空间未被复用,该表即可恢复.本文主要讲述了FLASHBACK DROP特性以及闪回特性中回收站(RECY

Oracle闪回技术(Flashback)

闪回技术有闪回表.闪回删除.闪回查询.闪回事务查询.闪回事务.闪回数据库.闪回数据归档.其中,闪回查询.闪回事务查询用来“观察”过去:闪回数据归档并不是一个独立的功能,其功能是扩展闪回查询的时间窗口:闪回表.闪回删表能够以表为单位“回到”过去:闪回事务能够以事务为单位“回到”过去:闪回数据库能够以数据库为单位“回到”过去. 一. 闪回表(Flashback Table) 闪回表是利用UNDO表空间的撤销数据,所以能把表闪回到多久之前受到undo_retention,UNDO表空间的数据文件是否启

oracle闪回区介绍与监控

Oracle闪回区已经有了好几载的岁月了,在10g的时候就被推出一直延续到现在.Oracle闪回区是为RMAN准备的, 尽管抛开它我们可以同样完成数据库备份恢复的相关工作,Oracle依旧强烈推荐使用且它让其成为RMAN的组件之一. 这是因为该区域可集中简化管理所有和备份恢复工作,这也是其魅力所在.本文描述了Oracle闪回区的特性及其配置闪回区,监控闪回区等. 1.闪回区特性及其配置 --闪回区 就是分配一个特定的目录位置(普通磁盘上的目录或ASM磁盘)来存放一些特定的恢复文件,用于集中和简化

oracle闪回查询和闪回数据库

oracle闪回查询和闪回数据库 区别: 数据闪回查询,只需要启用撤销表空间自动管理回滚信息. 使用闪回删除技术和闪回数据库技术,需要启动回收站,闪回恢复区.(归档模式使用) 具体设置: ---cmd sqlplus nolog sys as sysdba hanatech 具体设置----数据闪回查询的设置: 查看撤销表信息undo: show parameter undo; 设置撤销表信息: alter system set undo_managerment=auto;设置为auto才可以使

Oracle 闪回

Oracle闪回技术 1.Flashback Database 2.Flashback Drop 3.Flashback Table 4.Flashback Query 1.Flashback Database(利用闪回日志恢复) 描述:Oracle Flashback Database特性允许通过SQL语句Flashback Database语句,让数据库前滚到当前的前一个时间点或者SCN.闪回数据库可以迅速将数据库回到误操作或人为错误的前一个时间点,如ctrl+Z操作,可以不利用备份就快速的

oracle闪回表详解

--- 说明闪回数据库 --- 使用闪回表将表内容还原到过去的特定时间点 --- 从删除表中进行恢复 --- 使用闪回查询查看截止到任一时间点的数据库内容 --- 使用闪回版本查询查看某一行在一段时间内的各个版本 --- 使用闪回事务查询查看事务处理历史记录或行 会还原表及其关联对象(如索引.约束条件.触发器等)中的数据. 所谓闪回表,就是将表里的数据回退到历史的某个时间点,比如回退到用户误删除数据之前的时间点,从而将误删除的数据恢复回来,在这个操作过程中,数据库仍然可用而且不需要额外的空间.

Oracle闪回技术详解

概述: 闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成).需要注意的是,闪回技术旨在快速恢复逻辑错误,对于物理损坏或是介质丢失的错误,闪回技术就回天乏术了,还是得借助于Oracle一些高级的备份恢复工具如RAMN去完成(这才是Oracle强大备份恢复机制的精髓所在啊)  撤销段(UNDO SEGMENT) 在讲闪回技术前,需要先了解Oracle中一个逻辑结构--撤销段.因为大部分闪回技术