`
feng5hao
  • 浏览: 23081 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

9i新特性之Flashback Query的应用-------------针对DML误操作的恢复【转】

阅读更多
用dbms_flashback包

dbms_flashback 包提供了以下几个函数:

enable_at_time:设置当前session 的闪回查询时间

enable_at_system_change_number:设置当前session的闪回查询scn

get_system_change_number:取得当前数据库的scn

disable:关闭当前session 的闪回查询
如:

sql> select dbms_flashback.get_system_change_number from dual;

 

get_system_change_number

------------------------

                 8053651

当将一个session 设置为闪回查询模式之后,后续的查询都会基于那个时间点或者scn 的数据库状态,如果session 结束,那么即使没有明确指定disable,闪回查询也会自动失效。在session 运行在闪回查询状态时,是不允许进行任何dml 和ddl 操作。如果要用dml操作来进行数据恢复就必须使用pl/sql 游标(其实,这里也就是给我们提供了一个数据恢复的方法)。即使session 运行在闪回查询模式,sysdate 函数也不会受到影响,仍然会返回当前正确的系统时间。

下面我们用一个例子说明如何使用dbms_flashback 包来恢复数据。

假设由于误操作删除了scott.emp 表中的所有数据,现在我们要恢复。

sql> delete from emp;

14 rows deleted.

sql> commit;

commit complete.

sql> select count(*) from emp;

count(*)

----------

0

然后执行下面的sql 创建一个存储过程用于恢复数据

create or replace procedure prc_recoveremp is

cursor c_emp is

select * from scott.emp;

v_row c_emp%rowtype;

begin

dbms_flashback.enable_at_time(systimestamp - interval 1 day);

open c_emp;

dbms_flashback.disable;

loop

fetch c_emp

into v_row;

exit when c_emp%notfound;

insert into scott.emp

values

(v_row.empno,

v_row.ename,

v_row.job,

v_row.mgr,

v_row.hiredate,

v_row.sal,

v_row.comm,

v_row.deptno);

end loop;

close c_emp;

commit;

end prc_recoveremp;

sql> execute prc_recoveremp;

pl/sql procedure successfully completed.

sql> select count(*) from emp;

count(*)

----------

14

到此成功结束,检查emp 表可以看到所有的数据已经全部都恢复了。

备注:在存储过程中我们创建了游标之后就将执行了dbms_flashback.disable,只

有这样我们才能在这个session 中进行dml 操作。否则将产生ora-08182 错误,in

flashback mode, user cannot perform dml or ddl operations。

上面我们已经介绍了关于如何的应用flashback query来恢复dml的误操作,但都是基于时间点(timestamp)的,其实呢,尽管timestamp可以精确到毫秒,可是由于{oracle 每隔5分钟会将产生的 scn 对应一个 time 做记录 ,也就是说通常只记录了scn,但是每5分钟会记录 scn and time  }(这段话需要深入的考究),当采用 timestamp 来做flashback 的时候就有可能产生偏差,5分钟的来由是在于表sys.smon_scn_time,我们可以察看一下:

该表的记录一共是1440行,那来几行可以看看

 

    thread    time_mp time_dp        scn_wrp    scn_bas

---------- ---------- ----------- ---------- ----------

         1 1072772527 2003-12-30           0    8052536

         1 1072772834 2003-12-30           0    8053330

         1 1072773142 2003-12-30           0    8054053

         1 1072773446 2003-12-30           0    8054845

    可以看到,每行的timestamp差上5分钟左右,实际上,每5分钟,smon删除最旧的数据并且插入当前的信息,这也就可以推算出为什么无论你的undo retention 设置多大,flashback query 只能用5天(1440*5/24/60 )。所以基于scn的flashback query是最准确的

    举个例子看看:

sql> select * from lyb;

 

未选定行

sql> insert into lyb values (1);

 

已创建 1 行。

 

sql> commit;

 

提交完成。

sql> select dbms_flashback.get_system_change_number from dual;

get_system_change_number

------------------------

                 8058302

sql> delete from lyb;

 

已删除 1 行。

 

sql> commit;

 

提交完成。

 

sql> select dbms_flashback.get_system_change_number from dual;

 

get_system_change_number

------------------------

                 8058379

 

sql> select * from lyb as of scn 8058302

  2  ;

 

        id

----------

         1

sql> select * from lyb as of scn 8058379

2         ;

 

未选定行

sql>

 

 

所以说,基于scn的恢复才是能够做到精确!

当然,我们很明显遇到的问题是,如果真正的误操作,我那里会记录scn啊?这里就设计到另外的一个oracle很好用的工具,logminer,下次介绍!

 

注:sys 用户不允许执行dbms_flashback 包,将会产生ora-08185 错误,

flashback not supported for user sys

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    ORACLE9i-分析函数参考手册-物化视图-Flashback Query.doc

    ORACLE9i-分析函数参考手册-物化视图-Flashback Query.doc

    Flashback_code-master.rar

    《Flashback_code-master》压缩包中的内容主要涉及的是机器学习领域的技术,特别是针对某篇论文的复现代码。从文件名来看,"Flashback"可能是一个特定的算法或模型,而"code-master"则暗示了这是一个核心代码仓库,...

    oracle flashback特性(闪回语句,闪回表,闪回数据库).doc

    Flashback Query 通过使用多版本读一致性的 undo 表空间来读取操作前的记录数据。Flashback Query 有多种查询方式,包括 as of timestamp 和 as of scn 两种。 1. as of timestamp 查询方式 该方式可以恢复到某个...

    Oracle对于误删误操作的数据进行恢复(flashback query、flashback drop、flashback table、flashback database)

    - 所有的Flashback操作都有时效性,因为数据库会定期清理旧的Redo信息以释放空间,所以尽快进行恢复操作至关重要。 - Flashback操作可能会影响数据库性能,因此在生产环境中应谨慎使用。 总的来说,Oracle的这些...

    Oracle_Flashback家族

    这一技术在Oracle 10g版本中得到了极大的增强和发展,形成了一个完整的“Flashback家族”,其中包括Flashback Database、Flashback Drop、Flashback Query(进一步细分为Flashback Query、Flashback Version Query、...

    Oracle_Flashback_技术_总结.pdf

    这一特性允许恢复已被DROP的表,只需简单地使用Flashback Drop命令,前提是DROP操作还未被清理。 总的来说,Oracle Flashback技术提供了一套全面的数据库恢复策略,可以灵活地处理多种场景下的数据恢复需求。不过...

    Oracle10g新特性Flashback探究.pdf

    Oracle 10g中的Flashback特性是一项革命性的创新,旨在帮助用户更有效地管理和恢复数据库中的错误操作。Flashback主要包含了四种关键功能:Flashback Query、Table Flashback、Delete Flashback和Flashback Database...

    Oracle 闪回特性 FLASHBACK & RECYCLEBIN

    Oracle 闪回特性 FLASHBACK & RECYCLEBIN Flashback 系列是 Oracle 数据库中的一组功能强大且实用的闪回机制,旨在帮助数据库管理员和开发者快速恢复数据库中的各种对象,包括表、数据、事务等。Flashback 系列的...

    Oracle Flashback技术总结

    这项技术基于Undo Segment中的内容,允许用户轻松地回退数据库、表、查询等至特定的时间点,而无需进行复杂的恢复操作。 #### 二、Flashback技术的基础 - **Undo Segment**:Flashback技术的核心在于Undo Segment...

    oracle flashback技术总结

    Oracle Flashback 技术为数据库管理和恢复提供了强大的工具,尤其是在应对数据丢失或误操作的情况下。通过合理配置和使用这些功能,可以显著提高数据库的可靠性和可用性。然而,也需要注意其限制条件,并确保有足够...

    flashback——oracle

    Flashback-技术-总结.txt"和"oracle_10g_flashback(数据恢复).txt"以及"oracle_10g_flashback.txt"这三份文档可能提供了一个全面的概述,包括Flashback日志、闪回数据库(Flashback Database)、闪回事务查询...

    Less17_Flashback_TB3.pdf

    Flashback技术为Oracle 10g引入了一种新的数据恢复机制,与传统的恢复技术相比,它的优势在于速度快、操作简单且只需恢复更改的数据部分而非整个数据库或文件。Flashback技术主要包括以下几个方面:Flashback ...

    flashback闪回技术

    在Oracle 10g版本中,Flashback技术家族包括了多个成员,如Flashback Database、Flashback Drop、Flashback Query(又细分为Flashback Query、Flashback Version Query、Flashback Transaction Query)和Flashback ...

    oracle 闪回 flashback

    - 用于恢复单个表到先前的状态,这在误操作后特别有用。 Oracle的闪回技术是其强大的数据保护和恢复机制的一部分,提供了灵活性和便利性,使数据库管理员能够在不影响其他用户的情况下恢复到特定时间点的数据状态...

    oracle 10g flashback(数据恢复)

    与传统的恢复方法相比,这种方法更加简单高效,无需执行复杂的时间点恢复操作。使用 **Flashback Database** 语句,用户可以直接将数据库恢复到指定的时间点或 SCN,而不必担心数据的一致性问题。 #### Oracle ...

    Oracle 9i以上的闪回,用于误操作后的数据恢复

    ### Oracle 9i以上版本中的闪回功能及误操作后的数据恢复 在Oracle数据库系统中,数据的安全性和完整性至关重要。为了应对可能出现的数据误删除、更新等意外情况,Oracle自9i版本起引入了闪回技术(Flashback)。该...

    dba数据恢复flashback

    Oracle Flashback技术是Oracle数据库10g及后续版本中的一项重要特性,它提供了一种快速、简单的方式来恢复数据,尤其适用于逻辑错误引起的数据库损坏场景。Flashback技术允许用户查看、查询和恢复数据至任意历史时间...

Global site tag (gtag.js) - Google Analytics