orale flashback

1.说明

    Flashback技术是以Undo segment中的内容为基础的,因此受限于UNDO_RETENTION参数。要使用flashback特性,必须启用自动撤销表空间管理。

    在oracle 10g中,flash back分为一下成员:Flashback Database、Flashback Drop、Flashback Query(分为Flashback Query、Flashback Version Query、Flashback Transation Query三种)和Flashback Table。

2.Flashback Database

    把整个数据库回退到过去的某个时点,依赖于Flashback log日志。速度很快,可以认为是不完全恢复的替代技术。

    2.1 受到以下限制

  •  
    •  Flashback不能解决Media Failure问题,这种情况RMAN恢复是唯一选择;
    •  如果删除了数据文件或者使用shrink技术缩小数据库文件大小,这是不能使用flashback database回退到改变之前的状态,这时候就必须先利用RMAN把删除之前或者缩小之前的文件备份restore出来,然后利用flashback database执行剩下的数据恢复。
    • 控制文件如果是从备份汇总恢复的,或者是重建的,不能使用flashback database
    • 使用flashback database所能恢复到最早的SCN,取决与flashback log中的最早的SCN

      2.2 flashback database架构

           flashback database包括一个后台进程RVWR(recover write),flashback database log日志和flashback recovery area。一旦数据库启用了flashback database,该RVWR进程会启动,该进程会向flashback database area写入flashback database log。这些日志包括的是数据块的“前镜像”。

           查看后台进程 ps -ef|grep rvw

         2.3 启用flashback database

              系统默认是关闭flashback database功能的,要启用,需要做以下配置:

             2.3.1 配置flashback database area

                     需要配置的包括大小和位置,如果是RAC,flashback recovery area必须在共享存储中。数据必须处于archivelog模式。

                     启用:alter system set db_recovery_file_dest_size=20G,scope=both;

                           alter system set db_recovery_file_dest='/DBA/FB' scope=both;

                     禁用:alter system set db_recovery_file_dest='';

              2.3.2 启用数据库 flashback 功能
  •  
    •  
      •  
        • 启动数据库到mount:startup mout;
        • 检查flashback暂时是关闭的:select name,current_scn,flashback_on from v$database;
        • 启动:alter database flashback on;
        • 设置初始化参数db_flashback_retention_target  控制数据保留的时间 默认是1440 单位是分钟,即24小时
        • 启动数据库 alter database open;

        2.4 语法

                    首先要将数据库启动到mount状态

                    flashback database to timestamp to_timestamp('20090101 21:22:22','yyyymmdd hh:24:mi:ss');

                    flashback database to scn 947921;

                    执行万flashback database后有两种方式修复数据库,

                    1)直接以alter database open resetlogs;打开数据库;指定scn或者timestamp后的数据统统丢弃;

                    2)alter database open read only;打开数据库,通过逻辑导出的方式将误操作的表的数据导出,再执行recover database命令以重新应用数据库产生的redo,将数据库修复到flashback database前的状态。再

                       通过逻辑导入的方式将之前误操作的表重新导入,这样的化对现有数据的表影响最小,不会有数据丢失。

        2.5相关视图

  •  
    •  
      • v$database:查看是否启用了flashback database功能
      • v$flashback_database_log
        • flashback database 所能回退到的最早时间
        • oldest_flashback_scn/oldest_flashback_time
        • flashback size:flash recovery area大小
        • retention target:系统定义的策略
        • estimated_flashback_size:根据策略对所需的空间大小的估值
      • v$flashback_database_stat;对flashback log空间进行更细粒度的记录和估计

2.flashback drop

    从10g开始,用于恢复误删除的对象,包括表和索引。依赖与tablespace recycle bin(表空间回收站)。

    flashback不支持sys用户,system表空间下的对象,也不能从表空间回收站中拿到。

   2.1 Tablespace Recycle Bin

            从ORACLE10g开始,表空间会存在叫做回收站的逻辑区域,当用户执行drop时,被删除的表和表的关联对象不会被物理删除。

            初始化参数recyclebin用于控制是否启用recyclebin,缺省是on,可以使用off关闭。

            show recyclebin

  •  
    • purge tablespace tablespacename:清空表空间的recyclebin
    • purge tablespace tablespacename user username:清除表空间的recycle bin中指定用户的对象
    • purge recyclebin 删除当前用户的recyclebin对象
    • purge dba_recyclebin:删除所有用户的recyclebin对象,该命令要sysdba权限
    • drop table tablename purge:永久删除
    • purge index recycle_bin_object_name:当想删除recyclebin的空间,又想能恢复表时,可以通过释放该对象的index所占用的空间来环节空间压力。

  2.2 实例操作

        flashback table tablename to before drop;

       flashback table tablename to before drop rename to b;

       select original_name,object_name from recyclebin;

       flashback table "object_name" to before drop;

   2.3 限制

  •  
    • 只能用于非系统表空间和本地管理的表空间
    • 对象的约束参考不会被恢复,指向该对象的外键约束需要重建
    • 对象能否恢复成功,取决与对象空间是否被覆盖使用
    • 当删除表是,依赖于该表的物化视图也会同时删除,物化视图不会被放入recyclebin。flashback table不会恢复物化视图
    • 对于recyclebin中的对象,只支持查询

3 flashback query

    3.1 flashback query(9ir2)

            利用多版本读一致性的特性从undo表空间读取操作前的记录数据。

         3.1.1 语法

                select * from table as of timestamp sysdate-5/1440;

                select * from table as of scn scnnumber;

            恢复数据使用insert +select方式

            oracle内部使用的是scn,即时用的是timestamp也会转换成scn。系统时间与scn之间的关系存在一张表,即sys下的SMON_SCN_TIME;每隔5分钟产生一次记录,表中记录了1440个时间标记与scn的匹配记录

             select scn ,to_char(time_dp,'yyyymmdd hh24:mi:ss') from sys.smon_scn_time;

   3.2 flashback version query (10g)

            查看过去某个时间段内,数据是如何发生变化的。伪列ORA_ROWSCN(10g新增).

            select versions_xid,versions_startscn,versions_endscn,versions_opreration from tablename versions between scn minvalue and maxvalue;

            flashback_transation_query表.ORA_ROWSCN数据不修改时不发生变化,是数据块级别。      

   3.3 flashback transation query

           使用undo信息来实现。可以查看某个事务执行的所有变化,他需要访问flashback_transation_query视图。xid列表示事务id。

 

4 flashback table

    sys用户不支持闪回。

    flashback talbe也是使用undo tablespace的内容实现数据的回退。

    flashback table tablename to scn(to timestamp);

    注意:需要表支持row movement。可以在user_tables中查询

    select row_movement from user_talbes where table_name='a';

    alter table tablename enable row movement;

    alter table tablename disable row movement;

 

5 注意事项 

  

1.基于undo 的表恢复,需要注意DDL 操作的影响
第三个就是修改并提交过数据之后,对表做过DDL 操作,包括:
drop/modify 列, move 表, drop 分区(如果有的话), truncate table/partition,这些操作会另undo 表空间中的撤销数据失效,对于执行过这些操作的表应用flashback query 会触发ORA-01466 错误。另外一些表结构修改语句虽然并不会影响到undo 表空间中的撤销记录,但有可能因表结构修改导致undo 中重做记录无法应用的情况,比如对于增加了约束,而flashback query 查询出的undo 记录已经不符合新建的约束条件,这个时候直接恢复显然不可能成功,你要么暂时disable 约束,要么通过适当逻辑,对要恢复的数据进行处理之后,再执行恢复。
另外,flashback query 对v$tables,x$tables 等动态性能视图无效,不过对于dba_*,all_*,user_*等数据字典是有效的。同时该特性也完全支持访问远端数据库,比如select * from tbl@dblink as of scn 360;的形式。 

 
 

2. 基于undo 的表恢复,flashback table 实际上做的也是dml 操作(会在被操作的表上加dml 锁),因此还需要注意triggers 对其的影响,默认情况下,flashback table to scn/timestamp 在执行时会自动disable 掉与其操作表相差的triggers,如果你希望在此期间trigger 能够继续发挥做用,可以在flashback table 后附加
ENABLE TRIGGERS 子句。

 

                     

                    

你可能感兴趣的:(数据结构,oracle,配置管理,Flash,360)