• 涂抹Oracle—Flashback


    11.1  基于flashback查询过去的数据

           a.基于时间的查询(as of timestamp)

                构造表falsh_tbl,删除数据然后查询

             SQL>select * from flash_tbl as of timestamp sysdate-5/1440;

             恢复删除的数据

            SQL>insert into flash_tbl select * from flash_tbl as of timestamp sysdate-5/1440 where id<10;
          实验的时候,注意删除之后过去的时间,不然在恢复的时候会报表结构变更的错误提示。

       b.基于SCN的查询(AS OF SCN)

        获取SCN的方法:

        a.select current_scn from v$database;

       b.select dbms_flashback.get_system_change_number from dual;
       b的前提是要有操作对象的访问权限:
       >grant execute on dbms_flashback to user;

       获取SCN,然后删除操作并提交:

      >select dbms_flashback.get_system_change_number from dual;
      >delete flash_tbl where id>10;
      执行select语句并附加as of scn,同时指定删除前的SCN,可以查询到指定SCN时对象中的记录:
     >select * from flash_tbl as of scn .....;
     执行insert,将删除的数据重新恢复回表:
     SQL>insert into flash_tbl select * from flash_tbl as of scn .... where id>10;
     SQL>commit;
     使用scn查询比timestamp更精确
    不过在实际执行flashback query时,时间转换后具体对应哪个SCN,通过sys用户下smon_scn_time来记录
    SQL>desc sys.smon_scn_time;
    在10g中,系统评价每3秒产生一次系统时间与SCN的匹配并存入sys.smon_scn_time表:
    >select scn,to_char(time_dp,'YYYY-MM-DD HH24:MI:SS') as time from sys.smon_scn_time order by time;
    在oracle数据库也可手动进行时间和SCN的转换,oracle提供了两个函数SCN_TO_TIMESTAMP和TIMESTAMP_TO_SCN
    SQL> SELECT TIMESTAMP_TO_SCN(SYSDATE) FROM DUAL;
    SQL> SELECT TO_CHAR(SCN_TO_TIMESTAMP(4942206),'YYYY-MM-DD HH24:MI:SS') FROM DUAL;

    11.1.2 应用flashback Query查询操作的事务
    11.1.2.1 使用flashback version query查询记录修改版本
    查询过去某个时间点对象中保存的记录信息,在当前时间与指定的过去某个时间点之间,对象可能做过多次修改。
    flashback version query也是以select查询后面附加versions between timestamp[/SCN] start and end子句即可。通过version between能够查看指定时间段内undo表空间记录的不同版本.
    11.1.2.2 使用flashback transaction query查询事务信息
    flashback transaction query功能在实际应用时对应的是个视图:flashback_transaction_query

    注意:查询flashback_transaction_query视图,用户需要是DBA角色,或被授予了select any transaction权限
    >grant select any transaction to xxx;

    11.1.3 应用flashback query注意事项
    11.1.3.1 自动撤销管理表空间
    要使用flashback的相关特性,必须启用自动撤销管理表空间,不单单对于flashback query,也包括flashback table和flashback database,对于后两项还有其它附件条件,如flashback table需要启用recycle bin(回收站),flashback database 要求启用flashback area(闪回区)
    9i后取消回滚段说法,完全以UNDO段代替,正好与REDO概念相对应.
    UNDO端不再由DBA手工介入,完全由oracle在运行时自动分配.
    是否启用自动撤销管理表空间由两个初始化参数决定:
    .undo_management:值为auto表示使用自动撤销表空间管理,manual则表示手动
    .undo_tablespace:oracle数据库中个可以创建多个undo表空间,不过同时只能使用一个,当undo_management初始化参数为auto时,undo_tablespace参数用来指定当前使用的undo表空间名称

    undo表空间大小,直接影响到flashback query的查询能力。
    11.1.3.2 初始化参数undo_retention
    用来指定undo段中数据保存的最短时间,以秒为单位,是一个动态参数,可以在实例运行随时修改,默认900秒,15min

    11.2 Flashback Table闪回表
    oracle10g引入一个recycle bin的功能(主要针对被删除的表及其关联的对象,如触发器、索引、约束),被删除的表并非真正删除,而是先通过修改数据字典的方式,将其改名并放入recycle bin中,如果要恢复recycle bin中的对象,借助flashback table是最简便的方式
    11.2.1.1 删除恢复实验
    SQL>drop table temp1;
    SQL>select object_name,original_name from recyclebin;
    如果commit恢复没有用
    SQL>flashback table temp1 to before drop;

         

  • 相关阅读:
    CachedRowSet使用
    mybatis There is no getter for property named 'xx' in 'class java.lang.String
    基于tcpdump的Android智能移动终端数据包捕获完整解决方案
    analytics详解
    android开发图片分辨率
    缩放图片,解决bitmap 内存溢出out of memory的问题
    使用windowAnimations定义Activity及Dialog的进入退出效果
    读取本地已有的.db数据库
    MyBatis 问题列表
    cxf 相关问题
  • 原文地址:https://www.cnblogs.com/newmanzhang/p/3477535.html
Copyright © 2020-2023  润新知