关闭

闪回

161人阅读 评论(0) 收藏 举报

  闪回包括:闪回查询、闪回版本查询、闪回事务查询、闪回表、闪回删除和闪回数据库
  其中前四个需要使用插销数据,这里主要先介绍着四个。
  如果经常使用闪回操作,则建议使用有保证的撤销保留,要不然可能会收到‘快照太旧’的错误。
一、闪回查询
  查询数据在过去某个时刻或者某个SCN处的一个旧版本。
  要对对象闪回查询,需要用户具有对象上的flashback权限,或者具有flashback any table权限。
  1、使用SQL语句
    使用TIMESTAMP:select select_list from table_name
                    as of timestamp to_timestamp('timestamp_value','timestamp_format')
                    [ where 条件]
    使用SCN:select select_list from table_name
            as of scn scn_value
            [where 条件]
  2、使用dbms_flashback
    exec dbms_flashback.enable_at_time(to_timestamp('timestamp_value','timestamp_format'));
    或者:
    exec dbms_flashback.enable_at_system_change_number(scn_value);
    然后
    select .... from table_name
    [where 条件];
    最后
    exec dbms_flashback.disable;
  3、使用闪回查询纠正过去的错误操作
    比如:update table_name set column_name=(select column_name from table_name as of scn scn_value[ where 条件])
           [where 条件];

          insert into table_name[(column_name [, ...])]
          select .... from table_name
          as of timestamp to_timestamp('timestamp_value','timestamp_format')
          [where 条件];

 二、闪回版本查询
  1、注意事项:只能检索行的已提交版本
               检索所有已删除的行和当前行
               检索删除之后重新插入的行
               查询的结果为表的形式,每一版本包含一行
  2、限制:只能查询实际的表,不能查询视图
           不能跨越DDL应用versions子句
           忽略纯粹的行物理变化
           不能应用到外部表和临时表
  3、伪列:versions_starttime versions_startscn :该版本开始时间、开始scn。如果为空,则表示在指定的最小时间或者最小scn之前开始。
           versions_endtime versions_endscn :该版本结束时间、结束时scn。如果为空则表示为当前行或者已经删除。
           versions_operation:表示在行上执行的操作类型,I:insert U:update D:delete
           versions_xid:导致该版本的事务唯一标示符。
  4、select  ..... from table_name
     {versions between {timestamp | scn }  {expression | minvalue }
     and {expression | maxvalue}}
     [as of timestamp scn]  --指定字某个时间点或者scn之后的所有行,如果使用minvalue或者maxvalue而没有使用as of子句,oracle将检索自会话以来的数据。
     [where 条件]
三、闪回事务查询
  闪回事务查询就是对flashback_transaction_query视图的查询。
  执行闪回事务查询需要具有select any transaction权限。
  注意事项:如果操作涉及链接行或者特殊的存储结构(如集群表),应该打开最小的补充日志:alter database add supplemental log data;
            在查询组织表时,更新操作总是显示为两步骤:删除、插入
            如果查询涉及已经删除的表或者已经删除的用户,则只显示对象编号和用户id,不显示对象名和用户名。
四、闪回表
  1、权限
    闪回表需要在表上的flashback权限,或者flashback any table权限
    同时需要在表上的insert、update或者delete权限
  2、需要启用行移动
    alter table table_name enable row movement;
  3、flashback table table_name [,table_name ....]
     to
     {scn |timestamp} expression
     [{enable |disable} triggers]

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:45944次
    • 积分:929
    • 等级:
    • 排名:千里之外
    • 原创:48篇
    • 转载:8篇
    • 译文:0篇
    • 评论:0条