Oracle闪回技术(Flashback)

SQL> flashback table scott.emp to scn 1086000;  

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

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.

闪回删表的办事原理是:当“drop
table”命令执行时,表及其索引并从未被真正删除,其所占空间只是分配给了另一个数据库对象:回收站对象,本质上一定于重命名。注意:表空间在电动增进的下压力下会依据先入先出的规则将回收站对象的半空中分配给急需空间的段,在将回收站对象耗尽在此以前数据文件是不会自行增加的。

  1. 将7788号职员和工人的薪水修改为16分钟在此以前的值
  1. 只要表名重复,则闪回时依据后入先出的条件。

  2. 闪回时可指明被还原的回收站对象

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

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

譬如说,将闪回情势会话定格在16分钟前:

闪回删表指的是吊销“DROP TABLE”的机能。

叁 、 闪回查询(Flashback
Query)

  1. 可禁止使用回收站成效

一经查询完成,可调用disable存款和储蓄进程关闭闪回会话方式。

依照《临危不乱:Oracle 11g数据库复苏技术》整理

  1. 删去当前用户回收站的具有指标

闪回版本查询能够贯通一定长度的时辰窗口,通过只利用一条查询命令就能再次回到该时间窗口内分化时间点上的多少。

闪回版本查询

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

  1. 询问具体SCN

透过“versions
between”,大家得以观望在1肆分钟之内,7788号职员和工人的薪俸用五个值,表明共有二个工作对其进展过修改。为了能看清那些业务的先后顺序,能够在查询列表中采纳伪字段。如下所示:

处在闪回会话情势时,执行dml和ddl将报错

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

SQL> exec dbms_flashback.disable;

SQL> flashback table scott.emp to before drop;

那会儿若访问SYSDATE、SYSTIMESTAMP等日子函数,它们的重回值仍是当下值,而不是1四分钟以前的值。

  1. 闪回到现实时间
  1. 询问7788号职员和工人在5分钟前的薪酬

SQL> purge recyclebin;

  1. 询问7788号职员和工人在现实日子的工薪

利用dbms_flashback包的enable_at_time或enable_at_scn存款和储蓄进程锁定2个对话级别的闪回时间目的,即进入闪回方式,随后的查询命令能够简不难单“as
of”,直到调用dbms_flashback_disable存款和储蓄过程将其倒闭截止。

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

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

闪回时间点查询

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

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

  SQL> alter table dept enable row movement;

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

其中,versions_xid为事务号versions_startscn和versions_endscn分别是事情开端时的SCN和修改该行的下二个事务初叶时的SCN。首尾衔接那多个字段的SCN号很不难得出真实的改动顺序:四千,四千,一千0,最终是2000.

利用dbms_flashback包

闪回表是使用UNDO表空间的撤消数据,所以能把表闪回到多长时间以前饱受undo_retention,UNDO表空间的数据文件是不是运转自动增进效率,是还是不是设置guarantee等二种因素的震慑。

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

  1. 闪回到10分钟此前
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

例如,首先通过3个业务将7788号职员和工人的工钱进行修改。其值原来是陆仟,然后是五千,然后是一千0,最后是三千.

一、 闪回表(Flashback Table)

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

SQL> exec dbms_flashback.enable_at_time(systimestamp – interval
’15’ minute);

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

–关于SCN与时光戳间如何转移可参考Oracle碎碎念第31条

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

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;

利用“as of”子句

近来展开询问,注意,此时查询的是16分钟此前的表。

闪回技术有闪回表、闪回删除、闪回查询、闪回事情查询、闪回事情、闪回数据库、闪回数据归档。其中,闪回查询、闪回事情查询用来“观看”过去;闪回数据归档并不是1个独自的功效,其效劳是扩展闪回查询的日子窗口;闪回表、闪回删表能够以表为单位“回到”过去;闪回事情可以以工作为单位“回到”过去;闪回数据库能够以数据库为单位“回到”过去。

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

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

(1)被闪回的表必须启用行活动功效

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

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

② 、 闪回删表(Flashback Drop)

推行闪回版本查询

SQL> select * from emp as of scn 1095000;

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

(4)SYS用户的别样表不可能接纳此意义。

相关文章