zoukankan      html  css  js  c++  java
  • Oracle闪回flashback总结


    1.说明:

    Ø  采用的技术。

    使用的是多个技术。

    1.      闪回日志

    2.      回收站

    3.      回滚段

    无法使用回收站的操作

    Drop table xxx purge;

    Drop tablespace xxx

    Drop user xxx cascade;

    Truncate一个表

    Truncate不会有回滚数据,不会有回收站,所以不能使用闪回表的方式回收,只能使用闪回数据库的方式恢复。

    回收站逻辑上是一个,实际上是多少,每个表空间有自己的回收站,可以单独清空。

    Ø  关于数据闪回的几点说明

         1、系统表空间数据不得闪回

         2、实体在数据库保存时间不可保证,保留时间取决于系统运行状况,可能是几秒钟,也可能是几个月。

         3、基表闪回时,建立在表上的约束不可保证。

    Ø 记录当前时间或SCN

    为了以防万1,最好在数据库变动前记录时间或SCN

    SQL> selectto_char(sysdate,'YYYY-MM-DD HH24:mi:ss') from dual;

    SQL> selectcurrent_scn from v$database;

    2.开启闪回

    开启闪回需要数据库在归档模型下,所以首先需要开启归档。并且在mount状态下。

    首先查看是否开启闪回:

    SQL> select flashback_on fromV$database;

    FLASHBACK_ON

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

    NO

    如果已经开启了闪回,无须执行下面的操作。

    SQL> alter system set db_recovery_file_dest_size=30Gscope=both;

    SQL> alter system setdb_recovery_file_dest='/u01/flashback' scope=both;

    SQL> shutdown immediate

    SQL> startup mount

    SQL> alter database archivelog;

    SQL> alter database flashback on;

    SQL> alter database open;

    再进行确认:

    SQL> select flashback_on fromV$database;

    FLASHBACK_ON

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

    YES

    3.闪回操作

    Ø 闪回数据库。

    可以有下面3个不同的方法,按实际需要,任选其一

    SQL> flashback database totimestamp(sysdate-1/24);

    SQL> flashback database to timestamp

    to_timestamp('2013-09-1016:00:00','YYYY-MM-DD HH24:mi:ss');

    SQL> flashback database to scn 463954;

    Ø 闪回表:

    闪回表可以分为两种情况,一种是drop闪回,一种是闪回到指定时间或SCN

    先要开启row movement

    SQL>alter table emp enable row movement;

    闪回到指定时间或SCN

     

    SQL>flashback table emp to timestampto_timestamp

    ('2013-09-12 08:00:00','yyyy-mm-ddhh24:mi:ss');

    SQL>flashback table emp to scn 4354761;

    DROP闪回:

    如果误对表做了drop操作,可用下面的方法闪回

    SQL>flashback table s_emp1 to before drop;

    可以以下面的方法闪回

    SQL>flashback table flashbacktable to before drop rename to a;

    SQL>flashback table "回收站实体名"to before drop;

    --闪回表后表的索引也会回来,但是索引名还是在recyclebin中显示的名字,所以使用 alterindex bin$xxx rename to xxxx 命令修改索引名称。

    SQL>alter index "BIN$s6TKiw4uafDgRAAVF3jtoA==$0"

    rename to PK_PC_STIM_INJ_ENHANCE_MON

    Ø  查询闪回(flashbackquery)

    delete数据库里的数据都删除了以后,还commit, 采用下面的方法实现数据的还原

    ·查询过去某指定时间点数据库中的数据。

    SQL>select* from emp as of timestamp to_timestamp('2013-07-05 08:00:00','yyyy-mm-ddhh24:mi:ss');

    ·删除表后将数据添加到原表中    

    SQL>insertinto emp select * from emp

    as of timestamp to_timestamp

    ('2013-07-05 08:00:00','yyyy-mm-ddhh24:mi:ss');

    Ø 9i的闪回查询

    9i的flashback 是基于undo的,9i根本没有recycle bin,想闪回表和库是不可能的,只能闪回查询

    SQL>SELECTCOUNT(*) FROM class_daily as of timestamp to_timestamp('2013-03-21 14:58:00','yyyy-mm-ddhh24:mi:ss');

    Ø  删除闪回(flashbackdrop)

    闪回被dropped的基表,

    ·显示回收站信息

         SQL>show recyclebin

    --select* from user_recyclebin

    ·彻底删除基表

         SQL>drop table s_emp1 purge ;

    ----彻底删除一个表用PURGE,这样的删除的表不能闪回。

    ·清除回收站

         SQL>purge recyclebin;

    ·查数据库选项产品:

         SQL>select * from V$option;

    · truncate删除后不保留存储空间,而Delete删除后,保留存储空间,如果要删掉这些存储空间,以释放空间,可以执行以下命令:

    SQL>alterttable emp deallocate unused;

    ·如果还要保留一部分,可以用:

    SQL>alterttable emp deallocate unused 200k;

  • 相关阅读:
    CPU时间戳获取
    练手记录
    Fibonacci 2
    gjd
    hdu 5785 Interesting(manacher+前缀和)
    hdu 5782 Cycle(KMP+hash)
    hdu 5741 Helter Skelter(扫描线)
    Educational Codeforces Round 25 G. Tree Queries
    Educational Codeforces Round 25 F. String Compression(kmp+dp)
    Codeforces Round #423 (Div. 2) D. High Load(构造题)
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3318078.html
Copyright © 2011-2022 走看看