用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
发表评论
文章已被作者锁定,不允许评论。
-
DB2 学习笔记
2012-03-19 12:28 0ORACLE CREATE TABLE COLUMN DEFA ... -
Oracle Session
2010-12-14 15:50 760select sid,user,status,machine, ... -
ORACLE【Undo Tablespace】
2010-12-08 15:28 985--查看unco tablespace使用情况的语句 SE ... -
oracle asm学习
2010-12-08 11:11 8981.什么是ASM ASM全称 ... -
Oracle学习之路【六】确定当前ORACLE的性能瓶颈
2010-12-03 13:57 801确定当前ORACLE的性能瓶颈 首先,利用V$SYSTEM_ ... -
Java排序【转】
2010-12-03 13:46 763=============================== ... -
Oracle学习之路【二】
2010-12-03 13:43 773=============================== ... -
Oracle学习之路【一】
2010-12-03 13:32 728============================= ... -
染指内存数据库【一】
2010-10-25 13:35 923IBM solidDB 可以部署为一个独立的内存数据库 ... -
ORACLE索引表学习
2010-08-18 16:45 1297索引表与标准表的差异 一、索引表中的ROW ... -
ORACLE零散乱记
2010-06-15 15:15 964PGA_AGGREGATE_TARGET = (物理内存大小 ... -
ORACLE10g 自动SGA管理(一)
2010-01-23 19:33 920SGA -- 数据库块缓冲高速缓存 (db_cache_ ... -
ORACLE10g 闪回表学习
2010-01-23 19:20 636当表被Drop掉后,表及其相关对象被放在一个称 ... -
ORACLE10g ASSM 学习(二)
2010-01-20 21:14 726创建存储过程show_space create or ... -
ORACLE10g ASSM 学习(一)
2010-01-20 20:51 767创建存储过程show_space_assm CREAT ... -
ORACLE10g学习笔记(六)
2010-01-17 23:06 7651. 自动碎片整理 Coalesce ... -
ORACLE10g学习笔记(五)
2010-01-17 19:48 5761. 检查Oracle的进程 $ ... -
ORACLE10g学习笔记(四)
2010-01-17 19:41 7281. 实时查询最耗CPU资源的SQL语句 1. 先通过top ... -
ORACLE10g学习笔记(三)
2010-01-17 17:40 7461. 数据库字符集 通过AL ... -
ORACLE10g学习笔记(二)
2010-01-17 16:29 7321. 表内操作 表内操作 -- 1 -- 删除原主键 ...
相关推荐
ORACLE9i-分析函数参考手册-物化视图-Flashback Query.doc
《Flashback_code-master》压缩包中的内容主要涉及的是机器学习领域的技术,特别是针对某篇论文的复现代码。从文件名来看,"Flashback"可能是一个特定的算法或模型,而"code-master"则暗示了这是一个核心代码仓库,...
Flashback Query 通过使用多版本读一致性的 undo 表空间来读取操作前的记录数据。Flashback Query 有多种查询方式,包括 as of timestamp 和 as of scn 两种。 1. as of timestamp 查询方式 该方式可以恢复到某个...
- 所有的Flashback操作都有时效性,因为数据库会定期清理旧的Redo信息以释放空间,所以尽快进行恢复操作至关重要。 - Flashback操作可能会影响数据库性能,因此在生产环境中应谨慎使用。 总的来说,Oracle的这些...
这一技术在Oracle 10g版本中得到了极大的增强和发展,形成了一个完整的“Flashback家族”,其中包括Flashback Database、Flashback Drop、Flashback Query(进一步细分为Flashback Query、Flashback Version Query、...
这一特性允许恢复已被DROP的表,只需简单地使用Flashback Drop命令,前提是DROP操作还未被清理。 总的来说,Oracle Flashback技术提供了一套全面的数据库恢复策略,可以灵活地处理多种场景下的数据恢复需求。不过...
Oracle 10g中的Flashback特性是一项革命性的创新,旨在帮助用户更有效地管理和恢复数据库中的错误操作。Flashback主要包含了四种关键功能:Flashback Query、Table Flashback、Delete Flashback和Flashback Database...
Oracle 闪回特性 FLASHBACK & RECYCLEBIN Flashback 系列是 Oracle 数据库中的一组功能强大且实用的闪回机制,旨在帮助数据库管理员和开发者快速恢复数据库中的各种对象,包括表、数据、事务等。Flashback 系列的...
这项技术基于Undo Segment中的内容,允许用户轻松地回退数据库、表、查询等至特定的时间点,而无需进行复杂的恢复操作。 #### 二、Flashback技术的基础 - **Undo Segment**:Flashback技术的核心在于Undo Segment...
Oracle Flashback 技术为数据库管理和恢复提供了强大的工具,尤其是在应对数据丢失或误操作的情况下。通过合理配置和使用这些功能,可以显著提高数据库的可靠性和可用性。然而,也需要注意其限制条件,并确保有足够...
Flashback-技术-总结.txt"和"oracle_10g_flashback(数据恢复).txt"以及"oracle_10g_flashback.txt"这三份文档可能提供了一个全面的概述,包括Flashback日志、闪回数据库(Flashback Database)、闪回事务查询...
Flashback技术为Oracle 10g引入了一种新的数据恢复机制,与传统的恢复技术相比,它的优势在于速度快、操作简单且只需恢复更改的数据部分而非整个数据库或文件。Flashback技术主要包括以下几个方面:Flashback ...
在Oracle 10g版本中,Flashback技术家族包括了多个成员,如Flashback Database、Flashback Drop、Flashback Query(又细分为Flashback Query、Flashback Version Query、Flashback Transaction Query)和Flashback ...
- 用于恢复单个表到先前的状态,这在误操作后特别有用。 Oracle的闪回技术是其强大的数据保护和恢复机制的一部分,提供了灵活性和便利性,使数据库管理员能够在不影响其他用户的情况下恢复到特定时间点的数据状态...
与传统的恢复方法相比,这种方法更加简单高效,无需执行复杂的时间点恢复操作。使用 **Flashback Database** 语句,用户可以直接将数据库恢复到指定的时间点或 SCN,而不必担心数据的一致性问题。 #### Oracle ...
### Oracle 9i以上版本中的闪回功能及误操作后的数据恢复 在Oracle数据库系统中,数据的安全性和完整性至关重要。为了应对可能出现的数据误删除、更新等意外情况,Oracle自9i版本起引入了闪回技术(Flashback)。该...
Oracle Flashback技术是Oracle数据库10g及后续版本中的一项重要特性,它提供了一种快速、简单的方式来恢复数据,尤其适用于逻辑错误引起的数据库损坏场景。Flashback技术允许用户查看、查询和恢复数据至任意历史时间...