• Flashback—Tables and Databases


         As of Oracle Database 10g, you can use the flashback table and flashback database
    commands to simplify your data-recovery efforts. The flashback table command
    automates the process of restoring a full table to its prior state. The flashback
    database command flashes back an entire database, and it requires modifications
    to the database status and its logs.

    Privileges Required
        You must have either the FLASHBACK object privilege on the table or the FLASHBACK ANY TABLE
    system privilege. You must also have SELECT, INSERT, DELETE, and ALTER object privileges on
    the table. Row movement must be enabled for all tables in the flashback list. To flash back a table
    to before a drop table operation, you only need the privileges necessary to drop the table.

    表的闪回操作语句:(可以使用RENAME重命名表名字)

    1 DROP TABLE D;
    1 SELECT * FROM USER_RECYCLEBIN;
    2 SELECT * FROM RECYCLEBIN

    使用如下语句进行表的闪回操作:

    1 FLASHBACK TABLE D TO BEFORE DROP;
    2 FLASHBACK TABLE D TO BEFORE DROP RENAME TO TEST_1;

    当同一个表被建立和插入数据,删除,往复执行了多次
    进行闪回操作,结果为最后一次的表,当需要查询之前的版本的表,
    可以使用特定回收站名称进行闪回之前版本的表:

    1 FLASHBACK TABLE "BIN$wq73XQMaR/iBn1AjSwjTbw==$0"   TO BEFORE DROP

    注意:
          取消删除特性使表恢复其原始名称,但是索引和触发器等相关对象并没有恢复原始名称,它们仍然使用回收站的名称。在表上定义的源(如视图和过程)没有重新编译,仍然保持无效状态。必须手动得到这些原有名称并应用到闪回表。
    信息保留在名为 USER_RECYCLEBIN 的视图中。在对表进行闪回操作前,请使用以下查询来检索原有名称。
      

    1 SELECT OBJECT_NAME, ORIGINAL_NAME, TYPE
    2 FROM USER_RECYCLEBIN
    3 WHERE BASE_OBJECT = (SELECT BASE_OBJECT
    4 FROM USER_RECYCLEBIN
    5 WHERE ORIGINAL_NAME = 'EX_BULLETIN')
    6 AND ORIGINAL_NAME != 'EX_BULLETIN';

    在表进行闪回操作后,表 RECYCLETEST 上的索引和触发器将按照 OBJECT_NAME 列中所示进行命名。根据以上查询,可以使用原始名称重新命名对象,如下所示:

    ALTER INDEX "BIN$04LhcpnianfgMAAAAAANPw==$0" RENAME TO IN_RT_01;
    ALTER TRIGGER "BIN$04LhcpnganfgMAAAAAANPw==$0" RENAME TO TR_RT;

    闪回表的其他用途
    闪回删除表功能不仅限于恢复表的删除操作。与闪回查询类似,您还可以使用它将表恢复到不同的时间点,利用表的“过去”版本来替代整个表。例如,以下语句将表恢复到系统更改号 (SCN) 2202666520

    当要进行表级别的数据闪回操作的时候,需要使用行移动:

    1 --行移动
    2 ALTER TABLE d ENABLE ROW MOVEMENT;

    闪回语句:(TO SCN)

    1 FLASHBACK TABLE RECYCLETEST TO SCN 11111;

    闪回语句:(TO TIMESTAMP)

    1 --闪回到一个小时时的数据状态(需要之一在undo控制是否有足够的值)
    2 FLASHBACK TABLE RECYCLETEST TO Timestamp(SYSDATE -1);

    --查询回收站的删除信息

    1 SELECT * FROM RECYCLEBIN;
    2 SELECT * FROM Dba_Recyclebin

    清空回收站的信息:

    查询该用户下的所有的表对象(放在回收站内的也包括)

    select * from tab;
    1 PURGE RECYCLEBIN;(普通用户)
    2 PURGE DBA_RECYCLEBIN;(DBA)

    将清除回收站的内容,不可以使用闪回表的操作(对象已经无法闪回)
    假如一张表进行了如下的删除操作(添加了PURGE的操作),无法进行闪回操作

    1 DROP TABLE test_table PURGE;
    2 --也可以使用如下的语句:
    3 DROP TABLE test_table;
    4 --在回收站情况该表的信息
    5 PURGE TABLE test_table;

    清除回收站中某用户的所有信息

    1 PURGE TABLESPACE USERS;
    2 --指定用户
    3 PURGE TABLESPACE USERS USER SCOTT;

    查询系统当前的SCN号的两种方式:

    SELECT dbms_flashback.get_system_change_number,current_scn FROM v$database;

    查询表中每行数据对应的SCN号对应的时间:

    SELECT T.*,TO_CHAR(SCN_TO_TIMESTAMP(ORA_ROWSCN),'YYYY-MM-DD HH24:MM:SS'),ORA_ROWSCN FROM dept  T;

    (由于列对应的SCN号已经无法在系统中查询出对应的时间信息,所以弹出该错误提示)
    当该SCN对应的时间存在:

    1 SELECT T.*,
    2 TO_CHAR(SCN_TO_TIMESTAMP(ORA_ROWSCN), 'YYYY-MM-DD HH24:MM:SS'),
    3 ORA_ROWSCN
    4 FROM T1 T;


    要查询每个事务做的相应的操作和操作时间:查询
    flashback_transaction_query:Description of the flashback transaction query view

    该表是用来指定事务的历史信息:flashback_transaction_query中的数据来自undo datafile,只要事务对应的
    before image在undo datafile中存在,flashback_transaction_query里面就可以查询到数据...

     

    --flashback database待续

    I believe that we are who we choose to be. Nobody‘s going to come and save you, you‘ve got to save yourself. 我相信我们成为怎样的人是我们自己的选择。没有人会来拯救你,你必须要自己拯救自己。
  • 相关阅读:
    论文阅读:Single Image Dehazing via Conditional Generative Adversarial Network
    lintcode-720重排带整数字符串
    lintcode-828. 字模式
    lintcode-1038. 珠宝和石头
    lintcode-1174.下一个更大的元素 III
    lintcode-80.中位数
    《大道至简》第二章读后感
    从命令行输出数字,求和计算
    《大道至简》第一章伪代码观后感
    ngx_http_referer_module模块说明
  • 原文地址:https://www.cnblogs.com/caroline/p/2384380.html
Copyright © 2020-2023  润新知