oracle知识点_闪回(flashback)

扶醉桌前 提交于 2019-12-03 18:20:47

         刚刚学习了oralce的闪回,所以自己就进行总结一下。

         首先总结需要使用闪回来解决问题:

   1.错误地删除了记录。

   2.错误地删除表

       3.查询历史记录

   4.如何撤销有一个提交的事务

        根据以上的四个问题就来介绍4个闪回类型

  1.闪回表

  闪回表就是将表回退到过去的一个时间点上。在需要闪回表的时候我们必须要注意的三个条件:

   (1).SCN(System Change Number) 系统改变号这像事务的回滚点一样,我们必须知道我们的表需要闪回                   到哪个时间点上。

    查询当前的SCN:  SELECT  TO_CHAR(systimestamp,'YYYY-MM-DD HH24-MI-SS*FF'),

TIMESTAMP_TO_SCN(systimestamp) SCN FROM dual;

    我们可以选择闪回表的时间点:

  FLASHBACK  TABLE  tb_name   TO TIMESTAMP  

to_date('2014-10-06 00:46:40','YYYY-MM- DD HH24:MI:SS')

  也可以选择闪回表的SCN值

  FLASHBACK  TABLE  tb_name   TO  SCN  16400979(要回的SCN的值)  

      (2).在闪回的时候要开启行移动,这要我们要找回来的表的记录才有地方放置

开启行移动:ALTER  TABLE   tb_name   ENABLE  ROW MOVEMENT  ;

关闭行移动:ALTER  TABLE   tb_name   DISABLE  ROW MOVEMENT  ;

(3).对表闪回的时候必须要有闪回的权限

GRANT  FLASHBACK  ANG TABLE  TO  user(要授权的用户)

 2.闪回删除,本质上是从Oracle的回收站中把表找回来,当我们把表删除后,它会把他放置在回收站         (RECYCLEBIN)中.

(1)oracle的回收站

      1.查看回收站:  SHOW RECYCLEBIN ;

    2.清空回收站:PURGE RECYCLEBIN;

    tips:管理员是没有回收站的

(2)从回收站中取回表

1.通过表名闪回表

FLASHBACK TABLE tb_name to before DROP;

2.通过回收站的名字闪回表

FLASHBACK TABLE recyclebin_name to before DROP;

tips:虽然我们通过recyclebin_name来闪回表的时候,名字是独一无二所以不用担心什么;

但是当我们通过表名来闪回表的时候,可能会出现闪回表的情况,所以我们必须给表重命名。

FLASHBACK TABLE old_tb_table TO BEFORE DROP RENAME TO new_tb_name;

   3.闪回版本查询

提供了一个审计行改变的查询功能,通过它可以查询到所有已经提交了的行记录。

        Oralce在闪回版本查询给我们提供了很多伪列:

versions_start{scn|timestamp}:版本开始的scn或者时间戳

versions_end{scn|timestamp}:版本结束的scn或者时间戳

versions_xid :创建行版本事务

versions_operation:在行上执行的操作

语法:

SELECT col_name ,versions_starttime,versions_endtime,versions_operation,

versions_xid    FROM tb_name 

  VERSIONS BETWEEN  timestamp MINVALUE AND  MAXVALUE

4.闪回事务查询

闪回事务查询是闪回版本的扩充,通过它可以审计某个事务甚至撤销一个已经提交的事务。

(1)闪回事务查询,首先要了解一个视图 flashback_transaction_query。

flashback_transaction_query 列说明:

SQL> desc flashback_transaction_query
  Name                                      Null?    Type
  ----------------------------------------- -------- ----------------------------
XID                                                       RAW(8)                 --事务ID
START_SCN                                          NUMBER                --事务起始SCN,即第一个dml的SCN
  START_TIMESTAMP                             DATE                      --事务其实时间戳,即第一个dm的时间戳
  COMMIT_SCN                                      NUMBER                --提交事务时的SCN
  COMMIT_TIMESTAMP                         DATE                      -- 提交事务时的时间戳
  LOGON_USER                                      VARCHAR2(30)       --本次事务的用户
  UNDO_CHANGE#                                NUMBER                --撤销SCN
  OPERATION                                         VARCHAR2(32)       --执行的dml操作:DELETE,INSERT,UPDATE,BEGIN,UNKNOWN
  TABLE_NAME                                       VARCHAR2(256)     --dml更改的表
  TABLE_OWNER                                     VARCHAR2(32)      --表的所有者
  ROW_ID                                                VARCHAR2(19)       --修改行的ROWID
  UNDO_SQL                                           VARCHAR2(4000)   --撤销dml的sql语句

----------------------------------------- -------- ----------------------------

(2)闪回事务查询的过程中是两个步骤:首先是先查询要闪回的事务号(XID,要查询XID通过第三点的闪       回版本查询),其次通过事务号(XID)查询UN_SQL。

      tips:在查询的时候需要有权限.

GRANT SELECT ANY TRANSACTION  TO user. 




   


 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!