--==========================================================
-- Oracle 闪回特性(Flashback Version、Flashback Transaction)
--==========================================================
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为的记录后,更新其职务,然后再删除该记录,最后再次插入该记录
flasher@ORCL>create table tb1 tablespace users as select empno,ename,job,deptno from scott.emp; --创建表tb1
flasher@ORCL> insert into tb1 values(1000,'Jack','Clerk',20); --插入记录
flasher@ORCL> commit; --提交事务
flasher@ORCL> update tb1 set job='Manager' where empno=1000; --将职务更新为Manager
flasher@ORCL> commit; --提交事务
flasher@ORCL> delete from tb1 where empno=1000; --删除该记录
flasher@ORCL> commit; --提交事务
flasher@ORCL> insert into tb1 values(1000,'Jack','President',20); --重新插入该记录
flasher@ORCL> commit; --提交事务
3.使用Version Query(闪回版本查询)
--通过使用versions关键字来获得版本信息
flasher@ORCL> 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 --记录被修改的终止时间
--也可以修改查询的条件来获取更多不同的版本,如下查询则为查询该记录一个小时以内的不同版本
flasher@ORCL> 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角色具有该权限
下面演示基于事务的闪回示例
flasher@ORCL> create table tb2 tablespace users as select empno,ename,sal,deptno from scott.emp; --创建表tb2
flasher@ORCL> insert into tb2 select 9999,'Robinson',3000,50 from dual; --插入新记记录
flasher@ORCL> commit --提交事务一
flasher@ORCL> select * from tb2 where empno=9999;
EMPNO ENAME SAL DEPTNO
----- -------- --------- ------
9999 Robinson 3000.00 50
flasher@ORCL> update tb2 set sal=sal+500 where empno=9999; --更新记录
flasher@ORCL> commit; --提交事务二
flasher@ORCL> update tb2 set deptno=20 where empno=9999; --再次更新记录
flasher@ORCL> commit; --提交事务三
flasher@ORCL> 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为最早的事务
flasher@ORCL> 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';
flasher@ORCL> 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语句。
3.闪回中不能对DDL语句进行闪回,即闪回仅仅支持DML语句。
四、更多参考
有关闪回特性请参考
Oracle 闪回特性(FLASHBACK DATABASE)
Oracle 闪回特性(FLASHBACK DROP & RECYCLEBIN)
Oracle 闪回特性(Flashback Query、Flashback Table)
有关基于用户管理的备份和备份恢复的概念请参考:
Oracle 冷备份
Oracle 热备份
Oracle 备份恢复概念
Oracle 实例恢复
Oracle 基于用户管理恢复的处理(详细描述了介质恢复及其处理)
有关RMAN的恢复与管理请参考:
RMAN 概述及其体系结构
RMAN 配置、监控与管理
RMAN 备份详解
RMAN 还原与恢复
有关Oracle体系结构请参考:
Oracle 实例和Oracle数据库(Oracle体系结构)
Oracle 表空间与数据文件
Oracle 密码文件
Oracle 参数文件
Oracle 数据库实例启动关闭过程
Oracle 联机重做日志文件(ONLINE LOG FILE)
Oracle 控制文件(CONTROLFILE)
Oracle 归档日志
分享到:
相关推荐
Oracle 闪回特性 FLASHBACK & RECYCLEBIN Flashback 系列是 Oracle 数据库中的一组功能强大且实用的闪回机制,旨在帮助数据库管理员和开发者快速恢复数据库中的各种对象,包括表、数据、事务等。Flashback 系列的...
"Oracle 闪回(Flashback)技术" Oracle 闪回(Flashback)技术是 Oracle 数据库提供的一系列人为错误更正技术,用于快速恢复逻辑误操作。闪回技术从 Oracle 9i 版本开始,逐步发展到 Oracle 11g 版本,成为数据库...
"Oracle闪回(Flashback)技术" Oracle闪回(Flashback)技术是Oracle数据库提供的一系列人为错误更正技术,旨在使数据库从任何逻辑误操作中迅速恢复。该技术从Oracle 9i版本的闪回查询开始,在Oracle 10g版本中...
Oracle闪回特性是Oracle数据库提供的一种强大的数据恢复和时间旅行功能,它允许用户查看和恢复到数据库的某个历史状态,而无需依赖传统的备份和恢复过程。这一特性在故障排查、误操作恢复以及历史数据分析等方面有着...
Oracle 闪回(Flashback)技术是Oracle数据库提供的一种强大工具,主要用于数据恢复和时间点一致性查询。这一技术的核心在于Undo Segment,它记录了数据库中事务的撤销信息。Oracle 10g引入了多种闪回功能,包括...
flashback(数据恢复).txt"以及"oracle_10g_flashback.txt"这三份文档可能提供了一个全面的概述,包括Flashback日志、闪回数据库(Flashback Database)、闪回事务查询(Flashback Transaction Query)和闪回版本查询...
Oracle闪回技术是Oracle数据库中一项非常重要的特性,它主要用于逻辑错误的恢复,而非物理损坏的修复。这项技术可以帮助数据库管理员在遇到逻辑错误的情况下,比如误删数据或者更新错误等,能够迅速地恢复到错误发生...
8. **闪回版本查询(Flashback Version Query)** 使用`DBA_HISTORY.FLASHBACK_VERSIONS`视图,可以查看行的历史版本,这对于找出数据何时何地被修改非常有用。 9. **闪回错误(Flashback Error)** 当发生错误时...
**Oracle Flashback Database**是Oracle 10g中最强大的回闪特性之一。它可以通过简单的SQL命令将整个数据库恢复到某个特定的时间点或系统更改编号(SCN)。该命令可以指定目标时间为日期格式、SCN或者序列号等。 ```...
### Oracle Flashback 技术详解 #### 一、概述 Oracle Flashback 技术是一种能够帮助用户恢复数据库至某一特定时间点的技术。该技术利用了Undo Segment中的数据,因此受到`UNDO_RETENTION`参数的影响。为了启用...
在Oracle 10g中,Flashback技术包含了多个组件,如Flashback Database、Flashback Drop、Flashback Query(包括Flashback Query、Flashback Version Query和Flashback Transaction Query)以及Flashback Table。...
在Oracle 10g版本中,Flashback技术家族包括了多个成员,如Flashback Database、Flashback Drop、Flashback Query(又细分为Flashback Query、Flashback Version Query、Flashback Transaction Query)和Flashback ...
Oracle 10g Flashback是Oracle数据库10g版本中引入的一个强大特性,它为数据库管理员和用户提供了恢复数据到过去某个时间点的能力,而无需依赖传统的备份和恢复过程。这个功能极大地增强了数据库的可恢复性和灵活性...
闪回事务查询 (Flashback Transaction Query) - **定义**:通过执行反向的UNDO SQL语句来撤销事务。 - **应用场景**:当需要撤销一个或多个事务时,可以使用此功能来恢复数据到事务之前的状态。 #### 四、闪回...
**Oracle Flashback Version Query** 提供了一种查询表在特定时间段内所有版本的方法。这意味着用户不仅可以查看当前的表数据,还可以查看在过去某一时刻的数据。这对于审计、数据分析和问题诊断非常有用。 示例...
7. **闪回交易日志(Flashback Transaction Log)**:Oracle数据库的闪回交易日志提供了对事务级历史记录的访问,这对于事务级的审计和恢复非常关键。 在实现Oracle闪回技术时,必须确保数据库运行在归档模式下,...
这一技术在Oracle 10g版本中得到了极大的增强和发展,形成了一个完整的“Flashback家族”,其中包括Flashback Database、Flashback Drop、Flashback Query(进一步细分为Flashback Query、Flashback Version Query、...
三、 闪回版本 (Flashback Version) 闪回版本是 Oracle 闪回技术的一种,允许用户将表恢复到之前的某个版本。闪回版本操作可以根据时间点或 SCN 进行,需要启用自动撤销管理表空间和设置合适的撤销保留期限。 闪回...