关于oracle:Oracle闪回flashback

参考资料:Using Oracle Flashback Technology

Oracle 11g的新个性闪回操作

  • 闪回查问

    • 闪回查问
    • 闪回版本查问
    • 闪回事务查问
  • 闪回数据

    • 闪回表
    • 闪回删除
    • 闪回数据
    • 闪回归档

上面会别离介绍这些操作。在介绍这些操作之前先看下闪回个性是否开启。

<!–more–>

查看闪回个性是否启用

参考资料:

Configuring Your Database for Oracle Flashback Technology

关上或敞开oracle数据库的闪回性能步骤

确认数据库闪回个性曾经启用:v$database

SQL> select flashback_on from v$database;

FLASHBACK_ON
------------------
NO

如果闪回个性没有启用,则须要先启用闪回。

关上闪回的步骤:

SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database flashback on;
SQL> alter database open;

关上之后可再次查看闪回个性是否关上。只有关上了闪回个性,就能够进行闪回操作。

闪回查问

参考资料:Using Oracle Flashback Query (SELECT AS OF)

查问某一个历史工夫点的数据。

查问某个工夫点表中的数据——某个工夫点表中快照的数据。

SQL> create table t(x int , y int);

表已创立。

SQL> insert into t values(1,2);

已创立 1 行。

SQL> insert into t values(2,3);

已创立 1 行。

SQL>
SQL> commit;

提交实现。

SQL> select * from t;

         X          Y
---------- ----------
         1          2
         2          3

SQL> set time on
21:11:45 SQL> delete from t where x=1;

已删除 1 行。
21:12:11 SQL> commit;

提交实现。

21:12:18 SQL> select * from t;

         X          Y
---------- ----------
         2          3

21:12:21 SQL> select * from t as of timestamp to_timestamp('2016-03-21 21:11:45'
,'yyyy-mm-dd hh24-mi-ss');

         X          Y
---------- ----------
         1          2
         2          3

可见删除的数据曾经提交,然而还是能够闪回查问到之前工夫的数据。其中hh24示意能够用24小时制,否则只能小时不能超过12。至于为什么分钟用mi而不必mm,那是因为规定的格局就是mi,换成mm会显示和之前的月份mm抵触,换成其余的会显示日期格局无奈辨认。

基于SCN的闪回查问

如果有批改时候的SCN,那么就能够基于SCN进行闪回查问

21:18:34 SQL> select * from t;

         X          Y
---------- ----------
         2          3

21:20:36 SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    2891887

21:20:53 SQL> insert into t values(3,4);

已创立 1 行。

21:21:13 SQL> commit;

提交实现。

21:21:16 SQL> select * from t;

         X          Y
---------- ----------
         2          3
         3          4

21:21:26 SQL> select * from t as of scn 2891887;

         X          Y
---------- ----------
         2          3

可见基于SCN闪回查问失去插入数据之前表中的数据

闪回版本查问

闪回版本查问也就是flashback versions query。

  • See all versions of a row between two times
  • See transactions that changed the row

一个时间段内的某一行的所有版本,以及扭转该行的所有事务。

参考资料:

Using Oracle Flashback Version Query

闪回版本查问与闪回事务查问

闪回事务查问

闪回事务查问也即是flashback trasaction query

  • See all changes made by a transaction

闪回一个事务对数据的所有扭转。

参考资料:

Using Oracle Flashback Transaction Query

闪回版本查问与闪回事务查问

闪回表

将表闪回到历史的某个时刻。

SQL> create table t(id int);

表已创立。

SQL> insert into t values(100);

已创立 1 行。

SQL> insert into t values(200);

已创立 1 行。

SQL> commit;

提交实现。

SQL> select rowid,id from t;

ROWID                      ID
------------------ ----------
AAASaxAABAAAV3xAAA        100
AAASaxAABAAAV3xAAB        200

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    2960668

SQL> delete from t;

已删除2行。

SQL> commit;

提交实现。

SQL> select * from t;

未选定行

SQL> alter table t enable row movement;

表已更改。

SQL> select * from t;

未选定行

SQL> flashback table t to scn 2960668
  2  ;
flashback table t to scn 2960668
                *
第 1 行呈现谬误:
ORA-08185: 用户 SYS 不反对闪回


SQL> show recyclebin
SQL>

解释1:因为以后是sys用户,会显示:

ORA-08185: 用户 SYS 不反对闪回

闪回技术只实用于普通用户而不适用于sys用户。system用户也不实用。

解释2:必须要启用表的行挪动性能,否则不能闪回表。

  • alter table t enable row movement;

闪回删除

参考资料:Oracle闪回性能详解

因为闪回技术不反对sys用户,所以应用普通用户测试。

Oracle10g当前,当咱们删除表时,默认Oracle只是在数据库字典外面对被删的表的进行了重命名,并没有真正的把表删除。
回收站(recyclebin):用来保护表被删除前的名字与删除后系统生成的名字之间的对应关系的数据字典,表上的相干对象(索引、触发器等)也会一并进入回收站。

查看回收站的状态

只有dba(sys,system)才有权限执行查问recyclebin的状态。

SQL> show parameter recyclebin;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
recyclebin                           string      on

能够发现recyclebin是开启状态,如果发现是敞开状态,能够通过上面命令开启

alter system set recyclebin=on;

如果要敞开回收站性能,应用上面的命令:

alter system set recyclebin=off;

禁用后删除的对象将间接删除,不会写到Recyclebin中。

闪回删除试验成果

因为sys用户和system用户不反对闪回技术,所以咱们须要切换到普通用户进行试验,试验成果如下:

SQL> create table t(id int);

表已创立。

SQL> insert into t values(1);

已创立 1 行。

SQL> show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------

T                BIN$zqOXt7xBRA2SKyG5nGxb5w==$0 TABLE        2016-03-22:17:18:33


SQL> drop table t;

表已删除。

SQL> commit;

提交实现。

SQL> show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------

T                BIN$lpoDEIX2SSGAQt9TL3gUTA==$0 TABLE        2016-03-22:17:22:24

T                BIN$zqOXt7xBRA2SKyG5nGxb5w==$0 TABLE        2016-03-22:17:18:33

SQL> select * from "BIN$lpoDEIX2SSGAQt9TL3gUTA==$0";

        ID
----------
         1

SQL> flashback table t to before drop;

闪回实现。

SQL> select * from t;

        ID
----------
         1

清空回收站操作

能够全副清空回收站,也可只清空回收站的局部文件。

全副清空回收站

SQL> purge recyclebin;

局部清空回收站

##假设回收站中有一个文件的ORIGINAL NAME是t1,永恒删除他t1表
SQL> purge table t1;

回收站的空间治理

尽管Oracle并没真正删除被回收的表,然而在Oracle看来这一块空间曾经是自在的(free)。应用上面的演示能够查看成果:(在普通用户下验证即可)

SQL> create table t as select * from user_objects;

表已创立。

SQL> select sum(blocks) from user_free_space where tablespace_name='USERS';

SUM(BLOCKS)
-----------
         96

SQL> drop table t;

表已删除。

SQL> select sum(blocks) from user_free_space where tablespace_name='USERS';

SUM(BLOCKS)
-----------
        104

SQL> show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------

T                BIN$kMskKvD5SJqmwaC5WDQiAg==$0 TABLE        2016-03-22:18:31:43

SQL> select blocks from user_segments where segment_name='BIN$kMskKvD5SJqmwaC5WDQiAg==$0';

    BLOCKS
----------
         8

试验成果表明删除表之后用户自由空间增大了,并且大小刚好就是回收站中的对应的表的大小。可见这一块空间在Oracle看来曾经是free_space了。

闪回归档

参考资料:

Using Flashback Data Archive (Oracle Total Recall)

Oracle 11g 闪回数据归档

闪回归档:Flashback Data Archive。Oracle Total Recall也即Oracle全面回顾性能。

闪回数据归档能够和咱们始终相熟的日志归档类比,日志归档记录的是Redo的历史状态,用于保障复原的连续性;而闪回归档记录的是UNDO的历史状态,能够用于对数据进行闪回追溯查问;后盾过程LGWR用于将Redo信息写出到日志文件,ARCH过程负责进行日志归档;在Oracle 11g中,新增的后盾过程FBDA(Flashback Data Archiver Process)则用于对闪回数据进行归档写出。

具体操作见参考资料。

闪回数据库

参考资料:Oracle DB闪回(Flashback database)开启笔记

数据库的闪回

  • 是Oracle不同于查问闪回和归档闪回的另外一种闪回机制
  • Oracle 10g引入
  • 须要配置闪回区域
  • 记录数据块的批改,称为flashback logs(闪回日志)
  • 通过后盾复原写入过程RVWR(Recovery Writer)来工作
  • 就像一个向后转的按钮,让数据库向后回退。
  • 能够用于人为失误操作或者业务的须要。

闪回数据库架构Flashback database architecture

开启闪回数据库性能之后,会在SGA中开拓内存Flashback buffer,会记录buffer cache中的局部扭转而后后盾复原写入过程RVWR将记录写入闪回日志Flashback logs中。FBDA过程(Flashback Data Archive )则会将Flashback logs进行归档。

这个过程和重做日志十分十分的相似。


记得帮我点赞哦!

精心整顿了计算机各个方向的从入门、进阶、实战的视频课程和电子书,依照目录正当分类,总能找到你须要的学习材料,还在等什么?快去关注下载吧!!!

朝思暮想,必有回响,小伙伴们帮我点个赞吧,非常感谢。

我是职场亮哥,YY高级软件工程师、四年工作教训,回绝咸鱼争当龙头的斜杠程序员。

听我说,提高多,程序人生一把梭

如果有幸能帮到你,请帮我点个【赞】,给个关注,如果能顺带评论给个激励,将不胜感激。

职场亮哥文章列表:更多文章

自己所有文章、答复都与版权保护平台有单干,著作权归职场亮哥所有,未经受权,转载必究!

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理