网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > ORACLE > 正文

oracle中关于flashback闪回的介绍

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 14/07/18

鉴于大家对ORACLE十分关注,我们编辑小组在此为大家搜集整理了“oracle中关于flashback闪回的介绍”一文,供大家参考学习!

    1、必须设定undo保留时间足够大以能够重构需要闪回的数据
    ALTER SYSTEM SET UNDO_RETENTION=<SECONDS>; seconds值是undo数据保持的秒数。
    Flashback view是由undo retention interval来限制的。
    2、包DBMS_FLASHBACK提供了需求接口
    call dbms_flashback.enable_at_time(‘2010-10-19:11:00:00’);
    call dbms_flashback.disable();
    -------------------------------------
    enable_at_time:会话级的enable flashback,映像时间被设定为最接近指定时间戳的scn
    enable_at_system_change_number:将数据库闪回到指定的scn号。
    get_system_change_number:返回当前的scn。
    disable:这个存储过程允许我们在整个会话内停止flashback并将你带回当前时间的数据状态。
    ----------
    dbms_flashback.enable存储过程不可以在有活动事务的时候执行,并且,这个包不能用sys身份执行。
    在使用DBMS_FLASHBACK.ENABLE_AT_TIME前,你必须设定你的NLS_DATE_FORMAT的精确程度,Oracle默认的是精确到天
    3、timestamp 与scn(系统改变号) 的对应关系
    事实上,Oracle在内部都是使用scn,即使你指定的是as of timestamp,oracle也会将其转换成scn,系统时间标记与scn之间存在一张表,即SYS下的SMON_SCN_TIME表。
    每隔5分钟,系统产生一次系统时间标记与scn的匹配并存入sys.smon_scn_time表,该表中记录了最近1440个系统时间标记与scn的匹配记录,由于该表只维护了最近的1440条记录,因此如果使用as of timestamp的方式则只能flashback最近5天内的数据(假设系统是在持续不断运行并无中断或关机重启之类操作的话)。SYS.SMON_SCN_TIME最多拥有1440条记录。这个最大记录数是这样计算出来的,ORACLE平均每5分钟同步一次该表数据,最大保存最近5天的记录,因此就相当于12(每小时更新次数)*24*5=1440。
    可以用sql验证一下:
    Sql代码
    select scn,to_char(time_dp,''yyyy-mm-dd hh24:mi:ss'') from sys.smon_scn_time;
    10g中提供了两个函数scn_to_timestamp() 和timestamp_to_scn() 用来执行时间戳和SCN的转换。
    下面使用闪回进行演示一下:
    1、登陆到数据库。
    Sql代码
    C:\>sqlplus tivan/tivan
    SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 10月 19 22:24:03 2010
    Copyright (c) 1982, 2005, Oracle.  All rights reserved.
    连接到:
    Oracle Database 10g Enterprise Edition Release 10.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 dbms_flashback.get_system_change_number from dual;
    GET_SYSTEM_CHANGE_NUMBER
    ------------------------
    1482649
    SQL> select count(*) from t1 as of scn 1482600;
    COUNT(*)
    ----------
    8302
    SCN=1482600时,t1表中的所有记录都还在。
    5、利用闪回恢复数据。
    查看验证一下:
    Sql代码
    SQL> insert into t1 select * from t1 as of scn 1482600;
    已创建8302行。
    SQL> commit;
    提交完成。
    结果OK
    或者还可以如下操作
    Sql代码
    SQL>flashback table t1 to scn 1482600;
    SQL> commit;
    Commit complete.
    --对于drop table t1 的操作flashback
    SQL> drop table t1;
    SQL>COMMIT;
    SQL> flashback table t1to before drop;
    SQL>commit;
    对于怎么取的SCN可以使用timestamp_to_scn() 函数,如:
    Sql代码
    select timestamp_to_scn(to_timestamp(''2010-10-19 21:00:00'',''YYYY-MM-DD HH:MI:SS'')) from dual;

网学推荐

免费论文

原创论文

设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号