知识大全 闪回查询(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

相关参考

知识大全 hibernate对查询的几个知识点

  query里面的主要方法  list()可以得到查询的结果集  uniqueResult()如果查询的结果只有一条可以用这个  通过这两句可以实现分页好处是可以跨数据库  querysetFirs

知识大全 用Flashback功能恢复表中数据

用Flashback功能恢复表中数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!这里只罗列出利用

知识大全 在Flashback数据库上获得较高可用性

在Flashback数据库上获得较高可用性  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  简介 

知识大全 Oracle10g学习之闪回数据库

Oracle10g学习之闪回数据库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  目标  闪回数

知识大全 Oracle10G启用闪回功能

Oracle10G启用闪回功能  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  [oracle@l

知识大全 用Oracle闪回功能恢复偶然丢失的数据

用Oracle闪回功能恢复偶然丢失的数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  引言  

知识大全 使用Oracle10g提供的flashback drop新特性

使用Oracle10g提供的flashbackdrop新特性  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 Oracle10g数据库中闪回表特性剖析

Oracle10g数据库中闪回表特性剖析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Orac

知识大全 Delphi的Query控件

程序开发小技巧:Delphi的Query控件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!用Del

知识大全 Hibernate中Query对象的使用

Hibernate中Query对象的使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lishix