Flashback Query

1、说明

flashback是oracle9i开始提供的特性。在9i中利用oracle查询多版本一致的特点,实现从回滚段中读取表一定时间内操作过的数据,可用来进行数据对比。或者修正意外提交造成的错误数据,该特性也被称为Flashback

Query。

分类:Flashback Query、Flashback Version

Query、Flashback Transaction Query。

2、分类说明

2.1 Flashback Query 是利用多版本读一致性的特性从UNDO表空间读取操作前的记录数据。

对V$tables、X$tables等的动态性能视图无效,不过对于dba_*、all_*、user_*等数据字典是有效的。该性能也完全支持访问远端数据库,比如:select

* from tbl@dblink as of scn

3600;的形式。

2.1.1多版本读一致性

不同的事物在写数据时,会将数据的前映像写入undo表空间,这样如果同时有其它事物查询该表数据,则可以通过undo表空间的前映像来构造所需的完整记录集,而不要等待写入的事物提交或回滚。

Flashback

query有多重方式构建查询记录集,记录集的选择范围可以基于时间或基于scn,甚至可以同时查询出记录在undo表空间中不同事物时的前映像。用法与标准查询非常类似,要通过Flashback

query查询undo中的撤销数据。最简单的方式只需要在标准查询语句的表名后面跟上as of timestamp(基于时间)或者 as

of scn(基于scn)即可。as of timestamp|scn的语法是自9iR2后才开始提供支持。

2.1.2 as of timestamp 的示例

alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

delete from su; commit; --用户误操作删除了表中的数据

select * from su;

select * from su as of timestamp sysdatte-5/1440;

--分别查询当前的数据和5分钟之前的数据;

insert into su select * from su as of timestamp sysdatte-5/1440;

--恢复5分钟之前删除的数据

as of timestamp的确易用,但是在某些情况下,建议使用as of scn的方法执行flashback

query,比如需要对多个相互有主外键约束的表进行恢复时,如果使用as of timestamp

的方式,可能会由于时间点不统一的缘故造成数据选择或插入失败,scn方式能确保记录的约束一致性。

2.1.3 As of scn 示例

查看scn:select dbms_flashback.get_system_change_numberr from

dual;

select

current_scn from v$database;

delete from su; commit; --用户误操作删除了表中的数据

select * from su;

select * from su as of scn 18487032218; --分别查询当前的数据和之前的数据;

insert into su select * from as of scn 18487032218;

--恢复之前的数据

2.1.4 scn和timestamp的关系

在oracle内部都是使用scn,即使指定的是as of timestamp

,oracle也会将其转化成scn,系统时间标记与scn之间存在一张报,即SYS下的SMON_SCN_TIME.

每隔5分钟,系统产生一次系统时间标记与scn的匹配并存入sys.smon_scn_tim表。该表记录了最近1440个系统实际那标记与scn的匹配记录,由于该表只维护了最经的1440条记录,因此如果使用as

of timestamp的方式则只能flashback 最近5天内的数据(系统不间断运行并无中断或关机重启之类操作的话)

注:这里不一定是1440

注意理解系统时间标记与scn

的每5 分钟匹配一次这句话,举个例子,比如scn:339988,339989 分别匹配08-05-3013:52:00 和2008-13:57:00,则当你通过as of timestamp 查询08-05-30

13:52:00 或08-05-30

13:56:59 这段时间点内的时间时,oracle

都会将其匹配为scn:339988

到undo

表空间中查找,也就说在这个时间内,不管你指定的时间点是什么,查询返回的都将是08-05-30 13:52:00 这个时刻的数据。

查询两者关系:select scn,to_char(time_dp,'yyyy-mm-dd hh24:mi:ss')from

sys.smon_scn_time;

2.1.5 flashback Query 函数、存储过程、包、触发器等对象

Flashback

Drop

可以闪回与表相关联的对象,如果是其他的对象,比如function、procdure、trigger等,这时候,就需要使用all_source表来进行Flashback

Query。

all_source:描述了当前用户可访问的存储对象的文本内容

DBA_user:描述了整个数据库所有的存储对象的文本内容

User_source:描述了属于当前用户下的所有的存储对象的文本内容

Column

Datatype

NULL

Description

OWNER

VARCHAR2(30)

NOT NULL

Owner of the object

NAME

VARCHAR2(30)

NOT NULL

Name of the object

TYPE

VARCHAR2(12)

Type of object: FUNCTION, JAVA SOURCE, PACKAGE, PACKAGE BODY,

PROCEDURE, TRIGGER, TYPE, TYPE BODY

LINE

NUMBER

NOT NULL

Line number of this line of source

TEXT

VARCHAR2(4000)

Text source of the stored object

如果我们误删除了某些对象,如procduce,就可以使用all_source表进行恢复

查看表结构:desc dba_source;

查看所有的type:select distinct type from dba_source;

基于timestamp的恢复语句:select text from dba_source as of

timestamp('XXX','XXX') where owner='XXX' and name='你删除的对象' order by

line;

2.2 Flashback version Query

相对Flashback Query只能看到某一点的对象状态,oracle 10g引入的flashback version

Query可以看到去过某个时间段内,记录是如何发生变化的,根据这个历史,DBA就可以快速的判断数据是在什么时间点发生了错误,进而恢复到之前的状态。

先看一个伪列ORa_rowscn,是oracle 10g新增的,暂且把他看做是记录最后一次修改时的scn,Flashback

version Query就是通过这个伪列啦跟踪出记录的变化历史。

SQL> select * from A;

ID

----------

2

1

3

4

SQL> insert into A values(5);

已创建 1 行。

SQL> select * from A;

ID

----------

2

1

3

4

5

SQL> commit;

提交完成。

SQL> select ora_rowscn, id from A;

ORA_ROWSCN ID

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

1098443 2

1098443 1

1098443 3

1098443 4

1098443 5

获取更多的历史信息

SQL>Select

versions_xid,versions_startscn,versions_endscn, DECODE(versions_operation,'I','Insert','U','Update','D','Delete',

'Original') "Operation", id from A versions between scn minvalue

and maxvalue;

或者

SQL>select xid,commit_scn,commit_timestamp,operation,undo_sql

from flashback_transaction_query q where q.xid in(select

versions_xid from B versions between scn 413946 and 413959);

VERSIONS_XID VERSIONS_STARTSCN VERSIONS_ENDSCN

Operatio ID

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

----------

05001A0054020000 1099482 Update 3

05001A0054020000 1099482 Delete

oracle查询flashback,【oracle】闪回flashback-10g-flashback query相关推荐

  1. oracle查询是否开启闪回,oracle开启闪回

    查看数据库是否是归档模式: SQL> show parameter db_flashback; NAME                                 TYPE         ...

  2. oracle 查询 历史数据,利用闪回查看Oracle表历史时刻数据

    利用闪回查看Oracle表历史时刻数据 1.查看表历史时刻数据 select * from tab_test AS OF TIMESTAMP to_timestamp( 利用闪回查看Oracle表历史 ...

  3. oracle flashback清理,Oracle的Flashback Drop闪回删除功能实践

    Oracle的Flashback Drop闪回删除功能给出我们一种误DROP删除表的便捷恢复方式,实现这种功能的原理是Oracle的"回收站"(RecycleBin)功能.注意,如 ...

  4. Oracle的回收站和闪回查询机制(二)

    上一篇中讲诉了Oracle中一些闪回查询(Flashback Query),这是利用回滚段信息来恢复一个或一些表到以前的一个时间点(一个快照).要注意的是,Flashback Query仅仅是查询以前 ...

  5. oracle数据库归档闪回,oracle数据库开归档闪回模式

    10G 归档相关 转:http://blog.163.com/z_rx/blog/static/2763637620077811571555/ 关于Oracle 10g 归档方式的讨论:关闭归档/启用 ...

  6. 【Flashback】Flashback Database闪回数据库功能实践

    [Flashback]Flashback Database闪回数据库功能实践 上一篇 / 下一篇  2012-04-07 21:16:40 / 个人分类:备份与恢复 查看( 278 ) / 评论( 2 ...

  7. oracle查询表唯一索引,oracle查询索引(oracle查看表索引)

    oracle查询索引(oracle查看表索引) 2020-07-24 11:01:26 共10个回答 选中表右键View然后查看index 通过PL/SQL可以直接查看某表是否建索引,通过SQL查询s ...

  8. oracle查有哪些数据库,oracle查询数据库(oracle查询所有数据库)

    oracle查询数据库(oracle查询所有数据库) 2020-07-24 12:01:17 共10个回答 PLsql查询工具便可查询 你指所有的表吗?如果你想查数据库中所有的表的话,可以查询sele ...

  9. oracle back log,11g闪回日志(flashback log)保留时间参数 - db_flashback_retention_target

    查看  DB_FLASHBACK_RETENTION_TARGET 参数是默认值 1440 (分钟), 即一天时间. 文档对于它的解释如下: DB_FLASHBACK_RETENTION_TARGET ...

  10. Oracle 临时表、数据闪回、查询被锁表、系统常用表、及常用操作

    目录 Oracle 系统常用表/视图 Oracle 临时表概述与创建 flashback  闪回表中被删除的数据 flashback  闪回整个被 drop 的表 查询 Oracle 中被锁定的表 查 ...

最新文章

  1. sql charindex函数
  2. 英国最新报告:40% AI公司其实没用任何AI技术
  3. ESXI上的vm虚拟机文件被锁定无法POWER ON的问题处理
  4. 完成这个例子,说出java中针对异常的处理机制。
  5. 帝国cms上传大图片分片大视频大文件webuploader插件
  6. 穹顶下业务流程管理失位
  7. 越过0到1的坎,卖好车开启1到10的路有难题?
  8. python 切片_全面解读Python高级特性切片
  9. 无服务器-仅仅是构建现代应用程序的一种方法?
  10. 【ESSD技术解读-01】 云原生时代,阿里云块存储 ESSD 快照服务如何被企业级数据保护所集成?
  11. ROBEL:谷歌推出低成本机器人训练平台
  12. python np.cos 转化为角度_postman接口用例转化为python自动化测试用例(三)
  13. 一张正面人脸照片,3D真人头像毫秒级重建。
  14. 【Tool】CRC8 实现基础与原理解析
  15. kali linux下的嗅探工具介绍
  16. 2015阿里天池大数据竞赛解题源码
  17. Excel·VBA单元格重复值标记颜色
  18. 我的世界java版的名字是独一无二吗_2018独一无二霸气网名,二字网名超拽霸气冷酷...
  19. 01读书笔记:《编码》-隐匿在计算机软硬件背后的语言(01-11章)
  20. CSS的三种使用方法

热门文章

  1. web字体名称、格式、在线格式转换工具
  2. 5.python字符串基础操作
  3. 实验一计算机组成原理,计算机组成原理 实验一
  4. 东莞警方:冻结团贷网银行资金31.1亿元 查封35套房产
  5. NetCMS CopyRight标签说明
  6. 新概念2 课文和单词(15)
  7. IIS FTP 上传文件550错误
  8. SEVER2003服务器上U盘不显示,windows 2000 server虚拟机不显示U盘和报错問題
  9. 学生版Intel Fortran
  10. ccf 认证 检测点查询(python)