闪回技术有闪回表、闪回删除、闪回查询、闪回事务查询、闪回事务、闪回数据库、闪回数据归档。其中,闪回查询、闪回事务查询用来“观察”过去;闪回数据归档并不是一个独立的功能,其功能是扩展闪回查询的时间窗口;闪回表、闪回删表能够以表为单位“回到”过去;闪回事务能够以事务为单位“回到”过去;闪回数据库能够以数据库为单位“回到”过去。

一、 闪回表(Flashback Table)

闪回表是利用UNDO表空间的撤销数据,所以能把表闪回到多久之前受到undo_retention,UNDO表空间的数据文件是否启动自动增长功能,是否设置guarantee等三种因素的影响。

1. 闪回到具体时间

SQL> flashback table scott.emp to timestamp to_timestamp(‘2014-09-16 04:32:00‘,‘yyyy-mm-dd hh24:mi:ss‘);

2. 闪回到10分钟之前

SQL> flashback table scott.emp to timestamp(systimestamp-interval ‘10‘ minute);

3. 将scott.emp闪回到SCN为1086000的时候

SQL> flashback table scott.emp to scn 1086000;

--关于SCN与时间戳间如何转换可参看Oracle碎碎念第31条

4. 将scott.emp和scott.dept两张表同时闪回到SCN为1086000的时候(主要用于有外键约束的表)

SQL> flashback table scott.emp,scott.dept to scn 1086000;

使用闪回表注意如下事项:

(1)被闪回的表必须启用行移动功能

SQL> alter table dept enable row movement;

(2)“FLASHBACK TABLE”命令的执行者必须有“FLASHBACK ANY TABLE”系统权限或者在被闪回的表上具有“FLASHBACK”对象权限。

(3)“FLASHBACK TABLE”属于DDL命令,隐式提交。

(4)SYS用户的任何表无法使用此功能。

二、 闪回删表(Flashback Drop)

闪回删表指的是撤销“DROP TABLE”的效果。

1. 闪回被删掉的scott.emp表

SQL> flashback table scott.emp to before drop;

2. 表被删掉后,又新建了一个同名表,如果试图用上述命令闪回原表,则会报ORA-38312: original name is used by an existing object错误,可重新命名。

SQL> flashback table test to before drop rename to test1;

3. 如果表名重复,则闪回时遵循后入先出的原则。

4. 闪回时可指明被恢复的回收站对象

SQL> flashback table "BIN$AyId7ZbBjWngUKjADQIIuA==$0" to before drop;

闪回删表的工作原理是:当“drop table”命令执行时,表及其索引并没有被真正删除,其所占空间只是分配给了另一个数据库对象:回收站对象,本质上相当于重命名。注意:表空间在自动增长的压力下会按照先入先出的规则将回收站对象的空间分配给需要空间的段,在将回收站对象耗尽之前数据文件是不会自动增长的。

5. 可禁用回收站功能

SQL> alter system set recyclebin=‘OFF‘ scope=spfile;

6. 删除当前用户回收站的所有对象

SQL> purge recyclebin;

三、 闪回查询(Flashback Query)

以表为单位查询过去的数据称为闪回查询,主要有两种方式:1. 闪回时间点查询。利用select命令的“as of”子句与PL/SQL包dbms_flashback在过去的一个时间点上的查询。2. 闪回版本查询。利用select命令的“versions between”子句在过去的一段时间范围内的查询。

闪回时间点查询

利用“as of”子句

1. 查询7788号员工在具体时间的工资

SQL> select sal from emp as of timestamp to_timestamp(‘2014-09-16 10:02:30‘,‘yyyy-mm-dd,hh24:mi:ss‘) where empno=7788;

2. 查询7788号员工在五分钟前的工资

SQL> select sal from emp as of timestamp (systimestamp - interval ‘5‘ minute) where empno=7788;

3. 查询具体SCN

SQL> select * from emp as of scn 1095000;

4. 将7788号员工的工资修改为15分钟之前的值

SQL> update emp set sal=(select sal from emp as of timestamp(systimestamp - interval ‘15‘ minute) where empno=7888) where empno=7788;

利用dbms_flashback包

利用dbms_flashback包的enable_at_time或enable_at_scn存储过程锁定一个会话级别的闪回时间目标,即进入闪回模式,随后的查询命令可以省略“as of”,直到调用dbms_flashback_disable存储过程将其关闭为止。

比如,将闪回模式会话定格在15分钟前:

SQL> exec dbms_flashback.enable_at_time(systimestamp - interval ‘15‘ minute);

现在进行查询,注意,此时查询的是15分钟之前的表。

SQL> select sal from emp where empno=7788;   --忽略了“as of”子句

此时若访问SYSDATE、SYSTIMESTAMP等日期函数,它们的返回值仍是当前值,而不是15分钟之前的值。

处于闪回会话模式时,执行dml和ddl将报错

SQL> update emp set sal=4000 where empno=7788;

update emp set sal=4000 where empno=7788

*

ERROR at line 1:

ORA-08182: operation not supported while in Flashback mode

如果查询完毕,可调用disable存储过程关闭闪回会话模式。

SQL> exec dbms_flashback.disable;

闪回版本查询

闪回版本查询可以贯穿一定长度的时间窗口,通过只使用一条查询命令就能返回该时间窗口内不同时间点上的数据。

比如,首先通过3个事务将7788号员工的工资进行修改。其值原来是4000,然后是5000,然后是10000,最后是3000.

SQL> select sal from emp where empno=7788;

SAL----------

4000SQL> update emp set sal=5000 where empno=7788;1row updated.

SQL> commit;Commitcomplete.

SQL> update emp set sal=10000 where empno=7788;1row updated.

SQL> commit;Commitcomplete.

SQL> update emp set sal=3000 where empno=7788;1row updated.

SQL> commit;Commit complete.

执行闪回版本查询

SQL> select empno,sal fromemp2 versions between timestamp(systimestamp -interval ‘15‘ minute) andmaxvalue3 where empno=7788;

EMPNO SAL----- ----------

7788 3000

7788 10000

7788 5000

7788 4000

通过“versions between”,我们可以看到在15分钟之内,7788号员工的工资用4个值,说明共有3个事务对其进行过修改。为了能看清这些事务的先后顺序,可以在查询列表中使用伪字段。如下所示:

SQL> select

2versions_xid,versions_startscn,versions_endscn,3empno,sal4 fromemp5 versions between timestamp(systimestamp - interval ‘15‘ minute) andmaxvalue6 where empno=7788

7 order by 2nulls first;

VERSIONS_XID VERSIONS_STARTSCN VERSIONS_ENDSCN EMPNO SAL---------------- ----------------- --------------- ----- ----------

060002000F030000 1097139 7788 400002001100FB0200001097139 1097148 7788 500003001D001E0300001097148 1097153 7788 10000

0900170000030000 1097153 7788 3000

其中,versions_xid为事务号versions_startscn和versions_endscn分别是事务开始时的SCN和修改该行的下一个事务开始时的SCN。首尾衔接这两个字段的SCN号很容易得出真实的修改顺序:4000,5000,10000,最后是3000.

参考:《临危不惧:Oracle 11g数据库恢复技术》

原文:http://www.cnblogs.com/ivictor/p/3975339.html

oracle闪回15分钟前,Oracle闪回技术(Flashback)相关推荐

  1. 百度如何能实时检索到15分钟前新生成的网页?--转

    2017-03-01 58沈剑 架构师之路 一.缘起 <深入浅出搜索架构(上篇)>详细介绍了前三章: (1)全网搜索引擎架构与流程 (2)站内搜索引擎架构与流程 (3)搜索原理与核心数据结 ...

  2. oracle timestamp计算两分钟前_阿里数据库真的超过Oracle了么?

    数据库从业人士对此表示很冷静. 文 | 张帅 国庆期间,一则"阿里数据库成绩刷新Oracle尘封九年记录"消息蔓延,让不少行外人士为之一振.事情是这样的:蚂蚁金服自主研发的金融级分 ...

  3. oracle根据当前月份往前,oracle获取系统日期--当前时间+前一天+当前月+前一个月...

    目录 获取系统日期: SYSDATE 当前日: 前一天: 前一天转换为日期格式: 前一个月日期: 前一个月: 后一个月转换为字符串: 补充:格式化日期 获取系统日期: SYSDATE 当前日: sel ...

  4. Oracle闪回技术(Flashback)

    闪回技术有闪回表.闪回删除.闪回查询.闪回事务查询.闪回事务.闪回数据库.闪回数据归档.其中,闪回查询.闪回事务查询用来"观察"过去:闪回数据归档并不是一个独立的功能,其功能是扩展 ...

  5. oracle时间戳找回数据库,【备份恢复】 闪回数据库(三) 基于时间戳闪回数据库...

    1.创建测试表,并插入测试数据 SCOTT@PROD1>create table fbdb_time as select * from fbdb_scn where 1=2; Table cre ...

  6. 买进最佳时间:开盘后15分钟与闭市前15分钟

    这个时间段一般都会大涨大跌. 一.买进最佳时间:开盘后15分钟与闭市前15分钟. 开盘前,主力经过研究国际国内最新经济信息和国外期货.股市的运行情况,将对大势有一个综合判断,然后做出所运作股票的计划, ...

  7. MySQL实现每分钟扫描一次数据库,查找16分钟前的记录和15分钟 以前-16分钟的记录

    描述 每分钟扫描一次数据库,查找15分钟 以前-16分钟的记录. 先从send_ orders获取符合条件的记录,并提取master_ id字段的值与order_id的值 然后从master has_ ...

  8. oracle 闪回 多长时间,Oracle闪回

    select t.NAME,t.CURRENT_SCN,t.FLASHBACK_ON From v$database t; --闪回设置 --mount状态开启flashback alter data ...

  9. oracle 闪回空间爆满,基于ORA-19815闪回空间爆满问题的处理方法

    下面小编就为大家分享一篇基于ORA-19815闪回空间爆满问题的处理方法,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 闪回区爆满问题也是经常会遇到的问题,最关键的是闪回设置大小以及 ...

最新文章

  1. 信而泰推出100G多速率测试模块:填补中国通信产业链短板
  2. EPROCESS ETHREAD简介
  3. Jenkins真正地完整迁移流程(亲测有效)
  4. 3D特征:关于HFM和HBB
  5. ASP.NET 视频截图功能的C#代码
  6. Spring Boot整合Redis——自定义RedisSerializer
  7. Python print和pprint两者的区别
  8. python数据结构之字典(dict)——超详细
  9. html链接phpayadmain数据库,无法从Xamain.iOs和Xamarin.Android使用C#连接到MySql
  10. java程序中oracle回滚,Oracle的DDL语句不能回滚(直接提交)
  11. 计算机组装主板,组装电脑如何选择合适的主板 组装电脑选择合适主板介绍【详解】...
  12. word目录怎么自动生成?写作人必学的小技巧
  13. unity3d Space Game太空射击游戏资源包
  14. 电子工程师的自我修养 - 恒流源电路分析
  15. Effective java 读书笔记
  16. 每一个都能笑抽的 39 个奇葩代码注释
  17. 【Trailhead题目解析】Prepare your salesforce org for users - 1Set Up the Exchange Rate
  18. ssms管理linux数据库,SQL Server 2017 Developer的下载、安装、配置及SSMS的下载安装配置(图文教程详解)...
  19. 亚马逊echo中国使用_我需要Amazon Echo才能使用Alexa吗?
  20. plt.plot() marker 一览表 (散点图)

热门文章

  1. 全国计算机一级会考分类汇总吗,全国计算机一级考试小技巧
  2. python办公自动化pdf下载,你们都用Python实现了哪些办公自动化?
  3. tedu斌-Web笔记2112-6
  4. java基于springboot+vue的汽车租赁系统-在线租车
  5. mysql表格查询方法
  6. php答题闯关游戏,陌陌新上线“答题闯关”对战小游戏 涨知识得现金红包
  7. Intel 变天了!新 CEO 正式上任:曾担任 Intel 首个 CTO,已吸引 3 位技术大神加盟...
  8. 如何使用ChatGPT帮助孩子辅导作业?
  9. 联合国旗舰报告《全球生物多样性展望》发布:面对最糟糕的生物多样性保护成绩单,人类该何去何从?...
  10. 为什么程序下在其他盘,c盘空间还是增多了?appdata文件夹有什么用途?