zoukankan      html  css  js  c++  java
  • day16——oracle闪回

    闪回查询,由一个新的包DBMS_FLASH来实现。用户使用闪回查询可以及时取得误操作DML(Delete、Update、Insert)前某一时间点数据库的映像视图,用户可以利用系统时间或系统改变号(SCN:System Change Number)来指定这个只读视图,并可以针对错误进行相应的恢复措施。闪回查询功能完全依赖于自动回滚段管理(AUM),对于Drop等误操作不能恢复。

    闪回的本质是利用空间来换取过去的时间,将undo信息进行整理和"归档",按照时间片进行整理闪回日志,用户闪回到相应的时间点,剩余的数据是由redo日志和归档日志文件进行前滚,因而闪回提供了to before resetlogs选项,开启闪回功能前数据库必须运行在归档模式,开启数据库闪回后将会产生rvwr进程.
    查看系统闪回功能
    SQL> select FLASHBACK_ON from v$database;
    (系统默认没有开闪回功能)

    设置闪回
    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;

    查看恢复路径
    SQL> show parameter recover
    db_recovery_file_dest (恢复的路径)
    db_recovery_file_dest_size (区域里的配额)

    闪回日志的位置
    [oracle@sq123 ~]$ cd /oracle/app/flash_recovery_area/TEST/flashback/

    闪回保留时间(默认1天)
    SQL> show parameter flashback

    ============================================
    闪回数据库(恢复到时间点,后的数据丢失)

    查看时间点
    SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
    2012-03-12 06:36:30
    SQL> drop user scott cascade;(删除scott用户)

    查看最早可以恢复到的时间点
    SQL> select to_char(OLDEST_FLASHBACK_TIME,'yyyy-mm-dd hh24:mi:ss') from v$flashback_database_log;
    2012-03-12 05:49:59

    SQL> shutdown abort
    SQL> startup mount

    恢复到删除用户前的时间点
    SQL> flashback database to timestamp to_timestamp('2012-04-24 05:40:51','yyyy-mm-dd hh24:mi:ss');

    SQL> alter database open resetlogs;

    scott用户又可以登陆了

    ===================================================
    监视flashback database

    最早可以恢复到那个时间点
    SQL> select to_char(OLDEST_FLASHBACK_TIME,'yyyy-mm-dd hh24-mi-ss') from v$flashback_database_log;

    ---------------------------------
    使用 闪回数据库
    SQL> shutdown abort
    SQL> startup mount;

    SQL> flashback database to timestamp to_timestamp('2012-03-12 02:22:22','yyyy-mm-dd hh24:mi:ss');


    -----------------------------------
    管理 闪回

    SQL> show parameter recover

    更改闪回目录
    SQL> alter system set db_recovery_file_dest='/home/oracle/flash';

    ===============================
    flashback drop 使用

    drop表时,等于把表放到回收站中(默认情况下,Oracle是将此功能开启的。)
    查看回收站
    SQL> show parameter recyclebin
    SQL> show recyclebin; (没有内容,sysdba的drop操作是不会送到recyclebin)

    scott下
    SQL> create table ttttt(d int);
    SQL> drop table tt;
    SQL> commit;

    scott下
    SQL> show recyclebin;(有数据了)
    SQL> select object_name,original_name from recyclebin;

    scott下
    SQL> flashback table tt to before drop;

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

    什么时候是闪回不回来的

    SQL> create tablespace tbs_test01 datafile '/oracle/app/oradata/TEST/tbs_test01.dbf' size 10M;

    scott下
    SQL> create table tab_aaa tablespace tbs_test01 
      2  as select * from emp;

    SQL> drop table tab_aaa;

    SQL> flashback table tab_aaa to before drop(现在还可以闪回,再次删除)

    SQL> drop table tab_aaa;

    创建tab_bbb表大于 tab_aaa表
    SQL> create table tab_bbb tablespace tbs_test01
      2  as select * from emp;

    SQL> insert into tab_bbb select * from tab_bbb;
    SQL> / (多执行几次写满表空间)
    闪回不了
    (只要这个表里有一个字节被覆盖了,那么整个表也就恢复不会来了)
    (或 清空回收站也不能闪回)

    删除表时 不放到回收站中
    SQL> drop table tab_bbb purge;
    (purge 为不放进回收站)
    SQL> show recyclebin;(没有删除记录)

    -----------------------------------------
    回收回收站
    SQL> purge recyclebin;
    SQL> show recyclebin;(没内容了)

    =============================================
    flashback query
    (Flashback Query 是利用多版本读一致性的特性从UNDO 表空间读取操作前的记录数据)
    SQL> create table t(id int); 
    SQL> insert into t values(11);
    SQL> commit;
    SQL> drop table t;
    SQL> show recyclebin;

    闪回并重命名
    SQL> flashback table t to before drop rename to haha; 
    SQL> select * from haha;
    SQL> delete from haha;
    SQL> commit;

    SQL> show recyclebin;(没内容,undo也不能恢复)

    显示当前时间
    SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

    显示38分这个时间点上的数据
    SQL> select * from haha as of timestamp to_timestamp('2012-03-12 01:38:00','yyyy-mm-dd hh24:mi:ss');
    no rows selected(没有数据)

    显示36分这个时间点上的数据
    SQL> select * from haha as of timestamp to_timestamp('2012-03-12 01:36:00','yyyy-mm-dd hh24:mi:ss');
            ID
    ----------
            11
    (有数据)

    创建个新表装haha里的数据
    SQL> create table hehe as  select * from haha as of timestamp to_timestamp('2012-03-12 01:36:00','yyyy-mm-dd hh24:mi:ss');

    (前提条件是,undo表空间不能被覆盖)




  • 相关阅读:
    图书管理系统---基于form组件和modelform改造添加和编辑
    Keepalived和Heartbeat
    SCAN IP 解释
    Configure Active DataGuard and DG BROKER
    Oracle 11gR2
    我在管理工作中積累的九種最重要的領導力 (李開復)
    公募基金公司超融合基础架构与同城灾备建设实践
    Oracle 11g RAC for LINUX rhel 6.X silent install(静默安装)
    11gR2 静默安装RAC 集群和数据库软件
    Setting Up Oracle GoldenGate 12
  • 原文地址:https://www.cnblogs.com/xiaoxiao5ya/p/0b9180347a8ea3a057c6bfc41ff58f8a.html
Copyright © 2011-2022 走看看