使用delete删除数据的情况,如果是truncate只能用数据库闪回
需要注意的一点flashback table的一些限制:
1)启用行移动 alter table table_name enable row movement;
2)不能用于闪回系统表、远程表、外部表;
3)不能跨越DDL语句,即闪回期间如果发生了DDL,则闪回失败
4)9i只能闪回5分钟内的数据,10g有所增强,可以延长到5天,只要undo没有被覆盖
首先需要查出可以闪回的区间:
select versions_starttime,
versions_endtime,
versions_xid,
versions_operation
from 表名 versions between timestamp minvalue and maxvalue
按时间查:
select *
from 表名 versions between timestamp to_timestamp('2014-6-19 14:00:00', 'yyyy-mm-dd hh24:mi:ss') and to_timestamp('2014-6-19 14:10:00', 'yyyy-mm-dd hh24:mi:ss');
恢复:
Alter table 表名 enable row movement;
flashback table 表名 to timestamp to_timestamp('2014-6-19 13:00:00','yyyy-mm-dd hh24:mi:ss');
恢复完后取消行迁移
设置:
show parameter undo;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
undo_retention:指定事物commit后undo 将要保存的时间(秒),在ORACLE10g中默认的是900秒。
GUARANTEE : 保证undo_retention参数所设定的时间有效,这个是10g的新功能。
SQL> ALTER TABLESPACE undotbs1 RETENTION GUARANTEE;
SQL> ALTER TABLESPACE undotbs1 RETENTION NOGUARANTEE;
在没有guarantee的保证下,ORACLE并不能保证能够将undo信息存储900秒,如果undo表空间不足,那么ORACLE将忽略undo_retention的设置,直接覆盖掉以前的undo,这个时候有可能会产生ORA-01555错误。如果undo表空间空间足够,那么undo将会保存很长一段时间,直到undo表空间达到maxsize,这个时候才会覆盖undo信息,而且ORACLE会从最古老的undo信息开始覆盖。
ORACLE推荐我们将undo 表空间中的datafile 设定MAXSIZE ,不要让它一直自动扩展,如果ORACLE获得了自动扩展的能力,那么旧的undo不会被覆盖,到后来undo表空间会越来越大,越来越大,直到将磁盘空间耗尽。
在有guarantee的保证下,ORACLE将会保证undo信息能够保存到undo_retention设定的值之后才被覆盖,如果这个时候同时执行了很多事物,将undo表空间耗完了,那么那个事物会失败,会报ORA-30036 错误,所以使用guarantee一定要慎用,如果非要使用guarantee,那么尽量将undo 表空间设大 一点。
Oracle10g开始,如果你设置UNDO_RETENTION为0,那么Oracle启用自动调整以满足最长运行查询的需要。当然如果空间不足,那么Oracle满足最大允许的长时间查询。而不再需要用户手工调整。
表闪回
猜你喜欢
转载自aigo-h.iteye.com/blog/2082617
今日推荐
周排行