Oracle 10g更强大的回闪数据库功能
oracle 10g的闪回技术总结

oracle 10g闪回技术总结oracle 10g的闪回一共有三种:1、全库闪回2、表被drop后的闪回3、表被dml操作之后的闪回(dml操作指delete、insert、update三种操作)一、介绍各种闪回和那些因素有关1)全库的闪回由于需要的空间是当前数据库空间大小的两倍(即如果数据库是50G,则要另外还需要100G空间才能使用全库的闪回),因此目前在所有项目中都不使用,这里也不做介绍2)被drop掉的表能否闪回来与两个因素相关:1、该表所在表空间的大小有关,即如果表空间够大,用drop语句删除的表,并不是真正的从数据库中删除,而是把表改成BIN$开头的表,但是如果表空间不够大,在有新数据要存入该表空间的时候,就会覆盖这些BIN$表所暂的物理空间,此时也就没有办法利用闪回恢复该表了2、删除该表的时候是否用的purge,如果在drop的时候使用了purge,则该表就被从表空间中彻底的被删除了,如果要恢复,必须用以前的备份恢复3)被dml操作之后表数据能否闪回与下面两个因素的关系:1、undo_retention参数设置值UNDO_RETENTION参数用以控制事务提交以后UNDO信息保留的时间,UNDO信息可以用于一系列的闪回查询等操作,该参数以秒为单位.但是默认情况这是一个非担保性(NO Guaranteed)限制,也就是说,如果有其他事务需要回滚空间,而空间出现不足时,这些信息仍然会被覆盖。
2、undo表空间的大小闪回需要的数据都是存储在undo表空间中,保留多久是由undo_retention 参数设置值和表空间大小一起决定,在undo表空间足够大的情况下,可以闪回undo_retention参数设置保留时间之内的数据(例如:undo_retention参数设置了900,这可以闪回15分钟前的数据),但是如果undo表空间不够大,在undo 使用到100%的时候,这个时候如果有其他事务需要使用回滚段时,就会覆盖已经commit但是还没有过undo_retention保留时间的信息。
Oracle11g闪回技术

为什么使用闪回技术 (1)闪回技术的发展 (1)闪回查询Flashback Query (2)闪回表Flashback Table (2)闪回删除flashback drop (4)闪回版本查询 (5)闪回事务查询(主要利用undo_sql进行撤消操作) (6)闪回数据库flashback database (6)闪回数据归档 (7)为什么使用闪回技术在Oracle的操作过程中,会不可避免地出现操作失误或用户错误,例如删除了一个表等。
传统意义上的解决方法是使用数据导入导出,或是备份恢复技术,但是前提是必须在错误发生之前有正确的备份。
有了闪回技术,就可以实现数据的迅速恢复,而且不依赖于数据备份。
闪回技术的发展将表回滚到一个过去的时间点或系统改变号SCN上,用来快速恢复表。
Flashback Drop结合Oracle的回收站,将删除的对象从回收站中还原。
Flashback Version Query查看某个表在指定时间段或某两个SCN之间的修改操作。
Flashback Transaction Query结合闪回版本查询,查看某个对象的事务信息,该信息中记录了撤消SQL 语句,用于实现对该事务的撤消处理。
Flashback Database将数据库回滚到一个过去的时间点或系统改变号SCN,快速恢复数据库。
Flashback Data Archive将数据库对象的修改操作记录在闪回数据归档区域中,这样可以使得数据的闪回不依赖于UNDO撤消数据。
闪回查询Flashback Query允许对误删除、误更新等DML操作进行闪回(UNDO表空间读取操作前的记录数据)。
常用的sql:Select current_scn from v$database;Select count(*) from 表名 as of scn scn的值;--------查询Select count(*) from 表名 as of timestamp timestamp的值;--------查询Insert into 表名 Select * from 表名 as of scn scn的值; --------恢复数据的方法闪回表Flashback Table实际上就是将表中的数据快速恢复到过去的一个时间点或是系统改变号SCN上,实现表的闪回,需要使用到与undo表空间相关的undo信息,通过show parameter undo可以了解这些信息。
《Oracle Database 11g闪回技术概述》

16.2.2 使用闪回删除
闪回删除的语法形式如下:
FLASHBACK TABLE table_name TO BEFORE DROP [ RENAME TO new_table_name ] ;
其中,table_name可以使用表的原名,也可以 使用表在回收站中的名称。如果表的原名相同, 则在使用原名进行闪回删除操作时,默认还原 最近一次删除的表。表被还原后,默认情况下 使用其原名,而如果该名称已经存在,则需要 在还原该表时对其重命名,这时需要使用 RENAME TO子句。
SQL> SELECT * FROM mytest ; ID ---------1
16.2 闪回删除(Flashback Drop)
闪回删除技术用于恢复已经被用 户删除(Drop)的数据库对象,这 需要使用到Oracle数据库系统中 的回收站机制。
16.2.1 回收站(RecycleBin)
SQL> INSERT INTO mytest VALUES (1) ; 已创建 1 行。 SQL> COMMIT ; 提交完成。
16.1 闪回表(Flashback Table)
(3) 查询系统当前时间,用于闪回时使用,如下:
SQL> SELECT TO_CHAR(SYSDATE , 'YYYY-MM-DD HH24:MI:SS') FROM dual ;
16.5.1 闪回数据库设置
启用闪回数据库功能需要使用如下语法形式:
ALTER DATABSE FLASHBACK ON | OFF ;
2 TO BEFORE DROP
3 RENAME TO mytest2_new ; 闪回完成。
使用SELECT语句查询mytest2_new表,检查是否成功还原, 如下:
Oracle 9i、10g的闪回功能区别

如果希望能闪回数据库,需要设置如下参数:
1.DB_RECOVER_FILE_DEST 闪回日志存放位置
2.DB_RECOVER_FILE_DEST_SIZE 恢复区的大小.在创建数据库的时候,Oracle将自动创建恢复区,但默认是关闭的,需要执行 alter database flashback on命令.
与Oracle 9i中的Flashback Query相似,利用回滚段信息来恢复一个或一些表到以前的一个时间点(一个快照).
要注意的是,Flashback Table不等于Flashback Query, Flashback Query仅仅是查询以前的一个快照点而已,并不改变当前表的状态,
而Flashback Table将改变当前表及附属对象一起回到以前的时间点.
TEST_DROP BIN$b+XkkO1RS5K10uKo9BfmuA==$0 TABLE 2005-05-07:14:30:47
SQL> flashback table test_drop to before drop; 或者
SQL> flashback table "BIN$b+XkkO1RS5K10uKo9BfmuA==$0" to before drop;
《Oracle Flashback 闪回查询功能9i和10g的区别》
Oracle从9i开始提供了基于回滚段的闪回查询(Flashback Query)功能,可用于恢复错误的DML操作.
在Oracle 10g中对闪回查询做了较大改进,不再局限于闪回查询,还可用于恢复错误的DDL(Drop)操作,闪回表,闪回数据库等.下面介绍两个版本的区别:
oracle数据库闪回

而闪回技术提供了从逻辑错误中恢复的更有效和更快的方法,多数情况下,在用这种技术进行恢复时数据库仍然联机并对用户可用。此外,闪回技术允许选择性地复原某些对象。使用传统的技术,从某种意义上说某有选择,只能恢复整个数据库。
SQL> conn rocky/rocky
已连接。
SQL> select * from emp;
EID NAME SEX ID
---------- ---------- ----- ----------
aa bb B 11
闪回数据库
闪回数据库的条件
1、 数据库日志系统必须在归档模式下。
2、 如果丢失了一个数据文件,或者由于某种原因不能使用特定的数据文件,则不能使用闪回数据库进行恢复。
3、 如果已经在想闪回的时间范围内复原或重建了一个控制文件,则不能使用闪回数据库特性。
4、 不能闪回一个数据库到RESETLOGS操作之前。
def hykdddd
defgdbbea hykdddd
SQL>
注意:回收站中的对象只能进行查询,任何的DML操作将不起作用。
恢复被删除的表
只要回收站中列出被删除的表,就可以使用命令恢复它。
FLASHBACK TABLE table_name TO BEFORE DROP
还有:
清除整个回收站:purge recyclebin
除回收站中的单个表:purge table test_drop
上述命令将从USERS表空间中删除单一用户scott的所有对象(以及存在于其他表空间中的所有依赖对象)。
10g的闪回功能--flashback

oracle 10g flashback 学习flashback:即回闪,是从oracle9i就开始提出的一种操作恢复的功能,在oracle10g中进行了增强和修改,通过回闪,用户可以完成许多不可能恢复的工作,目前oracle10g的回闪包括以下特性;1〉oracle falshback Database. 特性允许oracle通过Flashback database语句,将数据库会滚到前一个时间点或者scn上,而不需要作时间点的恢复工作!)(数据库级了!)2〉oracle falshback table. 特性允许oracle通过flashback table语句,将表会滚到前一个时间点或者scn上。
3〉oracle falshback drop. 特性允许oracle恢复被drop掉的table或者索引。
4〉oracle falshback version query. 特性可以得到特定的表在某一个时间段内的任何修改记录!(9i就具备的功能)5〉oracle falshback transaction query 特性可以限制用户在某一个事务级别上检查数据库的修改操作,适用于诊断问题、分析性能、审计事务。
一:oracle falshback tableoracle flashback table即回闪表可以进行的操作:操作1>flashback table tablename to befor drop;对于误drop的table此可以使用本操作,还原drop的table!此操作需要用户有以下的权限:A:falshback any table的系统权限或者是某一个表的flashback权限。
B:有table的select、insert、delect、alter权限。
C:有table的row Movement权限SQL> set serveroutput onSQL> set time on11:24:37 SQL> set feadback off;11:24:59 SQL> select * from tab;TNAME TABTYPE CLUSTERID------------------------------ ------- ----------B TABLESTEST TABLETA TABLEGROUPINGTEST TABLECOLTABLE TABLEROWTABLE TABLECOLTABLE1 TABLEROWTABLE1 TABLEA1 TABLEA TABLE----------------------可以看到本用户下有table A,现在drop它;-----------------------11:25:01 SQL> drop table a;11:26:18 SQL> select * from tab;TNAME TABTYPE CLUSTERID------------------------------ ------- ----------B TABLESTEST TABLETA TABLEGROUPINGTEST TABLECOLTABLE TABLEROWTABLE TABLECOLTABLE1 TABLEROWTABLE1 TABLEBIN$dFFlS6jJQLShRwRQ+kLJMg==$0 TABLEA1 TABLE----------------------table已经删除,可以看到table并不是真正意义上的删除掉了,而是多了一个"BIN$dFFlS6jJQLShRwRQ+kLJMg==$0"的表,这个表是原来的A表,这是oracle 的recyclebin,一个类似垃圾回收站的机制。
Oracle数据库系统闪回技术

3、确认闪回区设置
SQL> show parameter db_recovery_file_dest;
NAME
TYPE
VALUE
-----------------------------------------------------------------------
db_recovery_file_dest
中数据保留的时间,或者说,希望闪回数据库能够恢复到 的最早的时间点。单位为min,默认是1440min,即一天。
2、闪回开启
(1)SQL> shutdown immediate (2)SQL> startup mount (3)SQL> alter database archivelog; (4)SQL> alter database flashback on; (5)SQL> alter database open;
string
D:\Oracle19c\fast_recovery_area\
db_recovery_file_dest_size big integer
500M
SQL> show parameter db_recovery_file_dest_size
NAME
TYPE
VALUE
------------------------------------- ------------------------------
3. 闪回表(FLASHBACK table):将表恢复到过去的某个时间点或某个 SCN值时的状态。
4. 闪回删除(FLASHBACK drop):将已经删除的表及其关联的对象恢复 到删除前的状态。
5. 闪回数据库(FLASHBACK Database):将数据库恢复到过去某个时间 点或某个SCN值时的状态
ORACLE10g--闪回

在数据库是mount状态下,执行命令
SQL>alter database flashback on;
SQL>alter database flashback off; ----注意:一旦关闭闪回数据库,FRA日志全部自动删除
例子:
SQL>shutdown immediate;
一、闪回数据库 flashback database
1、可以处理的场景:
1)误删用户
2)truncate table
3)多表数据发生混乱
2、闪回数据库条件
1)数据库配置为归档模式
SQL>archive log list;
SQL>shutdown immediate;
SQL>startup mount;
SQL>select count(*) from "FSFASnFMMFDmfd==$0";
3、被删除的对象的空间回收
1)自动回收
oracle 使用空间规则:使用表空间里不属于回收站的对象所占用的可用空间,释放回收站所占用的空间(先释放最老的对象),对数据文件扩展(定义了自动扩展)。
一旦回收站被释放,就无法闪回。
SQL>purge dba_recyclebin; --清除回收站里属于所有对象所占用的空间
以下语句无法闪回
SQL>drop table t purge;
SQL>drop user wuxzh cascade;
SQL>drop tablespace users including contents;
闪回是根据闪回日志来恢复的,也可以根据闪回日志的SCN号进行闪回。
oracle10g闪回技术讲解

语法: select id,name,VERSIONS_STARTTIME, VERSIONS_ENDTIME,VERSIONS_XID,VERSIONS_ OPERATION from xxx versions between scn/timestamp start and end
伪列
VERSIONS_START SCN 该条记录操作时的SCN或时间,如果为空,表示该行记录是在查询范 VERSIONS_START 围外创建的 TIME VERSIONS_ENDS CN VERSIONS_ENDTI ME VERSIONS_XID 该条记录失效时的SCN或时间,如果为空,说明记录当前时间在当前 表内不存在,或者已经被删除了,可以配合着 VERSIONS_OPERATION列来看,如果VERSIONS_OPERATION列 值为D,说明该列已被删除,如果该列为空,则说明记录在这段时间无 操作 该操作的事务ID
flashback table
粒度比flashback query粒度大 两种方式 从recyclebin中恢复 语法: flashback table xxx to before drop [rename to xxx1] 从undo表空间恢复 语法: flashback table xxx to scn xxx enable
语法: flashback database to scn xxx
Flashback database的体系结构 的体系结构
16Mb
SGA
Not every change! Buffer Cache
8Mb
Flashback Buffer
Redo Log Buffer
Every change Log block before images periodically
oracle数据库闪回技术

Oracle 六大闪回技术,flashbackFlashback 技术是以Undo segment中的内容为基础的,因此受限于UNDO_RETENTON参数。
要使用flashback 的特性,必须启用自动撤销管理表空间。
在Oracle 11g里又出了一个新特性:Oracle Flashback Data Archive.FDA通过将变化数据另外存储到创建的闪回归档区(Flashback Archive)中,以和undo区别开来,这样就可以为闪回归档区单独设置存储策略,使之可以闪回到指定时间之前的旧数据而不影响undo策略。
在Oracle 10g中,Flash back家族分为以下成员:Flashback Database,Flashback Drop,Flashback Query(分Flashback Query,Flashback Version Query,Flashback Transaction Query 三种)和Flashback Table。
Oracle 11g中闪回新特性:闪回归档1 闪回恢复区(Flashback Recovery Area)在oracle 9i中引入flashback查询,以便能在需要的时候查到过去某个时刻的一致性数据,依赖于undo表空间存储的信息来闪回查询以前的版本,当然这个受限于undo表空间的大小,以及保留策略。
如果undo 被覆盖了就不能进行查询。
oracle10g中增强了闪回查询的功能,并且提供了将整个数据库回退到过去某个时刻的能力,这是通过引入一种新的flashback log实现的。
flashback log有点类似redo log,只不过redo log将数据库往前滚,flashback log则将数据库往后滚。
为了保存管理和备份恢复相关的文件,oracle10g提供了一个叫做闪回恢复区(Flashback recovery area),这个区域默认创建在oracle_base目录下。
[Oracle10g]闪回恢复区(FlashRecoveryArea)
![[Oracle10g]闪回恢复区(FlashRecoveryArea)](https://img.taocdn.com/s3/m/6fd8417fcc175527072208a4.png)
[ORACLE 10G] 闪回恢复区(FLASH RECOVERY AREA)何为闪回恢复区Oracle 10g 有一项新功能称为:自动的基于磁盘的备份与恢复( Automatic Disk-Based Backup and Recovery )。
实现该功能的基础为本文要讲述的闪回恢复区( Flash Recovery Area )。
闪回恢复区是Oracle 10g 中的新事物。
简单的说,闪回恢复区是一块用以存储恢复相关的文件的存储空间。
允许用户集中存储所有恢复相关的文件。
闪回恢复区可以放在如下几种存储形式上:* 目录* 一个文件系统* 自动存储管理(ASM)磁盘组在RAC 环境中,这个该位置必须为集群文件系统(cluster ) 或是ASM 磁盘组亦或是通过NFS 控制的文件共享目录,还要注意的是,所有实例的位置和操作系统的磁盘限额(disk quota) 必须一致。
如下几种文件可以放到闪回恢复区中:* 控制文件* 归档的日志文件(注:Oracle 手册上所说的在设定flash recovery area之后,LOG_ARCHIVE_DEST_10的值将自动设定为flash recovery area的位置,这个变化在笔者测试过程中观察不到)* 闪回日志* 控制文件和SPFILE 自动备份* RMAN 备份集* 数据文件拷贝为何要用闪回恢复区?如前所述,闪回恢复区提供了一个集中化的存储区域,很大程度上减小了管理开销。
这是其最主要的优点。
与RMAN 结合使用可以进行快速恢复。
近年来随着存储技术的发展,单个磁盘的存储能力已经加强。
这使自动的基于磁盘的备份与恢复的技术实现成为可能。
而闪回恢复区恰是基于磁盘的备份与恢复的基础。
把闪回恢复区和OMF 与ASM 结合运用看起来是比较完美的方案。
当然,不可否认的是,自动备份恢复技术还远远不够成熟。
设定闪回恢复区如果您使用DBCA创建的数据库,在安装时可以设定闪回恢复区的位置以及大小(点击这里查看安装截图)--这也是Oracle 10g OUI 的新功能之一。
oracle闪回介绍

flashback(闪回)是Oracle10g里新加入的一个非常有用的一个feature。
通过flashback的功能,我们可以避开传统的recover 的方式去恢复一些我们进行的误操作。
不过相当recovery来说。
这两个还是有差别的。
1. recovery的恢复是基于数据文件的,先要restore备份好的数据文件,flashback是基于flashback log文件的,所以基点不一样,recovery是基于备份的时间上的,可以恢复到备份至完整归档的任何一个时刻,而flashback是基于flashback log的,而log的存储时效是受限于db_flashback_retention_target这个参数的(以分钟为单位,默认1440分钟,即24小时)。
2. recovery的恢复是应用redo记录的,所以会对期间我们不关心的数据也进行修补,而flashback可以只针对我们关心的数据进行修补。
3. recovery的恢复可以恢复数据文件物理损坏或者日志物理损坏,而flashback是基于flashback log的,只能处理由于用户的错误的逻辑操作,比如删除了表,删除了用户等。
由此可见,其实flashback和recovery的恢复还是有不少本质的差别的,因此我们要针对着相应的情况来进行相应的选择。
flashback具体来说有4种常用的操作,这几种操作虽然都冠以flashback,但是还是有着一些较大的差别,1、flashback database(闪回数据库)对应flashback database来说,一般用来处理误删除了user或者一些错误的数据操作。
要使用flash database的特性。
我们一定要启动flashback功能,SQL>alter database flashback on; 如果要关闭使用alter database flashback off;同时要配置和检查参数db_flashback_retention_target,这个是控制flashback log的保留时间的参数,默认是1440分钟,即24小时。
Oracle 10g 数据库闪回的配置与使用详解

执行以下的SQL语句:1.sqlplus sys/passwd@tns_name as sysdba2.3.sql>shutdown immediate ;//关闭数据库4.5.sql>startup mount;//启动数据库控制文件,让实例与数据库关连,还有两种unmount启动数据库实例,open控制文件找到并打开数据文件与日志文件,启动数据库6.7.sql>alter database archivelog;//启动归档8.9.sql>alter datbase flashback on;10.11.sql>select flashback_on from v$database;//查看启动结果,如果flashback_on的值为on,说明启动成功12.13.sql>show parameter recyclebin;//如果要使用表的闪回,recyclebin(回收站)就得打开这样Oracle 10g数据库的闪回就配置好了。
如果要使用数据库闪回,则需要执行以下的代码:1.sqlplus sys/passwd@tns_name as sysdba2.3.sql>shutdown immediate ;//关闭数据库4.5.sql>startup mount;//启动数据库控制文件,让实例与数据库关连,还有两种unmount启动数据库实例,open控制文件找到并打开数据文件与日志文件,启动数据库6.7.sql>flashback database to timestamp to_timestamp('2011-08-08 09-14-01','yyyy-mm-dd hh24:mi:ss'');//闪回数据库8.9.sql>alter database open resetlogs;//必须在open后面加入resetlogs或者noresetlogs不然会报出ora-01589错误如果要闪回表,代码如下:1.flashback table table_name to timestamp to_timestamp('2011-08-08 09-14-01','yyyy-mm-dd hh24:mi:ss'');表删除以后的闪回:1.flashback table table_name to before drop;如果这时出现ora-38305错误。
用Oracle闪回功能恢复偶然丢失的数据

mysql
闪回数据库概述 mysql
闪回数据库能使整个数据库闪回到特定的时间点。 mysql
闪回数据库恢复比传统恢复操作更快的原因是:恢复不再受数据库大小的影响。
oracle
闪回数据库恢复时间正比于恢复过程汇总需要备份的变化的数量,而不是数据文件和归档日志大小。 unix
闪回恢复区可以包括数据文件、控制文件、联机重做日志、各种各样的RMAN文件和闪回日志。用户可以在建立重做日志、控制文件、和归档日志文件时将他们存储在闪回恢复区。 unix
影响联机重做日志的参数:
oracle
DB_CREATE_ONLINE_LOG_DEST_n
DB_RECOVERY_FILE_DEST
DB_CREATE_FILE_DEST
mysql
影响归档日志的一些参数: unix
LOG_ARCHIVE_DEST_n
LOG_ARCHIVE_DEST
LOG_ARCHIVE_DUPLEX_DEST
oracle
oracle
2.启动数据库到mount状态
mysql
3.从RMAN发出闪回数据库恢复命令
linux
Connecttarget
Flashbackdatabasetoscn=……; oracle
4.alter database open resetlogs;
ssh
使用闪回恢复区
unix
闪回恢复区是一个集中的恢复区域。
linux
这些文件和数据文件及控制文件有关系。这就减少了手工清除不需要的归档日志。
mysql
V$recovery_file_dest检查消耗的空间和其他关于闪回恢复区的统计信息。 unix
Oracle 10g利用闪回挽救误删的数据

Oracle 10g利用闪回挽救误删的数据我们在开发和运维过程中,经常遇到数据被误删除的情况。
无论是在应用开发中的Bug,还是修改数据的时候,如果提交了错误数据修改结果,会带来很多问题。
一般来说,一旦提交commit事务,我们是不能获取到之前的数据情况,除非使用较复杂的数据恢复手段,利用备份数据恢复。
但是在Oracle中,可以使用其闪回FlashBack特性来解决这个问题。
首先,声明一点,闪回Flashback的范围很大,包括数据库、表、数据均是可以Flashback 的,但是机制差别很大。
本文说的是简单的数据flashback,用来快速的挽救回我们的数据。
首先构建实验环境:⏹查看数据库版本信息⏹构建一张实验数据表⏹查看实验表的数据,定位时间信息⏹如果我们此时误删除了数据,并且将删除结果提交。
⏹这时,虽然我们已经commit了删除事务,但是仍可以指定一个时间点,获取到那个时间点的数据。
⏹删除的数据集合又可以查询到。
这样恢复数据的思路有了,可以将结果集合直接插入回数据表。
闪回标准的做法应为:他很多因素来决定闪回的时间。
实际上,如果超过了闪回15分钟,可以获得结果。
如果闪回的时间过长,保存的SCN版本已经消失,系统会报错。
SQL> SELECT * FROM SCOTT.TB_EMPLOYEE AS OF TIMESTAMP TO_TIMESTAMP('2012-01-0714:14:38','yyyy-mm-dd hh24:mi:ss');SELECT * FROM SCOTT.TB_EMPLOYEE AS OF TIMESTAMP TO_TIMESTAMP('2012-01-0714:14:38','yyyy-mm-dd hh24:mi:ss')第 1 行出现错误:ORA-08180: 未找到基于指定时间的快照提到闪回FLASHBACK,要注意Oracle的闪回技术是由几个相对独立的技术实现的。
oracle10g闪回数据库操作流程

oracle闪回数据库操作笔记默认情况下,oracle10g可以直接闪回表,闪回表数据,但是如果要闪回整个数据库,则需要预先设定。
1、闪回删除的表的命令:SQL>flashback table test_drop to before drop;2、闪回表数据的命令:alter table tableA enable row movement; --先启动行移动命令,flashback table tableA to timestamp to_timestamp('2009-10-12 10:50:00','yyyy-mm-ddhh24:mi:ss');--闪回数据(时间为没有删的数据存在的时间)alter table tableA disable row movement; --关闭行移动命令3、以下是闪回整个数据库的设定方式以及闪回命令。
SQL> shutdown immediate数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;ORACLE 例程已经启动。
Total System Global Area 612368384 bytesFixed Size 1250428 bytesVariable Size 176163716 bytesDatabase Buffers 427819008 bytesRedo Buffers 7135232 bytes数据库装载完毕。
SQL> archive log list数据库日志模式非存档模式自动存档禁用存档终点USE_DB_RECOVERY_FILE_DEST最早的联机日志序列 1当前日志序列 3SQL> alter database archivelog;数据库已更改。
SQL> alter database open ;数据库已更改。
Oracle闪回查询

Oracle闪回查询闪回查询(Flashback Query)包括闪回版本查询(Flashback Versions Query)、闪回事务查询(Flashback Transaction Query)和闪回表(Flashback Table)。
回版本查询(Flashback Versions Query)可以查询某条记录在某段时间内的所有版本,并且能够显示一个历史记录,这个历史记录包括对指定记录的操作、进行操作的时间、执行操作的用户以及发生变化的事务标识。
闪回事务查询(Flashback Transaction Query)能够自动化修复过程,一旦使用闪回版本查询(Flashback Versions Query)标识出导致问题的事务,Oracle就可以构造倒退这些变化的SQL。
与Flashback Database不同,Flashback Transaction不好丢失数据,没有出错的工作仍然有效,并且数据库停留在当前的状态。
闪回表(Flashback Table)是针对某个表的出错工作已被提交后,我们可以指定ORACLE倒退从指定的某个时间点以来该表的所进行的所有变化,同时其他表停留在当前的状态。
闪回查询(Flashback Query)操作中,数据库保持打开状态,并且所有对象(包括闪回所涉及的对象)都可用。
事务的完整性与约束会被实施。
闪回查询(Flashback Query)操作中能闪回到哪个时间点依赖于撤销数据。
在 Oracle9i Database 中,我们看到它推出了以闪回查询形式表示的“时间机器”。
该特性允许 DBA 看到特定时间的列值,只要在还原段中提供该数据块此前镜像的拷贝即可。
但是,闪回查询只提供某时刻数据的固定快照,而不是在两个时间点之间被更改数据的运行状态表示。
某些应用程序,如涉及到外币管理的应用程序,可能需要了解一段时期内数值数据的变化,而不仅仅是两个时间点的数值。
由于闪回版本查询特性,Oracle database 10g 能够更方便高效地执行该任务。
oracle闪回技术

伪列 Versions_starttime:事务开始的时间 Versions_startscn:事务开始的SCN号 Versions_endtime:事务结束的时间 Versions_endscn:事务结束的SCN Versions_xid:事务的ID号 Versions_operation:事务所进行的操作类型,包括插入(显示为I)、删除 (显示为D)、更新(显示为U) 如果我们希望显示数据行的所有的变化,则使用versions between minvalue and maxvalue。
用户ftest删除看了一个表。 查看回收站。 对象删除前的名字, 对象被删除后由系 统自动赋予的名字
在user_segments和user_objects里面可以看见被删除对象的名字和空间占用情况。
说明被删除对象依然存在,只是被改了名字而已。所占用的物理空间 并没有被删除。
表testt存储在文件4中,从block193开始,连续占用8个数据块。
根据当前业务负载所产生的闪回日志记录的速度来看,为了满足所指定的 db_flashback_retention_target时间长度,大概需要多少字节的闪回日志空间。 当前闪回日志空间 利用当前的闪回日志能够将数据库最多闪回到的SCN 利用当前的闪回日志能够将数据库最多闪回到的时间点 在闪回数据库时,假设当前时间点为B,要闪回到历史时间点为A。则需要注意, 从A到B的这段时间里,如果恢复或重建了控制文件,或者删除了某个表空间, 或者收缩了某个数据文件的话,那么闪回到A点的操作会失败。
启用闪回数据库,必须按照下面的四个步骤 1、数据库配置为归档模式 2、配置闪回恢复区(flash recovery area FRA)
3、配置闪回保留时间
数据库最多能够将数据库闪回到多长时 间之前,如果设置为24小时,那么说明 数据库只会保留最近24小时所发生改变 前的值。24小时前的值都会被覆盖,以 分为单位
Oracleg中使用闪回技术详解

Oracle 10g 中使用闪回技术在Oracle10g 中,可以在行、表和数据库级别使用闪回技术,具体分类如下:1、行级闪回可以使用行闪回技术撤销对个别行的错误更改。
在撤销表空间中的撤销数据。
有三种行级闪回技术,他们全都依赖于存储(1)闪回查询:允许根据时间点或SCN(System Change Number)查看旧的行数据。
可以查看更旧的数据,并且,如果需要可以检索它并撤销错误的更改。
(2)闪回版本查询:允许查看相同行在一段时间内的所有版本,以便可撤销逻辑错误。
它还可以提供更改的审计历史,允许比较当前数据与历史数据而不用执行DML 活动。
(3)闪回事务查询:允许查看事务级所做的更改。
此技术帮助分析和审计事务,例如,一个批作业执行了两次,你想确定哪些对象受到影响等。
使用此技术可撤销指定时间段内某个事务所做的更改。
2、表级闪回(1)闪回表:复原一个表到某个时间点,或者到指定的SCN 而不用恢复数据文件。
此特性使用DML 更改撤销表中的更改。
闪回表特性依赖于撤销数据。
(2)闪回删除:允许倒退一条DROP TABLE 语句的结果,而不用进行时间点恢复。
闪回删除特性使用回收站复原被删除的表。
3、数据库级闪回闪回数据库特性允许复原整个数据库到某个时间点,回数据库主要利用闪回日志检索数据块的更旧的版本,据库,不用复原数据文件和执行传统的介质恢复。
从而撤销自该时间以来的所有更改。
闪它也依赖归档重做日志完全地恢复数闪回和传统的恢复技术对比与传统恢复技术不同,闪回技术的主要目的不是从介质丢失中恢复,例如:用户可能错误的删除了某个表或者错误的更改了某个表的数据。
才的操作。
而是从人为错误中恢复。
这时候你想撤销你刚传统上,从人为错误中恢复数据唯一的办法就是采用用户管理的备份和恢复技术。
据库文件然后利用所有重做日志文件前滚的过程需要长时间的停机。
而闪回技术提供了从逻辑错误中恢复的更有效和更快的方法,行恢复时数据库仍然联机并对用户可用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle 10g更强大的回闪数据库功能【IT168 服务器学院】用一个简单的SQL语句将一个表或者整个数据库恢复到以前的某一点。
除夕之夜,Acme银行的数据库管理员(DBA)John正在和他的朋友们一起狂欢,倒计时迎接新的一年的到来。
就在子夜钟声敲响、人群欢呼之时,他的寻呼机突然响了。
在银行的数据中心,在年末进行利息累机批处理簿记过程中发生了错误,所有的利息计算都不准确。
幸好开发团队找出了错误所在,并开发一个应急纠正模块,但这一纠正模块不能恢复已经造成的破坏。
部门经理问John是否有什么方法能往回倒一些时间,将数据库恢复至该批处理开始之前的状态,该批处理大约是在晚上11:00开始的。
对于DBA们来说,这不是一件很熟悉的事吗?John的选择是什么呢?在Oracle数据库10g之前,John可能会做一个"时间点"恢复,来将数据库恢复至所希望的某一时刻的状态。
不幸的是,银行的定期日常备份大约就是在那个时间开始,这就意味着他将不得不用接近24小时的有价值的归案日志来恢复数据库。
Oracle9i数据库中提供的另一种选择是使用回闪查询特性来重建到晚上11:00为止的该表的各行,并手动生成一组不同的表。
这一方法尽管理论上可行,但如果表的数量很大,则会变得不切合实际。
幸运的是,John现在的数据库是Oracle数据库10g,所以他拥有更多的选择。
回闪表让我们来看一下上面的情况。
出问题的年末批处理可能仅影响少数表。
例如,它可能仅用新的账户结余更新了ACCOUNTS表。
如果确实是这种情况,则John可以使用回闪表特性,它会将一个表恢复到一个过去的时间点的状态。
执行回闪表操作不需要特殊的设置。
唯一的要求是表必须具有可移动的行--或者是在创建表时设置,或者是在以后利用ALTER TABLE ACCOUNTS ENABLE ROW MOVEMENT 语句设置。
FLASHBACK TABLE语句从撤消段中(undo segment)读取该表的过去映像,并利用Oracle9i中引入的回闪查询重建表行。
如果模式所有者之外的非DBA用户执行回闪表操作,她需要拥有对该表的SELECT、DELETE、INSERT、ALTER和FLASHBACK权限,或者拥有等价的ANY TABLE系统权限。
对于John来说,ACCOUNTS像以下的样子:ACCOUNT_NO NUMBER(12),BALANCE NUMBER(15,2)STATUS CHAR(1)STATUS的列值通常为"A"(active,活动),但是当利息计算应用程序启动时,所有的账户均被冻结,此状态也被更新为"F"(frozen,冻结)。
当对每一账户都计算了利息后,该状态被更新为"I"(interest applied,利息已计算)。
下面是John用使用回闪表特性的步骤:他索要一个大概的时间点,在这一点上数据库必须被重新检查,答案是大约晚上11:00。
他定义一个期望返回到的逻辑参考点。
下面是他现在查询该表时所看到的内容:select status, count(*)from ACCOUNTSgroup by status;STATUS COUNT(*)--------------I27088F19999该输出显示到目前为止已经有27 088个账户被处理(状态=I)。
此前的状态为"A",这不是John所希望返回的位置。
所希望的逻辑参考点应该是所有账户的状态都为"F"的时间点。
他必须恢复到所有账户状态都为"F"的状态,这大约发生于晚上11:00。
他检查一个状态="I"的当前示例账户,以便为未来的校验测试设定一个基线:select account_no, balancefrom ACCOUNTSwhere status = 'I'and rownum < 2;ACCOUNT_NO BALANCE-------------------216333913.49他发出这一语句将ACCOUNTS表恢复至那个时间:flashback table ACCOUNTS to timestampto_timestamp ('12/31/2003 23:00:00','mm/dd/yyyy hh24:mi:ss');瞧!整个表被恢复到那个时间的状态了。
只要撤消段中所保存的撤消数据允许,John 便可以回闪到过去的某个时间点。
John也可以不用时间标记(stamp),而是使用系统改变数目(system change number,SCN),如下所示:flashback table ACCOUNTSto SCN 38;此表已被恢复至晚上11:00的状态,但这是不是所希望的时间点状态呢?John再次检查select status, count(*)from ACCOUNTSgroup by status;STATUS COUNT(*)--------------I88F46999仍然有88个记录的状态为"T"。
所以,晚上11:00还不够早,John不得不返回到更早的一个时间点。
他将该表回闪到更早的一个时间点上--晚上10:30--然后再次检查状态:flashback table ACCOUNTS to timestampto_timestamp ('12/31/2003 22:30:00','mm/dd/yyyy hh24:mi:ss');select status, count(*)from ACCOUNTSgroup by status;STATUS COUNT(*)--------------A47087John返回到的过去时间太远了些,所有账户的状态都为"A",这是"F"状态之前的一个状态。
于是,他不得不向后滚动一段时间,滚动到晚上10:45。
flashback table ACCOUNTS to timestampto_timestamp ('12/31/2003 22:45:00','mm/dd/yyyy hh24:mi:ss');select status, count(*)from ACCOUNTSgroup by status;STATUS COUNT(*)--------------F47087这正是他希望的时间点。
他通过选择他以前查询过的账户来确证这一点。
select balancefrom ACCOUNTSwhere account_no = 21633;BALANCE-------3836.75有效的结余为$3,913.49;返回到了晚上10:45的状态。
至此操作完成。
可以向前和向后应用任意次回闪操作,直到到达所期望的准确时间点的状态为止。
由于此表永远不会被删除,所以所有的从属对象--如索引、约束条件、触发器等等--都会保持完好无损。
引用此表的所有独立对象,如过程等,也都保持有效。
即使是对分割表的全局索引也会保留,并保持有效。
除了ACCOUNTS表之外,如果John还希望将TXN表回闪,那么他可以应用许多由逗号隔开的表名,如下所示:flashback table BANK.ACCOUNTS, bank.txn to scn 1234567;通过一个功能强大的SQL语句完成了整个回闪表操作。
让我们来研究另一种情况。
假设Laura意外地删除了一个关键字查询表--GL_MASTER。
意识到这一错误后,她问John能否恢复这个表。
在Oracle数据库的以前一些版本中,这需要进行时间点恢复。
但在Oracle数据库10g中,删除一个表只是将该表重命名后放置到称作"回收站"的逻辑容器中。
为了恢复此表,John只发出了以下命令:flashback table gl_master to before drop;这个表马上就重新出现了,不需要任何恢复操作。
请注意,与前面所描述的回闪操作不同,它不需要通过撤消段重建数据;而只是从回收站中将此表取回。
回闪数据库如果说逻辑上的破坏不限于为数不多的几个表,那么利用Oracle 10g中的Flashback Database(回闪数据库)特性执行数据库时间点恢复可以使恢复更快一些。
Flashback Database 不需要利用撤消空间(undo space),而是利用硬盘上被称作快闪恢复区(flash recovery area)的另一区,它与撤消操作无关。
Flashback Database允许进行数据库时间点恢复,而不要求你首先恢复你数据库的一个备份。
要回闪整个数据库,John必须进行以下操作为数据库做准备,从而使其具有回闪能力:通过设置以下两个参数来配置一个大小为2GB的回闪区域:db_recovery_file_dest = /usr/users/oracle/10.1/recovery_areadb_recovery_file_dest_size = 2G使用以下参数,以分钟为单位配置最大回闪时间:db_flashback_retention_target = 1440这一数值反映出可以返回的最大时间;实际可能的时间由快闪恢复区域的可用空间大小来决定。
所以这三个参数都是动态的,并可以使用ALTER SYSTEM命令进行设置。
使数据库能够回闪。
为此,它必须处于archivelog模式下。
在MOUNT阶段,在OPEN 之前,John发出如下命令:alter database flashback on;在启动Flashback Database之后,它定期将已发生变化的块写入一个特殊类型的称作回闪日志的日志文件中。
这些日志不是由传统的Log Writer (LGWR) 过程写入,而是由一种称作Recovery Writer (RVWR)的新过程写入。
与常规的重做日志(redo logs)不同,回闪日志既不需要由DBA创建,也不需要由他们维护;它们由Oracle Managed Files(OMF)自动在快闪恢复区域所指定的目录中创建。
这些文件不会归档,所以,如果在该目录发生介质故障后就不可能再进行恢复。
回闪操作在所描述的Acme银行的事例中,John认为在他所处的情况下回闪表不太可行。
他不得不将整个数据库回滚到过去的某个时间点。
他再一次选择晚上11:00作为开始点,并发出以下命令:flashback database to timestampto_timestamp ('12/31/200323:00:00','mm/dd/yyyy hh24:mi:ss');这一操作执行所有的必要任务,如使用来自快闪恢复区域中的信息恢复数据文件,并应用这些改变。