• oracle 闪回技术


    首先要明确闪回是一类技术,有非常多种类型。

    一、闪回数据库:

    闪回数据库应用场景:

      数据库做压力测试,测试完毕闪回无用数据。
      应用上线,前灰度测试,如果出现大问题直接闪回。

    闪回数据库:

      开启归档:

        mkdir /home/oracle/arch

        SQL> alter system set log_archive_dest_1='location=/home/oracle/arch';

        SQL> startup mount force  

        SQL> alter database archivelog;
        SQL> archive log list;
        SQL> alter database open;

      设置闪回区:

        SQL> show parameter recover;

        SQL> show parameter db_flash;   

        SQL> alter system set db_recovery_file_dest_size=2G;
        mkdir /home/oracle/flash
        SQL> alter system set db_recovery_file_dest='/home/oracle/flash';

      数据库开启闪回功能:

        SQL> alter database flashback on;

      闪回数据库:

        闪回数据库需要在mount阶段:

        1、基于scn号闪回:

          需要删除之前有记录scn号:SQL> select current_scn from v$database;

          SQL> flashback database to scn 322232;

        2、基于时间点:
          FLASHBACK DATABASE TO TIMESTAMP(TO_DATE('2017-06-8 22:30:00', 'YYYY-MM-DD HH24:MI:SS'));

        3、普通还原点:
          SQL> create restore point app03_20170617;
          SQL> flashback database to restore point app03_20170617;
        4、可靠还原点:
          SQL> create restore point app03 guarantee flashback database;
          SQL> FLASHBACK DATABASE TO RESTORE point app03;

    关闭闪回:
      SQL>alter database flashback off;

    二、闪回表(基于回收站的)

        回收站是基于用户的
        回收站使用的空间是:用户默认使用的表空间
        当用户表空间不足的时候,创建表(等)会删除回收站的内容(将段的使用从永久变成可调整)
        删除表,其实是把表改名放入回收站
        sys对象不进入回收站

      

      闪回表: 

        查看回收站:
          SQL> show recyclebin;
          ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
          ---------------- ------------------------------ ------------ -------------------
          TEST1 BIN$UXTqW8AoJeTgUKjAb2QnEg==$0 TABLE 2017-06-08:22:46:18   

        执行闪回表:
          SQL> flashback table "BIN$UXTqW8AoJeTgUKjAb2QnEg==$0" to before drop;
          #.....to before drop rename to new_test; 可以闪回时更改名字

        查看回收站:
          SQL> show recyclebin;

    三、闪回表(闪回查询)

      闪回查询:
        select * from emp AS OF timestamp to_date('2017-06-08 22:56:20','yyyy-mm-dd hh24:mi:ss') where department_id=100;

      闪回:
        flashback table emp to timestamp to_date('2017-06-08 22:56:20','yyyy-mm-dd hh24:mi:ss');

      闪回表稳妥做法:
        利用闪回查询  查询删除前的状态,然后insert回原来表里

        对于truncate的表,除了flashback database之外,其它的flashback功能可能帮不了你)

    四、闪回版本查询:

      flashback version query提供了一个审计行改变的功能,它能找到所有已经提交了的行的记录。
      比如说,时间1,我插入一条记录,时间2我删除了这条记录,对于时间3,当然查询不到这条记录,
      但是flashback version query能够把时间1、时间2的操作给记录下来,并详细的查询出来。

      如果我们利用flash table或者是flash query,我们也只能是看到过去的某一个快照而已,利用flashback version query,我们将找到其中的任何变化:

      select versions_starttime, versions_endtime, versions_xid,versions_operation,ID,NAME
      from t1 versions between timestamp minvalue and maxvalue
      order by VERSIONS_STARTTIME;

      

      当然,除了分析以上所有的变更之外,我们可以指定时间段,如
        select ID,NAME
        from test versions between timestamp
        to_date('20014-04-07 24:34:04','yyyy-mm-dd hh24:mi:ss')
        and to_date('20014-04-27 04:34:50','yyyy-mm-dd hh24:mi:ss');


      还可以使用 SCN 来找出过去的版本值。可以从伪列 VERSIONS_STARTSCN 和 VERSIONS_ENDSCN 中获得 SCN 号。以下是一个示例:
        select versions_starttime, versions_endtime
        from test versions
        between scn 1000 and 1001

    五、闪回事务查询:
      Oracle 11g的闪回事务查询就是对过去某段时间内所完成的事务的查询和撤销。10g数据来源于undo,11g来自undo/redo/archivelog。
      示例:
        a、打开数据库补充日志:
          sql>alter database add supplemental log data;
        b、打开主键补充日志:
          sql>alter database add supplemental log data (primary key) columns;

        c、直接使用sqlplus执行命令比较复杂,使用oem操作吧:
          打开em----Availability----->Perform Recovery---->

  • 相关阅读:
    python_ 学习笔记(hello world)
    python_ 学习笔记(运算符)
    MySQL-联合查询
    MySQL-date和datetime
    python_ 学习笔记(基本数据类型)
    python_ 学习笔记(基础语法)
    Visaul Studio 常用快捷键的动画演示
    IIS日志-网站运维的好帮手
    浅谈反射机制
    SQL Server 数据库优化文章
  • 原文地址:https://www.cnblogs.com/fanxuanhui-linux/p/7097641.html
Copyright © 2020-2023  润新知