ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle flashback技术

oracle flashback技术

原创 Linux操作系统 作者:qq19398962 时间:2009-09-18 10:52:08 0 删除 编辑

1.       自动撤销管理表空间
提到自动撤销管理表空间,就不得不提手动管理的回滚段。常说的手动管理是指回滚段,而自动撤销管理是指undo表空间。Ora-1555就是典型的回滚段设置不合适触发的。
是否启用自动管理的撤销表空间由两个初始化参数决定:
undo_management
:值为auto表示使用了自动撤销管理表空间,manual则表示手动管理。
undo_tablespace
:当undo_management值为auto时,该参数用来指定当前的undo表空间名称。

 

Undo表空间的大小,直接影响到flashback 的查询能力,因为多版本查询所依赖的undo数据都存储在undo表空间中,该表空间越大,所能够存储的undo数据自然也越多,如果该表空间可用空间非常小,别说flashbck了,恐怕正常查询都有可能触发ora-1555

 

Undo_retention参数,该参数用来指定undo记录保存的最长时间,以秒为单位,是个动态参数,完全可以在实例运行时随时修改通常默认是900秒,也就是15分钟。

一定要注意,undo_retention只是指定undo数据的过期时间,并不是说,undo中的数据一定会在undo表空间保存15分钟,比如说刚一个新事务开始的时候,如果undo表空间已经被写满,则新事务的数据会自动覆盖已提交事务的数据,不管这些数据是否已过期。

提示:只有在一种情况下,undo表空间能够确保undo中的数据在undo_retention指定时间过期前一定有效,就是因为undo表空间指定retention  guarantee,指定之后,oracle对于undo表空间中未过期的undo数据不会覆盖,例如:

SQL>alter  tablespace  undotbs1  retention  guarantee

 

 

FLASHBACK  需要打开自动撤销管理表空间


Flashback  query

这个功能主要是对误删除或人为删除的表记录进行恢复

基于时间的恢复:恢复距离删除数据已经有5分钟左右的例子。

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

SQL>insert  into  test2  select * from test2  as  of  timestamp  sysdate-5/1440  where  条件。
 

基于scn号的恢复:

1.通过SMON_SCN_TIME视图来获取SCN与时间的对应关系。
SQL>select   scn , to_char(time_dp,’YYYY-MM-DD  HH24:MI:SS’) time  from  sys.smon_scn_time;
2.
通过使用以下两个函数查询SCN和时间的对应关系。
SQL>desc  timestamp_to_scn
SQL>select  timestamp_to_scn(to_date(‘2009-04-12  16:55:39’,’yyyy-mm-dd  hh24:mi:ss’))  from  dual;
SQL>desc  scn_to_timestamp
SQL>select  scn_to_timestamp(351277605)  from dual;

 

当我们知道SCN号的时候,恢复也就比较容易了。
SQL>select  *  from  test2  as  of  scn  344197

SQL>insert into  test2  select * from  test2  as  of  scn  344197  where  id  not  in(select  id  from  test2);

 

   每隔5分钟,系统产生一次系统时间标记与scn的匹配并存入SYS.SMON_SCN_TIME表,假如该表记录了最近1440个系统时间标记与SCN的匹配记录,由于该表只维护了最近的1440条记录,因此如果使用as  of  timestamp的方法则只能flashback最近5天内的数据。

 

 

FLASHBACK TABLE

如果我们把Flashback query看做是恢复记录,则flashback  table就是用来恢复表的。

oracle10g中又新引入了一个叫做Recycle Bin的功能,被删除的表并非真正删除,而是先通过修改数据字典的方式,将其改名并放入recyclebin,如果要恢复recyclebin中的对象的话,借助flashback table是最简便的方式。除此之外,flashback也提供了类似flashback queryas  of  scn/timestamp的方式,借助undo数据,直接将现有的表恢复到某个指定的时间或SCN时的状态。

recyclebin中恢复
SQL>select object_name,original_name  from  recyclebin;
SQL>flashback  table  tablename  to  before  drop;
SQL>flashback table tablename  to  before  drop  rename to  newtablename;

SQL>flashback  table  tablename  to  scn  scn_ID

 

如何强制删除一张表,而不让它留在recyclebin
1.SQL>drop  table  tablename  purge

2.SQL>alter  session  set  recyclebin=off;
 SQL>drop table tablename;

 

recyclebin进行操作
SQL>purge  table  tablename
SQL>pruge  recyclebin

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13062352/viewspace-614970/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-08-08

  • 博文量
    22
  • 访问量
    31197