• Oracle 闪回技术


    1.查看表历史时刻数据

    select * from tab_test AS OF TIMESTAMP to_timestamp('20140917 10:00:00','yyyymmdd hh24:mi:ss');

    2、利用flashback table恢复表到过去某一时刻

    alter table tab_test enable row movement;

    flashback table tab_test to timestamp ('20140917 10:00:00','yyyymmdd hh24:mi:ss');

    alter table tab_test disable row movement;

    3、查看过去某一段时间内对表的操作,以确认需要恢复到的时间点

    select SQL_TEXT,LAST_ACTIVE_TIME from v$sqlarea where LAST_ACTIVE_TIME >to_date('20140917 10:00:00','yyyymmdd hh24:mi:ss') and SQL_TEXT like '%tab_test%';

    4、确认是否开启闪回

    select log_mode,flashback_on from v$database;

    5.开户闪回

    Oracle闪回开启及操作

     

    1. 记录当前时间或SCN

    数据库变动前记录时间或SCN

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

    SQL> select  current_scn from v$database;

     

     2.开启闪回

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

    首先查看是否开启闪回:

    SQL> select flashback_on from V$database;

    FLASHBACK_ON

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

    NO

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

    SQL> alter system set db_recovery_file_dest_size=30G scope=both;

    SQL> alter system set db_recovery_file_dest='D:Oracle11g'  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 from V$database;

    FLASHBACK_ON

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

    YES

     

    3.闪回操作

    3.1闪回数据库

    SQL >flashback database to time to_date(xxx);

    SQL >flashback database to time TO_TIMESTAMP (xxx);

    SQL >flashback database to scn xxx

    SQL >flashback database to sequence xxx thread 1

    SQL>flashback database to timestamp(sysdate-1/24)

    3.2闪回表

    先要开启row movement

    SQL>alter table emp enable row movement;

    SQL >FLASHBACK TABLE tablename TO TIMESTAMP (JUL-07-2013, 02:33:00) 

    SQL >FLASHBACK TABLE employee TO SCN 133456;

    SQL >FLASHBACK TABLE t1 TO TIMESTAMP '2013-03-03 12:05:00' ENABLE TRIGGERS;

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

    闪回到指定时间或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 11064241;

     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

     

    3.3查询闪回(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');

     

    3.4 删除闪回(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;

     

    4.关于数据闪回的几点说明

    *系统表空间数据不得闪回

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

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

  • 相关阅读:
    《软件过程管理》阅读笔记3
    《软件过程管理》阅读笔记1
    《深度学习—智能时代的核心驱动力量》阅读笔记4
    《深度学习—智能时代的核心驱动力量》阅读笔记3
    《深度学习—智能时代的核心驱动力量》阅读笔记2
    《深度学习—智能时代的核心驱动力量》阅读笔记1
    软件杯赛题周总结(6)
    软件杯赛题周总结(5)
    esp32 arduino 蓝牙 使用uln2003 驱动四相五线步进电机备忘
    Oracle——在不安装oracle客户端的情况下,使用PLSQL
  • 原文地址:https://www.cnblogs.com/Acamy/p/6550940.html
Copyright © 2020-2023  润新知