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 query中as 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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/13062352/viewspace-614970/