oracle 10g的闪回技术总结
Oracle10g闪回恢复区详解
何为闪回恢复区Oracle 10g 有一项新功能称为:自动的基于磁盘的备份与恢复( Automatic Disk-Based Backup and Recovery )。
实现该功能的基础为本文要讲述的闪回恢复区( Flash Recovery Area )。
闪回恢复区是 Oracle 10g 中的新事物。
简单的说,闪回恢复区是一块用以存储恢复相关的文件的存储空间。
允许用户集中存储所有恢复相关的文件。
闪回恢复区可以放在如下几种存储形式上:∙目录∙一个文件系统∙自动存储管理(ASM)磁盘组在 RAC 环境中,这个该位置必须为集群文件系统 (cluster file system) 或是 ASM 磁盘组亦或是通过 NFS 控制的文件共享目录,还要注意的是,所有实例的位置和操作系统的磁盘限额 (disk quota) 必须一致。
如下几种文件可以放到闪回恢复区中:∙控制文件∙归档的日志文件(注:Oracle 手册上所说的在设定flash recovery area之后,LOG_ARCHIVE_DEST_10的值将自动设定为flash recovery area的位置,这个变化在笔者测试过程中观察不到)∙闪回日志∙控制文件和 SPFILE 自动备份∙RMAN 备份集∙数据文件拷贝为何要用闪回恢复区?如前所述,闪回恢复区提供了一个集中化的存储区域,很大程度上减小了管理开销。
这是其最主要的优点。
与 RMAN 结合使用可以进行快速恢复。
近年来随着存储技术的发展,单个磁盘的存储能力已经加强。
这使自动的基于磁盘的备份与恢复的技术实现成为可能。
而闪回恢复区恰是基于磁盘的备份与恢复的基础。
把闪回恢复区和OMF 与 ASM 结合运用看起来是比较完美的方案。
当然,不可否认的是,自动备份恢复技术还远远不够成熟。
设定闪回恢复区如果您使用DBCA创建的数据库,在安装时可以设定闪回恢复区的位置以及大小(点击这里查看安装截图)——这也是 Oracle 10g OUI 的新功能之一。
oracle10g更强大的回闪数据库功能 (1)
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中引入的回闪查询重建表行。
Oracle闪回技术
Oracle闪回技术之一Oracle 11g 利用FlashTable (闪回表)恢复(用delete)误删的数据闪回表,实际上就是将表中的数据快速恢复到过去的一个时间点或者系统改变号SCN上。
实现表的闪回,需要用到撤销表空间相关的UNDO信息,通过SHOW PARAMETER UNDO 命令就可以了解这些信息。
用户对表的数据的修改操作,都记录在撤销表空间中,这为表的闪回提供的数据恢复的基础。
修改记录被提交到undo表空间中的默认保留时间为900秒,用户可以在这900秒的时间内对表的进行闪回操作,从而将表中的数据恢复的修改前的状态。
alter system set undo_retention = 1200 scope=both;show parameter undo;如上图显示的默认900秒,我们通过sql来修改这个默认时间为1200:flashtable的语法:flashback table [schema.]table_name to {[before drop [rename to new_table_name]] | [SCN | TIMESTAMP] expr [enable | desable] triggers}schema:模式名table_name:表名before drop 表示回复到删除之前rename new_table_name重新定义表名称timestamp 时间戳,包括年月日时分秒expr制定一个值或表达式enable triggers 触发器恢复后,呈启用状态disabled triggers 触发器回复后,呈禁用状态,默认情况下为此选项。
下面演示一个示例:首先在数据库中创建一个表,并插入3条数据SQL>create table tb_flash1(id number primary key,content varchar2(40));表已创建。
SQL> insert into tb_flash1(id,content)2 select 1,'第一行数据' from dual3 union all4 select 2,'第二行数据' from dual5 union6 select 3,'第三行数据' from dual7 /已创建3行。
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,一个类似垃圾回收站的机制。
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号进行闪回。
详解Oracle闪回技术
详解Oracle闪回技术你还在为用户误操作数据发愁吗?你还在为应用逻辑有误、触发器失效产生的错误数据发愁吗?如果是,就请了解下oracle的闪回技术。
闪回从oracle9i开始引入,仅仅局限在用户误操作了表中的数据。
如果表被删除(drop)或截断(truncate),或误操作的时间太久,就没办法使用闪回了。
Oracle10g、11g中,闪回技术得到了增强,用户的各种误操作,包括dba 的误操作(如无意中删除了表空间、用户等),都可以闪回。
下面就重点讲述各种闪回技术。
一、闪回数据库flashback database适用场景:用户误删除表中数据、删除表、truncate表、索引、触发器,表空间等。
Dba误操作等。
简而言之,所有操作都可以闪回。
配置及如何闪回:篇幅较长,不讲述。
可以google,百度一下。
必须的对象:闪回日志。
注意事项:1.闪回整个数据库,不是某个表;2.会产生大量的闪回日志,占用磁盘空间,对IO有要求。
如果你的数据库已经有IO瓶颈,请不要配置闪回数据库。
这种情况下,可以采用异机不完全恢复。
3.不是无限期的闪回到过去某个时间点,要查看db_flashback_retention_target参数及v$flashback_database_log视图中的OLDEST_FLASHBACK_TIME,确定可以闪回的最早时间。
二、闪回已删除drop的数据表及索引flashback drop适用场景:用户误删除的一张或多张表。
配置及如何闪回:不用配置,如何闪回请google,百度一下。
注意事项:1.drop table不能用purge,加purge删除的表只能用闪回必须的对象:回收站。
数据库来处理;2.表及其索引被放入回收站,数据还在原来的表空间。
如果空间不够用,就会按先删除的先覆盖来使用空间。
如果已删除的表的空间被重用,不能闪回。
可查询视图dba_recyclebin 的CAN_UNDROP 来判定。
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目录下。
Oracle Flashback 技术 总结
Oracle Flashback 技术总结Flashback 技术是以Undo segment中的内容为基础的,因此受限于UNDO_RETENTON参数。
要使用flashback 的特性,必须启用自动撤销管理表空间。
在Oracle 10g中,Flash back家族分为以下成员:Flashback Database,Flashback Drop,Flashback Query(分Flashback Query,Flashback V ersion Query,Flashback Transaction Query 三种) 和Flashback Table。
一.Flashback DatabaseFlashback Database 功能非常类似与RMAN的不完全恢复,它可以把整个数据库回退到过去的某个时点的状态,这个功能依赖于Flashback log 日志。
比RMAN更快速和高效。
因此Flashback Database 可以看作是不完全恢复的替代技术。
但它也有某些限制:1. Flashback Database 不能解决Media Failure,这种错误RMAN恢复仍是唯一选择2. 如果删除了数据文件或者利用Shrink技术缩小数据文件大小,这时不能用Flashback Database技术回退到改变之前的状态,这时候就必须先利用RMAN把删除之前或者缩小之前的文件备份restore 出来,然后利用Flashback Database 执行剩下的Flashback Datbase。
3. 如果控制文件是从备份中恢复出来的,或者是重建的控制文件,也不能使用Flashback Database。
4. 使用Flashback Database锁能恢复到的最早的SCN,取决与Flashback Log中记录的最早SCN。
Flashback Database 架构Flashback Database 整个架构包括一个进程Recover Writer(RVWR)后台进程,Flashback Database Log日志和Flash Recovery Area。
Oracle 10g的闪回查询概述
Oracle 9i的闪回查询概述1、Oracle 9i的闪回查询功能在Oracle 9i之前,如果用户错误操作数据后,除了不完全恢复外,没有好的解决办法。
Oracle 9i中提供闪回查询,由一个新的包DBMS_FLASH来实现。
用户使用闪回查询可以及时取得误操作DML(Delete、Update、Insert)前某一时间点数据库的映像视图,用户可以利用系统时间或系统改变号(SCN:System Change Number)来指定这个只读视图,并可以针对错误进行相应的恢复措施。
闪回查询功能完全依赖于自动回滚段管理(AUM),对于Drop等误操作不能恢复。
闪回特性可应用在以下方面:(1)自我维护过程中的修复:当一些重要的记录被意外删除,用户可以向后移动到一个时间点,查看丢失的行并把它们重新插入现在的表内恢复。
(2)恢复Email和声音Email:当用户意外删除了Email或者声音信息时,可以通过移回到固定时间点来恢复删除。
(3)账号平衡状况:可以查看以前的历史数据。
如银行外币管理中用于记录特定时间的汇率。
在以前,汇率变更被记录在一个历史表中,现在就可以通过闪回功能进行查询。
(4)用于趋势分析的决策支持系统:决策支持系统和联机分析应用必须执行一个长时间的事务。
使用闪回查询,这些应用可以对历史数据执行分析和建模。
例如,特定产品如矿泉水随季节变化需求情况的变化。
2、回滚段概述回滚段用于存放数据修改之前的位置和值,回滚段的头部包含正在使用的该回滚段事务的信息。
回滚段的作用如下:(1)事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,当用户回滚事务时,Oracle将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值。
(2)事务恢复:当事务正在处理的时候,例程失败,回滚段的信息保存在重做日志文件中,Oracle将在下次打开数据库时利用回滚来恢复未提交的数据。
(3)读一致性:当一个会话正在修改数据时,其它的会话将看不到该会话未提交的修改。
Oracle-10g数据库基础教程(2009) 第14章闪回技术
2009
Oracle 10g 数据库基础教程
14.1 闪回技术概述
闪回基本概念 闪回技术分类
2009
Oracle 10g 数据库基础教程
14.1.1 基本概念
Oracle 9i实现了基于回滚段的闪回查询(Flashback Query)技术,即从回滚段中读取一定时间内对表进行操 作的数据,恢复错误的DML操作。 在Oracle 10g中,除提高了闪回查询功能,实现了闪回 版本查询、闪回事务查询外,还实现了闪回表、闪回删除 和闪回数据库的功能。 闪回技术是数据库恢复技术历史上一次重大的进步,从根 本上改变了数据恢复。 采用闪回技术,可以针对行级和事务级发生过变化的数据 进行恢复,减少了数据恢复的时间,而且操作简单,通过 SQL语句就可以实现数据的恢复,大大提高了数据库恢复 的效率。
查询7844号员工的当前工资值。
09:15:48 SQL>SELECT empno,sal FROM scott.emp WHERE empno=7844; EMPNO SAL ----------------7844 3500
2009
Oracle 10g 数据库基础教程
查询7844号员工前一个小时的工资值。
闪回查询可以返回过去某个时间点已经提交事务 操作的结果。 基本语法:
SELECT column_name[,…] … FROM table_name [AS OF SCN|TIMESTAMP expression] [WHERE condition]
基于AS OF TIMESTAMP的闪回查询 基于AS OF SCN的闪回查询
2009
Oracle 10g 数据库基础教程
查询第二个事务提交,第三个事务还没有提交时7844号 员工的工资
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 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的闪回技术是由几个相对独立的技术实现的。
Oracle 10g更强大的回闪数据库功能
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中引入的回闪查询重建表行。
03.oracle的闪回查询技术
版权所有(2005~2008) eygle
FlashBack查询
闪回查询是最基本的闪回功能,直接利用回滚段中的旧数据构造 某一刻的一致性数据版本 只适合单个表数据恢复,对事务中相关的多表数据恢复不适合, 无法确保相关数据的参照完整性 使用方法:
insert into emp select * from emp AS OF timestamp to_timestamp ('2007-03-29 14:02:22','yyyy-mm-dd hh24:mi:ss') where Ename=‘King’; 也可以: insert into emp select * from emp AS OF scn 22402021; where Ename=‘King’;
版权所有(2005~2008) eygle
FlashBack表
可以将表恢复到特定的时间点或者scn 需要启动表的行移动特性
ALTER TABLE emp ENABLE ROW MOVEMENT; 闪回表到某一时间:
FLASHBACK TABLE emp TO TIMESTAMP to_timestamp ('2005-03-29 17:02:28','yyyy-mm-dd hh24:mi:ss');
版权所有(2005~2008) eygle
FlashBack版本查询
闪回版本查询可以查看在一个时间段内,特定表上所有事务的变 化情况 所有与这个表相关的事务操作被清晰的以时间片的方式描绘 可以将与指定表相关所有事务信息提取,便于DBA确定使用哪个 事务完成恢复 可以直接从下面的视图中看到某个表相关的所有事务:
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闪回技术总结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保留时间的信息。
不过可以通过undo 表空间的一个属性设置,使得在没有过undo_retention保留时间的信息不被删除,但是这个时候在undo表空间100%之后,会影响正常业务的正常使用,在alter 日志中会报undo表空间不够的错。
在undo表空间的RETENTION属性为GUARANTEE时,信息在没有过保留时间是不能被覆盖的,在NOGUARANTEE时,信息在没有过保留时间是可以被覆盖的,可以通过下面的命令查询和修改该属性的值:SQL> select tablespace_name , RETENTION from dba_tablespaces where tablespace_name=’UNDOTBS’;TABLESPACE_NAME RETENTION------------------------------ -----------UNDOTBS2 NOGUARANTEESQL> ALTER TABLESPACE UNDO_TS RETENTION GUARANTEE;OrSQL> ALTER TABLESPACE UNDO_TS RETENTION NOGUARANTEE;Undo表空间的大小和数据库的数据量没有直接关系,但和对数据库数据修改的量以及undo_retention保留时间有关,数据修改量越大保留时间越长需要的undo表空间就越多。
二、用例子说明如何闪回被drop表(以scott用户下的dept表为例)说明:dept的表上原来有一个1个约束,1个索引,对于索引原来叫什么名之,在表没有闪回之前可以通过下面的语句找到,但是约束在没有删除之前叫什么名字就没有办法找到了,此时只能重新给命名一个新的名字,并且原来的外键约束在闪回之后也是丢失的,需要重新创建Select object_name,original_name,BASE_OBJECT,partition_name,type,ts_name,createtime,droptime,can_undropfrom user_recyclebin;1、被删除的表没有被重建,恢复方法SQL> drop table dept;Table dropped.SQL> show recyclebinORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME---------------- ------------------------------ ------------ -------------------DEPT BIN$Yp7QtTHs4WzgQwpCA2nhbA==$0 TABLE 2009-02-11:13:42:06SQL>selectobject_name,original_name,BASE_OBJECT,partition_name,type,ts_name,createtime,droptime,ca n_undrop from user_recyclebin;OBJECT_NAME ORIGINAL_NAME BASE_OBJECT PARTITION_NAME TYPE TS_NAME CREATETIME------------------------------ -------------------------------- ----------- -------------------------------- ------------------------- ------------------------------ -------------------DROPTIME CAN------------------- ---BIN$Yp7QtTHs4WzgQwpCA2nhbA==$0 DEPT 51205TABLE USERS2006-02-16:09:45:382009-02-11:13:42:06 YESBIN$Yp7QtTHr4WzgQwpCA2nhbA==$0DEPT_PK 51205 INDEX USERS 2006-02-16:09:45:392009-02-11:13:42:05 NO(从上面标红的可以看出,index在表闪回的时候,是不能闪回的,这里指的不能闪回是说index的名字不能变成原来的DEPT_PK,但是在表闪回之后,在user_indexes视图里面是可以看到名字为“BIN$Yp7QtTHr4WzgQwpCA2nhbA==$0”索引,所以在表闪回来之后需要个给index改名)SQL> flashback table dept to before drop;Flashback complete.SQL> alter index "BIN$Yp7QtTHr4WzgQwpCA2nhbA==$0" rename to edpt_pk;Index altered.(同样约束也是一样,也需要改名,要不然看到的约束名字也是以BIN$开头的,约束改名之用toad比较方便,如下)登录toad,一次按照上面的步骤就可以把约束改名了,最后单机ok即可。
2、被删除的表已经被重建,该表闪回回来就不能叫原来的名字了,需要改名才可以。
SQL> drop table dept;Table dropped.SQL> create table dept as select * from emp;Table created.SQL> show recyclebinORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME---------------- ------------------------------ ------------ -------------------DEPT BIN$Yp++TDYMQczgQwpCA2lBzA==$0 TABLE 2009-02-11:14:30:43SQL> flashback table dept to before drop;flashback table dept to before drop*ERROR at line 1:ORA-38312: original name is used by an existing objectSQL> flashback table dept to before drop rename to dept_bak;Flashback complete.3、如果表被删除了两次,想闪回前一次删除的那个表的恢复方法SQL> drop table dept;Table dropped.SQL> create table dept as select * from emp;Table created.SQL> show recyclebinORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME---------------- ------------------------------ ------------ -------------------DEPT BIN$Yp++TDYNQczgQwpCA2lBzA==$0 TABLE 2009-02-11:14:45:42SQL> drop table dept;Table dropped.SQL> show recyclebinORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME---------------- ------------------------------ ------------ -------------------DEPT BIN$Yp++TDYOQczgQwpCA2lBzA==$0 TABLE 2009-02-11:14:46:44DEPT BIN$Yp++TDYNQczgQwpCA2lBzA==$0 TABLE 2009-02-11:14:45:42SQL> flashback table "BIN$Yp++TDYNQczgQwpCA2lBzA==$0" to before drop;Flashback complete.SQL> show recyclebinORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME---------------- ------------------------------ ------------ -------------------DEPT BIN$Yp++TDYOQczgQwpCA2lBzA==$0 TABLE 2009-02-11:14:46:44注意:对于上面的2和3的情况,对于index、constraint、trigger等等和上面第一种情况对index、constraint处理方法一样三、用例子说明如何闪回被dml操作过的表(以scott用户下的test 表为例)对于这种闪回恢复,一般可以分为两种方法恢复,一种是恢复到过去的某个scn点,但是这种方法需要知道scn号,这个只能从系统中查到,或者通过oracle 提供的一个函数把时间转换成对应的scn号,因此还是比较麻烦的,所以很少用;另外一种就是指定恢复到过去的某个时间点,这种方法看上去一目了然,所以也都使用这种方法,下面也只举第二种方法的例子。