Oracle闪回技术(Flashback)
闪回技术有闪回表、闪回删除、闪回查询、闪回事务查询、闪回事务、闪回数据库、闪回数据归档。其中,闪回查询、闪回事务查询用来“观察”过去;闪回数据归档并不是一个独立的功能,其功能是扩展闪回查询的时间窗口;闪回表、闪回删表能够以表为单位“回到”过去;闪回事务能够以事务为单位“回到”过去;闪回数据库能够以数据库为单位“回到”过去。
一、 闪回表(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;1 row updated.SQL> commit;Commit complete.SQL> update emp set sal=10000 where empno=7788;1 row updated.SQL> commit;Commit complete.SQL> update emp set sal=3000 where empno=7788;1 row updated.SQL> commit;Commit complete.
执行闪回版本查询
SQL> select empno,sal from emp2 versions between timestamp(systimestamp -interval '15' minute) and maxvalue3 where empno=7788;EMPNO SAL ----- ----------7788 30007788 100007788 50007788 4000
通过“versions between”,我们可以看到在15分钟之内,7788号员工的工资用4个值,说明共有3个事务对其进行过修改。为了能看清这些事务的先后顺序,可以在查询列表中使用伪字段。如下所示:
SQL> select2 versions_xid,versions_startscn,versions_endscn,3 empno,sal4 from emp 5 versions between timestamp(systimestamp - interval '15' minute) and maxvalue6 where empno=77887 order by 2 nulls first;VERSIONS_XID VERSIONS_STARTSCN VERSIONS_ENDSCN EMPNO SAL ---------------- ----------------- --------------- ----- ---------- 060002000F030000 1097139 7788 4000 02001100FB020000 1097139 1097148 7788 5000 03001D001E030000 1097148 1097153 7788 10000 0900170000030000 1097153 7788 3000
其中,versions_xid为事务号versions_startscn和versions_endscn分别是事务开始时的SCN和修改该行的下一个事务开始时的SCN。首尾衔接这两个字段的SCN号很容易得出真实的修改顺序:4000,5000,10000,最后是3000.
基于《临危不惧:Oracle 11g数据库恢复技术》整理
Oracle闪回技术(Flashback)相关推荐
- oracle闪回15分钟前,Oracle闪回技术(Flashback)
闪回技术有闪回表.闪回删除.闪回查询.闪回事务查询.闪回事务.闪回数据库.闪回数据归档.其中,闪回查询.闪回事务查询用来"观察"过去:闪回数据归档并不是一个独立的功能,其功能是扩展 ...
- Oracle闪回技术
Oracle闪回技术 我们都清楚的知道,当我们数据库中的数据删除或者更新之后,数据很难再还原回来,在没有了解闪回技术之前,就觉得是没办法还原了,这样子会付出很大的代价. 现在我来总结一下闪回技术的 ...
- Oracle 闪回技术详解
概述 闪回技术是Oracle强大数据库备份恢复机制的一部分,在10g的时候就被推出一直延续到现在.在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成 ...
- Oracle 闪回特性(FLASHBACK DROP RECYCLEBIN)
--============================================== -- Oracle 闪回特性(FLASHBACK DROP & RECYCLEBIN) --= ...
- 【转载】oracle闪回技术详解之闪回drop(神奇的flashback)
写在前面:删库跑路,相信这是绝大多数程序员会经常听到的一个词.俗话说:常在河边走,哪有不湿鞋,作为经常和数据打交道的程序员也好,运维实施也好,有时难免会出现数据误删除,误操作等情况.如果你是一个ora ...
- oracle flash_back oracle闪回技术详解,oracle flashback 闪回技术实例
oracle flashback 闪回技术实例 相关操作 1.DBA必须设定undo保持力足够大以能够重构需要闪回的数据 ALTER SYSTEM SET UNDO_RETENTION=; secon ...
- oracle闪回技术详解之闪回drop(神奇的flashback)
写在前面:删库跑路,相信这是绝大多数程序员会经常听到的一个词.俗话说:常在河边走,哪有不湿鞋,作为经常和数据打交道的程序员也好,运维实施也好,有时难免会出现数据误删除,误操作等情况.如果你是一个ora ...
- Oracle 闪回技术详解(flashback)
文章目录 1 概述 2 实例说明 2.1 闪回查询 2.2 闪回版本查询 2.3 闪回事务查询 2.4 闪回表 2.5 闪回删除 3 扩展 1 概述 为了使 Oracle 数据库从误操作中迅速地恢复, ...
- Oracle闪回技术详解
Oracle的闪回技术提供了一组功能,可以访问过去某一时间的数据并从人为错误中恢复.闪回技术是Oracle 数据库独有的,支持任何级别的恢复,包括行.事务.表和数据库范围.使用闪回特性,您可以查询以前 ...
最新文章
- Linux之切换目录命令
- hdu 3579(中国剩余定理非互质)
- Java 7 – NIO文件革命
- Istio调用链埋点原理剖析—是否真的“零修改”分享实录
- 如何抓获JVM crash的幕后黑手
- Windows Server2012虚拟内存设置
- vector的学习(系统的学习)
- VFP9 连接mysql代码示例
- 2014计算机三级网络,2014计算机三级网络技术知识点.doc
- sap事务代码_SAP财务常用的MM模块事务代码清单
- ABB ACS 510 1.5-5.5kw驱动板图纸 PDF格式
- 《演讲的力量》TED主席和首席教练教你演讲的基本技巧
- DAX:RELATED 和 RELATEDTABLE
- index函数c语言,C语言数据结构中定位函数Index的使用方法
- 三分钟解决文档编辑难题-【文档编辑命令- cat echo vi/vim tail rmdir 】
- 神经网络系统的软件实现,人工智能神经网络系统
- 通配符证书配置Exchange2016 POP、IMAP加密模式
- AES-128 加密算法
- 【收集】NLP语料库数据集+持续更新
- 回归算法以及源码分享