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’);

  1. 闪回到10分钟之前

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

  1. 将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;

  1. 倘若表名重复,则闪转时仍后符合先出底准绳。

  2. 闪回时只是指明被恢复的回收站对象

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

闪回删表的行事原理是:当“drop
table”命令执行时,表和其索引并没于真正去,其所占空间只是分配为了外一个数据库对象:回收站对象,本质上一对一给更命名。注意:表空间在机关增长之下压力下会按照事先抱先出底条条框框以回收站对象的长空分配为需要空间的段,在用回收站对象耗尽之前数据文件是匪会见自动增长之。

  1. 但禁用回收站功能

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

  1. 抹时用户回收站的装有目标

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;

  1. 查询7788号员工在五分钟前之工钱

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

  1. 询问具体SCN

SQL> select * from emp as of scn 1095000;

  1. 将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
----------
      4000

SQL> 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 emp
  2  versions between timestamp(systimestamp -interval '15' minute) and maxvalue
  3  where empno=7788;

EMPNO         SAL
----- ----------
 7788        3000
 7788       10000
 7788        5000
 7788        4000

由此“versions
between”,我们可以看出于15分钟之内,7788号员工的工资用4单价,说明共有3只工作对其开展过修改。为了能看清这些事情之先后顺序,可以在查询列表中应用伪字段。如下所示:

SQL> select
  2  versions_xid,versions_startscn,versions_endscn,
  3  empno,sal
  4  from emp 
  5  versions between timestamp(systimestamp - interval '15' minute) and maxvalue
  6  where empno=7788
  7  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数据库恢复技术》整理

相关文章