知识大全 闪回查询(Flashback Query)
Posted 时间
篇首语:亦余心之所善兮,虽九死其犹未悔。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 闪回查询(Flashback Query)相关的知识,希望对你有一定的参考价值。
闪回查询(Flashback Query) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
作者 gototop 一 简介 在过去 如果用户误删/更新了数据后 作为用户并没有什么直接的方法来进行恢复 他们必须求助DBA来对数据库进行恢复 到了Oracle i 这一个难堪局面有所改善 Oracle i中提供了一项新的技术手段 闪回查询 用户使用闪回查询可以及时取得误操作前的数据 并可以针对错误进行相应的恢复措施 而这一切都无需DBA干预 下面我们通过一个例子来具体说明闪回查询的用法 二 示例 使用闪回查询前必须确定下面两个参数 UNDO_MANAGEMENT = AUTO undo_retention = ; #这个时间可以随便设 他表示在系统中保留提交了的UNDO信息的时间 就是保留 分钟 使用闪回查询 SQL> conn sys/sys as sysdba Connected SQL> create user flash identified by flash; User created SQL> grant connect resource to flash; Grant succeeded SQL> grant execute on dbms_flashback to flash; Grant succeeded SQL> conn flash/flash Connected SQL> set echo on SQL> create table t (a varchar ( )); Table created SQL> insert into t values( gototop ); row created SQL> insert into t values( ); row created SQL> / SQL> select * from t; A gototop SQL> set time on : : SQL> : : SQL> : : SQL> delete t where a= gototop ; row deleted : : SQL> mit; Commit plete : : SQL> select * from t; A : : SQL> execute DBMS_FLASHBACK ENABLE_AT_TIME(to_date( : : )); PL/SQL procedure successfully pleted : : SQL> select * from t; A gototop : : SQL> execute DBMS_FLASHBACK DISABLE; PL/SQL procedure successfully pleted : : SQL> select * from t; A 使用闪回查询恢复数据 : : SQL> select * from t; no rows selected : : SQL> insert into t values( ); row created : : SQL> / row created : : SQL> / row created : : SQL> / row created : : SQL> / row created : : SQL> mit; Commit plete : : SQL> / Commit plete : : SQL> / Commit plete : : SQL> select * from t; A rows selected : : SQL> : : SQL> delete t; rows deleted : : SQL> mit; Commit plete : : SQL> mit; Commit plete : : SQL> / Commit plete : : SQL> declare : : cursor flash_recover is : : select * from t; : : t_recode t%rowtype; : : begin : : DBMS_FLASHBACK ENABLE_AT_TIME(to_date( : : )); : : open FLASH_RECOVER; : : DBMS_FLASHBACK DISABLE; : : loop : : FETCH FLASH_RECOVER INTO t_recode; : : EXIT WHEN FLASH_RECOVER%NOTFOUND; : : insert into t values (t_recode a); : : end loop; : : CLOSE FLASH_RECOVER; : : mit; : : end; : : / PL/SQL procedure successfully pleted : : SQL> : : SQL> : : SQL> select * from t; A : : SQL> 我们可以已经恢复了 条纪录 但我们要恢复的 条纪录 为什么会少一条呢?原因就在下面 三 局限性 闪回查询是基于SCN的 虽然我执行的是 DBMS_FLASHBACK ENABLE_AT_TIME(to_date( : : )); 但Oracle并不会精确的这个时间点 而是ROUND DOWN到最近的一次SCN 然后从这个SCN开始进行恢复 而Oracle i是每五分钟记录一次SCN的 并将SCN和对应时间的映射做个纪录 这正是上面我们进行恢复时少了一条的原因 因此如果使用DBMS_FLASHBACK ENABLE_AT_TIME来进行恢复 为了避免恢复失败 我可以先等 分钟 然后再进行恢复 使用DBMS_FLASHBACK ENABLE_AT_TIME进行恢复还有一个缺点 那就是在Oracle i中SCN和对应时间的映射信息只会保留 天 因此我们无法通过DBMS_FLASHBACK ENABLE_AT_TIME来恢复 天前的数据 如果你想使用闪回查询来恢复 天前的数据 你必须自己来确定需要恢复的SCN 然后使用 DBMS_FLASHBACK ENABLE_AT_SYSTEM_CHANGE_NUMBER(SCN_NUMBER); 来定位你的恢复时间点 下面是使用方法 : : SQL> VARIABLE SCN_SAVE NUMBER; : : SQL> EXECUTE :SCN_SAVE := DBMS_FLASHBACK GET_SYSTEM_CHANGE_NUMBER; PL/SQL procedure successfully pleted : : SQL> print SCN_SAVE; SCN_SAVE E+ : : SQL> execute DBMS_FLASHBACK ENABLE_AT_SYSTEM_CHANGE_NUMBER(:SCN_SAVE); PL/SQL procedure successfully pleted 另外 在使用DBMS_FLASHBACK ENABLE_AT_TIME前 你必须设定你的NLS_DATE_FORMAT的精确程度 Oracle默认的是精确到天 如果你不设定 像上面的例子你不会得到预期结果 如果你使用sysdate和DBMS_FLASHBACK GET_SYSTEM_CHANGE_NUMBER来获取时间点或者SCN值 你必须注意它们取得都是当前的时间点和SCN值 你只能在事务开始时进入闪回查询模式 如果之前有DML操作 则必须MIT 闪回查询无法恢复到表结构改变之前 因为闪回查询使用的当前的数据字典 cha138/Article/program/Oracle/201311/18870相关参考
query里面的主要方法 list()可以得到查询的结果集 uniqueResult()如果查询的结果只有一条可以用这个 通过这两句可以实现分页好处是可以跨数据库 querysetFirs
用Flashback功能恢复表中数据 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!这里只罗列出利用
在Flashback数据库上获得较高可用性 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 简介
Oracle10g学习之闪回数据库 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 目标 闪回数
Oracle10G启用闪回功能 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! [oracle@l
用Oracle闪回功能恢复偶然丢失的数据 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 引言
知识大全 使用Oracle10g提供的flashback drop新特性
使用Oracle10g提供的flashbackdrop新特性 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看
Oracle10g数据库中闪回表特性剖析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Orac
程序开发小技巧:Delphi的Query控件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!用Del
Hibernate中Query对象的使用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lishix