当你对数据库的数据进行update后,并commit。 但是你马上又后悔了你所做的更改,或者你在做update的时候忘记了加where条件 致使大量的数据被更改。
如果你的数据库是oracle9i那么就可以利用 9i的新特性闪回查询
首先查看系统参数看是否支持闪回查询
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ---------
undo_management string AUTO
undo_retention integer 10800
undo_suppress_errors boolean FALSE
undo_tablespace string UNDOTBS1
参数 undo_management 为 auto 表示可以
undo_retention 表示可以闪回的时间,默认为3 个小时。
9i支持闪回查询的包:dbms_flashback
需要在非dba用户下,例如:system 进行操作
SQL> execute dbms_flashback.enable_at_time(sysdate-1/24/3);
1/24/3:系统当前时间 的前8个小时的数据。
执行完成之后,在当前的session下进行查询就可以查到历史数据。
如果要回到原来的实时数据
SQL> execute dbms_flashback.disable
局限性
1、闪回查询是基于SCN的,虽然我执行的是:
DBMS_FLASHBACK.ENABLE_AT_TIME(to_date('2003-05-16 15:37:23'));
但Oracle并不会精确的这个时间点,而是ROUND DOWN到最近的一次SCN,然后从这个SCN开始进行恢复。而Oracle 9i是每五分钟记录一次SCN的,并将SCN和对应时间的映射做个纪录。
这正是上面我们进行恢复时少了一条的原因。因此如果使用DBMS_FLASHBACK.ENABLE_AT_TIME来进行恢复,为了避免恢复失败,我可以先等5分钟,然后再进行恢复。
使用DBMS_FLASHBACK.ENABLE_AT_TIME进行恢复还有一个缺点,那就是在Oracle 9i中SCN和对应时间的映射信息只会保留5天,因此我们无法通过DBMS_FLASHBACK.ENABLE_AT_TIME来恢复5天前的数据。如果你想使用闪回查询来恢复5天前的数据,你必须自己来确定需要恢复的SCN,然后使用
DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER(SCN_NUMBER); 来定位你的恢复时间点,下面是使用方法:
15:58:58 SQL> VARIABLE SCN_SAVE NUMBER;
16:13:43 SQL> EXECUTE :SCN_SAVE := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER;
PL/SQL procedure successfully completed.
16:13:50 SQL> print SCN_SAVE;
SCN_SAVE
----------
2.1202E+11
16:28:34 SQL> execute DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER(:SCN_SAVE);
PL/SQL procedure successfully completed.
另外,在使用DBMS_FLASHBACK.ENABLE_AT_TIME前,你必须设定你的NLS_DATE_FORMAT的精确程度,Oracle默认的是精确到天,如果你不设定,像上面的例子你不会得到预期结果。
2、如果你使用sysdate和DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER来获取时间点或者SCN值,你必须注意它们取得都是当前的时间点和SCN值。
3、你只能在事务开始时进入闪回查询模式,如果之前有DML操作,则必须COMMIT。
4、闪回查询无法恢复到表结构改变之前,因为闪回查询使用的当前的数据字典。
分享到:
相关推荐
本实验手册重点介绍了Oracle 10G及以后版本的主要闪回技术,并强调其实用性。 在使用闪回技术前,有两个关键点需要注意: 1. 用户需要对`dbms_flashback`包具有执行权限,这是执行闪回操作的基础。 2. 必须启用自动...
在Oracle 9i及之后的版本中,闪回功能得到了显著增强,使得用户可以更方便地恢复误操作,而不必依赖于传统的备份和恢复策略。 在Oracle 9i中引入的闪回查询(Flashback Query)主要依赖于自动回滚段管理(AUM)。...
本文将详细介绍 Oracle 10g 的三种闪回技术:全库闪回、表被 DROP 后的闪回以及表被 DML 操作之后的闪回,并探讨与这些闪回技术相关的因素。 #### 一、全库闪回 全库闪回是指将整个数据库恢复到某个特定的时间点或...
此操作将覆盖现有数据,闪回点之后的所有数据都将丢失。 - **表级别闪回**:可以恢复单个表到过去某一时间点或SCN的状态。与数据库级别的闪回相比,这种方式更为精确且影响范围更小。 - **事务级别闪回**:主要...
每个被修改的数据在数据库中都会产生新的版本,Oracle数据文件仅保留最新提交的版本,而旧版本则会被存储在回滚表空间中,直到被覆盖或超过设定的时间。 2. **闪回技术类型** - **闪回查询**:允许用户查询过去...
闪回查询是Oracle数据库提供的一个非常强大的特性,它允许用户查询过去某个时间点的数据状态。这种方法适用于当数据被删除但未超过撤销保留时间(Undo Retention Time)的情况。撤销保留时间是指在数据被删除之后,...
- **11g支持的闪回方式**:Oracle 11g 支持多种闪回功能,包括但不限于闪回查询、闪回表、闪回事务查询、闪回数据库、闪回删除、闪回版本查询、闪回数据归档等。 #### 五、完全恢复与不完全恢复 - **完全恢复**:...
- **回闪查询(Flashback Query)**: Oracle提供的一种特殊查询方式,允许用户查询某一时刻的数据库状态。这对于恢复误删数据非常有用。 - **备份**: 定期对数据库进行备份是非常重要的。当数据丢失或损坏时,可以通过...
Oracle数据库的闪回技术是其强大恢复功能的一部分,它允许用户恢复数据到过去的一个特定时间点或系统改变号(SCN)。在第16章"Oracle Database 11g闪回技术"的学习中,我们将深入理解这一关键特性,以及如何在实际...
4. **闪回区大小**:查询时间点的数据受到闪回区大小的影响,如果闪回区过小,可能无法查询到较早时间点的数据。 5. **版本兼容性**:`AS OF TIMESTAMP`是在Oracle 11g及更高版本中引入的特性,因此在低版本的...
在Oracle 9i数据库系统中,闪回查询(Flashback Query)是一项强大的功能,它允许用户恢复误删除或误更新的数据,而无需依赖DBA的帮助。这一特性显著提高了数据库的可恢复性和用户自主性。在本文中,我们将深入探讨...
3. **UNDO表空间** : 用于存储回滚段,记录事务的改动,使得在事务回滚或闪回查询时能够恢复到事务开始前的状态。UNDO数据在事务提交后会自动删除。 4. **TEMP表空间** : 存储临时数据,如排序和聚合操作产生的中间...
注意:如果启用了闪回功能,此命令也会删除相关的闪回数据。 4. **清理未管理的归档日志**:执行`CROSSCHECK ARCHIVELOG ALL;`和`DELETE EXPIRED ARCHIVELOG ALL;`命令来清理控制文件中未管理的归档日志记录。 ###...
为了应对这类问题,Oracle自9i版本起引入了一系列闪回(Flashback)特性,极大地提高了数据库的容错性和数据恢复能力。本文将详细介绍从Oracle 9i到10g版本中提供的多种闪回功能。 #### 二、从Oracle 9i开始的...
* 补救:在 DBA 执行错误的数据提交操作之后,还能把数据恢复还原到之前某个时刻的状态,最大程度地挽回损失。 二、MySQL 中的闪回实现方案 MySQL 中的闪回实现方案可以分为 DDL闪回实现方案和 DML 闪回实现方案。...
3. **闪回技术**:Oracle提供了多种闪回功能,如闪回数据库、闪回表、闪回查询等,可以在不依赖备份的情况下,快速恢复到某个时间点的状态。这在应对误操作或短暂的逻辑错误时非常有用。 4. **恢复计划**:创建恢复...
- **用户错误**: 如果用户意外删除或修改了数据,可以使用回收站或闪回功能来恢复。 - **实例错误**: 如断电等情况,可以通过启动命令重新启动实例,并使用预警日志、跟踪文件和Enterprise Manager来调查错误原因。 ...
此外,Oracle的闪回技术进一步增强了恢复能力,允许用户“回退”到过去的某个状态,即使在事务已经提交之后。 总的来说,Oracle数据库备份与恢复的理论基础是确保数据安全性、业务连续性和灾难恢复能力的核心。通过...
快速恢复区域主要用于存储与数据库恢复相关的文件,如控制文件、联机REDO日志文件、归档日志文件、闪回日志以及RMAN备份等。这些文件由Oracle数据库和RMAN自动管理,极大地简化了备份和恢复过程。 ##### 日志归档 ...