| 一、还原数据与还原表空间 还原数据是: ? 原始的、修改之前的数据副本 ? 针对更改数据的每个事务处理而捕获 ? 至少保留到事务处理结束 ? 用于支持: – 回退操作 – 读取一致性查询 – Oracle 闪回查询、Oracle 闪回事务处理和 Oracle 闪回表 – 从失败的事务处理中进行恢复 还原信息存储在还原段中,还原段又存储在还原表空间中。 还原表空间: ? 仅用于还原段 ? 有特殊的恢复注意事项 ? 只能与单个实例相关联(集群情况还原表空间是分开的) ? 在任意给定时间,一个给定的实例只能有一个表空间是当前可写还原表空间 二、事务处理与还原数据 ? 每个事务处理仅分配一个还原段。 ? 一个还原段可以同时服务多个事务处理。 三、还原数据与重做数据 | 
 
       
          
        还原
  
        重做
  
       
       
        记录
  
        如何还原更改
  
        如何重现更改
  
       
       
        用于
  
        回退、读取一致性、闪回
  
        前滚数据库更改
  
       
       
        存储于
  
        还原段
  
        重做日志文件
  
       
       
        避免
  
        在多用户系统中出现读取不一致
  
        数据丢失
  
       
      
     
    
    
    
   四、相关参数说明
 
   
 
   以上为默认值。
 
   启用自动还原管理:UNDO_MANAGEMENT='AUTO'
 
   设置还原保留时间:UNDO_RETENTION=10800--这个参数一般设置3小时,设置大点200G左右
 
   设置还原表空间:UNDO_TABLESPACE='UNDOTBS1'
 
    
    
   五、设置还原保留时间
 
    
   
 
    
   脚本修改立即生效无需重启:
 
   alter system set undo_retention=10800 
 
    
   UNDO_RETENTION 指定已提交的还原信息要保留多长时间(秒),默认为900秒。
 
   仅在以下情况下才必须设置此参数:
 
   ? 还原表空间启用了 AUTOEXTEND 选项
 
   ? 需要设置 LOB 的还原保留时间
 
   ? 需要保证保留时间
 
    
   还原保留时间是建议值,当UNDO表空间满了且没到900秒也会覆盖,如果需要确保必须保留900秒,则需要设置保证还原保留时间
 
    
    
   六、设置保证还原保留时间
 
   SQL> ALTER TABLESPACE undotbs1 RETENTION GUARANTEE;--保证还原保留时间
 
   SQL> ALTER TABLESPACE undotbs1 RETENTION NOGUARANTEE;--不保证还原保留时间
 
    
   在有guarantee的保证下,ORACLE将会保证undo信息能够保存到undo_retention设定的值之后才被覆盖,如果这个时候同时执行了很多事物,将undo表空间耗完了,那么那个事物会失败,会报ORA-30036 错误,所以使用guarantee一定要慎用,如果非要使用guarantee,那么尽量将undo 表空间设大一点。
 
    
    
    
   七、还原数据的使用
 
   1、闪回查询
 
   说明:查询指定时间点的所有数据
 
   select empno,ename,job,mgr,sal
 
   from scott.emp 
 
   as of timestamp to_timestamp('2016-01-21 15:10:00','yyyy-mm-dd hh24:mi:ss')
 
   where mgr = 7566;
 
    
   2、闪回版本查询
 
   说明:
 
   (1)查看两个时间点之间行的所有版本。
 
   (2)查看更改了行的事务处理。
 
   注意:
 
   (1)不能使用 VERSIONS 子句查询外部表、临时表、固定表、视图。
 
   (2)VERSIONS 子句不能跨 DDL 命令使用。
 
   (3)段收缩操作已过滤掉。
 
   SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;--获取SCN
 
   update…commit;inset…commit;delete…commit;
 
   SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;--获取SCN
 
    
   select VERSIONS_STARTSCN,versions_starttime,VERSIONS_ENDSCN,versions_endtime,versions_xid,versions_operation
 
   from employees versions between scn 2797818 and 2797868
 
   order by VERSIONS_STARTTIME;
 
    
   select VERSIONS_STARTSCN,versions_operation
 
   from employees versions between timestamp minvalue and maxvalue
 
   order by VERSIONS_STARTTIME;
 
    
   闪回版本查询伪列解析
 
    
     
      
       
        VERSIONS_STARTSCN
 VERSIONS_STARTTIME
  
        该条记录操作时的SCN或时间,如果为空,表示该行记录是在查询范围外创建的
  
       
       
        VERSIONS_ENDSCN
 VERSIONS_ENDTIME
  
        该条记录失效时的SCN或时间,如果为空,说明记录当前时间在
 当前表内不存在,或者已经被删除了,可以配合着
 VERSIONS_OPERATION列来看,如果
 VERSIONS_OPERATION列值为D,说明该列已被删除,如果该
 列为空,则说明记录在这段时间无操作
  
       
       
        VERSIONS_XID
  
        该操作的事务ID
  
       
       
        VERSIONS_OPERATION
  
        对该行执行的操作:I表示INSERT,D表示DELETE,U表示UPDATE
 提示:对于索引键的update操作,版本查询可能会将其识别成两
 个操作:DELETE和INSERT
  
       
      
     
    
    
   3、闪回表
 
   说明:
 
   (1)需要具有对特定表的 FLASHBACK ANY TABLE 或 FLASHBACK 对象权限和具有 SELECT、INSERT、DELETE 和ALTER 权限。
 
   (2)FLASHBACK TABLE 命令作为单个事务处理执行,要求获取 DML 排它锁。
 
   (3)不闪回统计信息,保留当前索引和从属对象。
 
   (4)操作不能对系统表执行,不能跨DDL操作,会生成还原数据和重做数据。
 
    
   ALTER TABLE temp_liutao ENABLE ROW MOVEMENT;
 
    
   FLASHBACK TABLE temp_liutao TO TIMESTAMP TO_TIMESTAMP('2016-01-20 16:10:00','YYYY-MM-DD HH24:MI:SS');
 
   flashback table temp_liutao to timestamp(systimestamp - interval '3'minute);
 
   flashback table t_topcommsc_request to scn 13884734132482;
 
    
   ALTER TABLE temp_liutao DISABLE ROW MOVEMENT;
                        (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!