`
insertyou
  • 浏览: 914123 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

--==========================================================

-- Oracle 闪回特性(Flashback VersionFlashback Transaction)

--==========================================================

Oracle闪回特性为数据的快速回复某一对象的特定数据提供了更多的便利。前面介绍了闪回的几种特性,包括flashback database

flashback drop flashback query flashback table 。接下来本文将介绍Flashback VersionFlashback 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 &amp; RECYCLEBIN

    Oracle 闪回特性 FLASHBACK & RECYCLEBIN Flashback 系列是 Oracle 数据库中的一组功能强大且实用的闪回机制,旨在帮助数据库管理员和开发者快速恢复数据库中的各种对象,包括表、数据、事务等。Flashback 系列的...

    第16章Oracle闪回(Flashback)技术.pptx

    "Oracle 闪回(Flashback)技术" Oracle 闪回(Flashback)技术是 Oracle 数据库提供的一系列人为错误更正技术,用于快速恢复逻辑误操作。闪回技术从 Oracle 9i 版本开始,逐步发展到 Oracle 11g 版本,成为数据库...

    Oracle闪回(Flashback)技术.pptx

    "Oracle闪回(Flashback)技术" Oracle闪回(Flashback)技术是Oracle数据库提供的一系列人为错误更正技术,旨在使数据库从任何逻辑误操作中迅速恢复。该技术从Oracle 9i版本的闪回查询开始,在Oracle 10g版本中...

    Oracle闪回特性

    Oracle闪回特性是Oracle数据库提供的一种强大的数据恢复和时间旅行功能,它允许用户查看和恢复到数据库的某个历史状态,而无需依赖传统的备份和恢复过程。这一特性在故障排查、误操作恢复以及历史数据分析等方面有着...

    oracle 闪回 flashback

    Oracle 闪回(Flashback)技术是Oracle数据库提供的一种强大工具,主要用于数据恢复和时间点一致性查询。这一技术的核心在于Undo Segment,它记录了数据库中事务的撤销信息。Oracle 10g引入了多种闪回功能,包括...

    flashback——oracle

    flashback(数据恢复).txt"以及"oracle_10g_flashback.txt"这三份文档可能提供了一个全面的概述,包括Flashback日志、闪回数据库(Flashback Database)、闪回事务查询(Flashback Transaction Query)和闪回版本查询...

    Oracle 闪回技术详解

    Oracle闪回技术是Oracle数据库中一项非常重要的特性,它主要用于逻辑错误的恢复,而非物理损坏的修复。这项技术可以帮助数据库管理员在遇到逻辑错误的情况下,比如误删数据或者更新错误等,能够迅速地恢复到错误发生...

    Oracle 误删除后的闪回方法

    8. **闪回版本查询(Flashback Version Query)** 使用`DBA_HISTORY.FLASHBACK_VERSIONS`视图,可以查看行的历史版本,这对于找出数据何时何地被修改非常有用。 9. **闪回错误(Flashback Error)** 当发生错误时...

    Oracle中有后悔药卖吗?Oracle中的回闪查询: Oracle 10g 回闪实验文档

    **Oracle Flashback Database**是Oracle 10g中最强大的回闪特性之一。它可以通过简单的SQL命令将整个数据库恢复到某个特定的时间点或系统更改编号(SCN)。该命令可以指定目标时间为日期格式、SCN或者序列号等。 ```...

    oracle flashback技术总结

    ### Oracle Flashback 技术详解 #### 一、概述 Oracle Flashback 技术是一种能够帮助用户恢复数据库至某一特定时间点的技术。该技术利用了Undo Segment中的数据,因此受到`UNDO_RETENTION`参数的影响。为了启用...

    Oracle_Flashback_技术_总结.pdf

    在Oracle 10g中,Flashback技术包含了多个组件,如Flashback Database、Flashback Drop、Flashback Query(包括Flashback Query、Flashback Version Query和Flashback Transaction Query)以及Flashback Table。...

    flashback闪回技术

    在Oracle 10g版本中,Flashback技术家族包括了多个成员,如Flashback Database、Flashback Drop、Flashback Query(又细分为Flashback Query、Flashback Version Query、Flashback Transaction Query)和Flashback ...

    Oracle 10g Flashback 概述

    Oracle 10g Flashback是Oracle数据库10g版本中引入的一个强大特性,它为数据库管理员和用户提供了恢复数据到过去某个时间点的能力,而无需依赖传统的备份和恢复过程。这个功能极大地增强了数据库的可恢复性和灵活性...

    oracle闪回

    闪回事务查询 (Flashback Transaction Query) - **定义**:通过执行反向的UNDO SQL语句来撤销事务。 - **应用场景**:当需要撤销一个或多个事务时,可以使用此功能来恢复数据到事务之前的状态。 #### 四、闪回...

    oracle 10g flashback(数据恢复)

    **Oracle Flashback Version Query** 提供了一种查询表在特定时间段内所有版本的方法。这意味着用户不仅可以查看当前的表数据,还可以查看在过去某一时刻的数据。这对于审计、数据分析和问题诊断非常有用。 示例...

    闪回oracle

    7. **闪回交易日志(Flashback Transaction Log)**:Oracle数据库的闪回交易日志提供了对事务级历史记录的访问,这对于事务级的审计和恢复非常关键。 在实现Oracle闪回技术时,必须确保数据库运行在归档模式下,...

    Oracle_Flashback家族

    这一技术在Oracle 10g版本中得到了极大的增强和发展,形成了一个完整的“Flashback家族”,其中包括Flashback Database、Flashback Drop、Flashback Query(进一步细分为Flashback Query、Flashback Version Query、...

    oracle flash

    三、 闪回版本 (Flashback Version) 闪回版本是 Oracle 闪回技术的一种,允许用户将表恢复到之前的某个版本。闪回版本操作可以根据时间点或 SCN 进行,需要启用自动撤销管理表空间和设置合适的撤销保留期限。 闪回...

Global site tag (gtag.js) - Google Analytics