您当前的位置: 首页 > 数据库教程 > Oracle教程 > oracle 中关于flashback闪回的介绍

oracle 中关于flashback闪回的介绍

作者:不详 来源:网络 发布时间: 2011-10-15 10:37 点击:
1、必须设定undo保留时间足够大以能够重构需要闪回的数据 ALTER SYSTEM SET UNDORETENTION=;seconds值是undo数据保持的秒数。 Flashback view是由undo retention interval来限制的。 2、包DBMSFLASHBACK提供了需求接口 call dbmsflashback.enableattime(2010-10-19:1

oracle 中关于flashback闪回的介绍

  1、必须设定undo保留时间足够大以能够重构需要闪回的数据
  
  ALTER SYSTEM SET UNDORETENTION=;seconds值是undo数据保持的秒数。
  
  Flashback view是由undo retention interval来限制的。
  
  2、包DBMSFLASHBACK提供了需求接口
  
  call dbmsflashback.enableattime(‘2010-10-19:11:00:00’);
  
  call dbmsflashback.disable();
  
  -------------------------------------
  
  enableattime:会话级的enable flashback,映像时间被设定为最接近指定时间戳的scn
  
  enableatsystemchangenumber:将数据库闪回到指定的scn号。
  
  getsystemchangenumber:返回当前的scn。
  
  disable:这个存储过程允许我们在整个会话内停止flashback并将你带回当前时间的数据状态。
  
  ----------
  
  dbmsflashback.enable存储过程不可以在有活动事务的时候执行,并且,这个包不能用sys身份执行。
  
  在使用DBMSFLASHBACK.ENABLEATTIME前,你必须设定你的NLSDATEFORMAT的精确程度,Oracle默认的是精确到天
  
  3、timestamp与scn(系统改变号)的对应关系
  
  事实上,Oracle在内部都是使用scn,即使你指定的是as of timestamp,oracle也会将其转换成scn,系统时间标记与scn之间存在一张表,即SYS下的SMONSCNTIME表。
  
  每隔5分钟,系统产生一次系统时间标记与scn的匹配并存入sys.smonscntime表,该表中记录了最近1440个系统时间标记与scn的匹配记录,由于该表只维护了最近的1440条记录,因此如果使用as of timestamp的方式则只能flashback最近5天内的数据(假设系统是在持续不断运行并无中断或关机重启之类操作的话)。SYS.SMONSCNTIME最多拥有1440条记录。这个最大记录数是这样计算出来的,ORACLE平均每5分钟同步一次该表数据,最大保存最近5天的记录,因此就相当于12(每小时更新次数)*24*5=1440。
  
  可以用sql验证一下:
  
  Sql代码
  
  select scn,tochar(timedp,“yyyy-mm-dd hh24:mi:ss“)from sys.smonscntime;
  
  10g中提供了两个函数scntotimestamp()和timestamptoscn()用来执行时间戳和SCN的转换。
  
  下面使用闪回进行演示一下:
  
  1、登陆到数据库。
  
  Sql代码
  
  C:\>sqlplus tivan/tivan
  
  SQL*Plus:Release10.2.0.1.0-Production on星期二10月1922:24:032010
  
  Copyright(c)1982,2005,Oracle.All rights reserved.
  
  连接到:
  
  Oracle Database10g Enterprise Edition Release10.2.0.1.0-Production
  
  With the Partitioning,OLAP and Data Mining options
  
  2、查看表的记录。
  
  Sql代码
  
  SQL>select count(*)from t1
  
  2;
  
  COUNT(*)
  
  ----------
  
  8302
  
  3、删除所有的记录提交。
  
  Sql代码
  
  SQL>delete from t1
  
  2;
  
  已删除8302行。
  
  SQL>commit;
  
  提交完成。
  
  4、获得当前SCN
  
  如果能够确切知道删除之前SCN最好,如果不知道,可以进行闪回查询尝试。
  
  Sql代码
  
  SQL>select dbmsflashback.getsystemchangenumber from dual;
  
  GETSYSTEMCHANGENUMBER
  
  ------------------------
  
  1482649
  
  SQL>select count(*)from t1as of scn1482600;
  
  COUNT(*)
  
  ----------
  
  8302
  
  SCN=1482600时,t1表中的所有记录都还在。
  
  5、利用闪回恢复数据。
  
  查看验证一下:
  
  Sql代码
  
  SQL>insert into t1select*from t1as of scn1482600;
  
  已创建8302行。
  
  SQL>commit;
  
  提交完成。
  
  结果OK
  
  或者还可以如下操作
  
  Sql代码
  
  SQL>flashback table t1to scn1482600;
  
  SQL>commit;
  
  Commit complete.
  
  --对于drop table t1的操作flashback
  
  SQL>drop table t1;
  
  SQL>COMMIT;
  
  SQL>flashback table t1to before drop;
  
  SQL>commit;
  
  对于怎么取的SCN可以使用timestamptoscn()函数,如:
  
  Sql代码
  
  select timestamptoscn(totimestamp(“2010-10-1921:00:00“,“YYYY-MM-DD HH:MI:SS“))from dual;

分享到:
本文"oracle 中关于flashback闪回的介绍"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4