Oracle10g闪回恢复区详解
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保留时间的信息。
oracleflashback闪回功能之--恢复存储过程篇
oracleflashback闪回功能之--恢复存储过程篇超级好用的oracle 闪回功能之--恢复存储过程篇┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┠※┃名称:oracle 闪回功能之--恢复存储过程篇┠※┃说明:将存储过程恢复到某一指定时间段。
┠※┃作者:zlj113┠※┃时间:20091225┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛经常有在工作中误操作导至程存过程被替换或被删除的现象产生。
给工作带来一定的麻烦,可能需要重新写一次代码,若过程比较短重写一次还能接受,若是那种比较长的存储过程重要则是需要付出相当大的代价的。
好在oracle10G就开始提供了一种强大的闪回flashback 功能,可以针对误删除的数据,表,存储过程等进行恢复。
废话就先不说了,看看详细的恢复过程吧^^....首先需要用SYS登陆到PLSQL Devplore 中,选择 sysdba 的权限,若用其它的用户登陆则在下面的操作中会提示出权限不足的警告第三种方法:SQL> set pagesize 0SQL> column text format a4000SQL> spool C:\7.textStarted spooling to C:\7.textSQL> SELECT textFROM DBA_source AS OF TIMESTAMP TO_TIMESTAMP('2009-12-25 10:07:00', 'YYYY-MM-DD HH24:MI:SS')WHERE OWNER = '用户名'AND NAME = ‘存储过程名’ORDER BY LINE;SQL> spool off;这种方法就不用事先查询出存储过程的ID只需要知道名字和用户即可.第一种方法:在Command窗体里依次输入:set pagesize 0column text format a4000 --格式化text 列的数据 a4000表示文字按4000长度显示spool c:\1.text -- 这句是指一会将结果输出到文件,如果存储过程比较小则可以采用第2种方法)select text From source$ as of timestamp to_timestamp('2009-12-25 12:21:38', 'yyyy-mm-dd hh24:mi:ss') where obj#=55110; --这里的时间点就是你想要恢复什么时候的存储过程. 而obj#=55110 这个55110是你存储过程相对应的ID号,可以在事先用select object_id from dba_objects where object_name ='存储过程名注意大小写是敏感的'; 查出所对应的ID号。
Oracle10g Flashback 实践
Oracle10g Flashback 实践2008-11-21 16:52一、概述环境:RHEL4.5,oracle10.2.0.1Flashback 是ORACLE 自9i 就开始提供的一项特性,在9i 中利用oracle 查询多版本一致的特点,实现从回滚段中读取表一定时间内操作过的数据,可用来进行数据比对,或者修正意外提交造成的错误数据,该项特性也被称为Flashback Query。
在10g 中Flashback又得到了相当大的增强,利用Recycle Bin(回收站)和Flash Recovery Area(闪回区)的特性实现快速恢复删除表(Flashback Table)或做数据库时间点恢复(Flashback Database)的功能。
要使用flashback 的特性,必须启用自动撤销管理表空间,不仅是flashback query,也包括flashback table 和flashback database,而对于后两项还会有些其它的附加条件,比如flashback table 需要启用了recycle bin(回收站),flashback database 还要求必须启用了flashback area(闪回区)。
SQL> show parameter undoNAMETYPE VALUE------------------------------------ -----------------------------------------undo_management string AUTOundo_retention integer 10800undo_tablespace string UNDOTBS1在一种情况下,undo 表空间能够确保undo 中的数据在undo_retention 指定时间过期前一定有效,就是为undo 表空间指定Retention Guarantee,指定之后,oracle 对于undo 表空间中未过期的undo 数据不会覆盖,例如:SQL> Alter tablespace undotbs1 retention guarantee;如果想禁止undo 表空间retention guarantee,如例:SQL> Alter tablespace undotbs1 retention noguarantee;二、Flashback Query(闪回查询)Flashback Query 是利用多版本读一致性的特性从UNDO 表空间读取操作前的记录数据!1、As of timestamp的示例SQL> create table tab_test as select rownum id from dba_users;SQL> delete from tab_test where id<5;SQL> commit;假设当前距离删除数据已经有3分钟左右的话:SQL> select count(*) from tab_test as of timestamp sysdate-3/1440 where id<10;SQL> insert into tab_test select * from tab_test as of timestamp sysdate-3/1440 where id<5;SQL> commit;提示:as of timestamp|scn 的语法是自9iR2 后才开始提供支持,如果是9iR1 版本,需要使用DBMS_FLASHBACK包来应用flashback query 的特性。
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中引入的回闪查询重建表行。
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号进行闪回。
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 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闪回介绍
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 闪回区
Oracle 闪回区(Oracle Flash recovery area)详细介绍闪回区已经有了好几载的岁月了,在10g的时候就被推出一直延续到现在。
Oracle 闪回区是为RMAN准备的,尽管抛开它我们可以同样完成数据库备份恢复的相关工作,Oracle依旧强烈推荐使用且它让其成为RMAN的组件之一。
这是因为该区域可集中简化管理所有和备份恢复工作,这也是其魅力所在。
本文描述了Oracle 闪回区的特性及其配置闪回区,监控闪回区等。
1、闪回区特性及其配置闪回区就是分配一个特定的目录位置(普通磁盘上的目录或ASM磁盘)来存放一些特定的恢复文件,用于集中和简化管理数据库恢复工作。
通过配置闪回区,可以避免在多实例归档到相同磁盘时,磁盘空间耗尽而影响所有实例的情行。
也就是说缩小影响范围。
闪回区单词缩写为FRA,下面的描述FRA即指的是闪回区,也可能存在混用闪回区或FRA的情形。
闪回区可存储文件的类型完全的数据文件备份增量备份数据文件副本当前的控制文件,备份的控制文件,spfile文件,快照控制文件联机日志文件,归档日志块跟踪文件、闪回日志启用与禁用闪回区设置下面的初始化参数(spfile或pfile文件)DB_RECOVERY_FILE_DEST_SIZE:用于设置闪回区的大小,此参数应优先于DB_RECOVERY_FILE_DEST参数修改,否则ORA-32001DB_RECOVERY_FILE_DEST:用于设置闪回区的目录DB_FLASHBACK_RETENTION_TARGET:指定数据库可以闪回的时间范围,单位为分钟,默认1440分钟,也就是一天数据库闪回分为多种情形,其闪回日志存放在FRA,可闪回的时间同时还取决于闪回恢复区的大小将DB_RECOVERY_FILE_DEST参数设置为空,可以停用FRA,但是启用flashback database,则不能取消FRA,需要先禁用flashback database数据库FRA可以为每个数据库配置不同的闪回区,也可以为多个数据库配置相同路径的闪回区当为多个数据库配置相同的闪回区位置时,应考虑闪回区所在磁盘挂载点的总大小以及使用不同的DB_NAME多个数据库或实例使用相同的闪回区时,其路径为:FRA_HOME/<db_name>/<file_type>/<date>/<file_name>FRA中的保留策略FRA中的文件的保留与否由RMAN保留策略来决定。
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的闪回技术是由几个相对独立的技术实现的。
Oracleg中使用闪回技术详解
Oracle 10g中使用闪回技术在Oracle10g中,可以在行、表和数据库级别使用闪回技术,具体分类如下:1、行级闪回可以使用行闪回技术撤销对个别行的错误更改。
有三种行级闪回技术,他们全都依赖于存储在撤销表空间中的撤销数据。
(1)闪回查询:允许根据时间点或SCN(System Change Number)查看旧的行数据。
可以查看更旧的数据,并且,如果需要可以检索它并撤销错误的更改。
(2)闪回版本查询:允许查看相同行在一段时间内的所有版本,以便可撤销逻辑错误。
它还可以提供更改的审计历史,允许比较当前数据与历史数据而不用执行DML活动。
(3)闪回事务查询:允许查看事务级所做的更改。
此技术帮助分析和审计事务,例如,一个批作业执行了两次,你想确定哪些对象受到影响等。
使用此技术可撤销指定时间段内某个事务所做的更改。
2、表级闪回(1)闪回表:复原一个表到某个时间点,或者到指定的SCN而不用恢复数据文件。
此特性使用DML更改撤销表中的更改。
闪回表特性依赖于撤销数据。
(2)闪回删除:允许倒退一条DROP TABLE语句的结果,而不用进行时间点恢复。
闪回删除特性使用回收站复原被删除的表。
3、数据库级闪回闪回数据库特性允许复原整个数据库到某个时间点,从而撤销自该时间以来的所有更改。
闪回数据库主要利用闪回日志检索数据块的更旧的版本,它也依赖归档重做日志完全地恢复数据库,不用复原数据文件和执行传统的介质恢复。
闪回和传统的恢复技术对比与传统恢复技术不同,闪回技术的主要目的不是从介质丢失中恢复,而是从人为错误中恢复。
例如:用户可能错误的删除了某个表或者错误的更改了某个表的数据。
这时候你想撤销你刚才的操作。
传统上,从人为错误中恢复数据唯一的办法就是采用用户管理的备份和恢复技术。
先复原数据库文件然后利用所有重做日志文件前滚的过程需要长时间的停机。
而闪回技术提供了从逻辑错误中恢复的更有效和更快的方法,多数情况下,在用这种技术进行恢复时数据库仍然联机并对用户可用。
Oracle的闪回恢复区和归档日志多路径设置
Oracle的闪回恢复区和归档⽇志多路径设置Oracle9i开始提供闪回查询,以便能在需要的时候查到过去某个时刻的⼀致性数据,这是通过Undo实现的。
这个功能有很⼤的限制,就是相关事务的undo不能被覆盖,否则就⽆⼒回天了。
oracle10g⼤⼤的增强了闪回查询的功能,并且提供了将整个数据库回退到过去某个时刻的能⼒,这是通过引⼊⼀种新的flashback log实现的。
flashback log有点类似redo log,只不过redo log将数据库往前滚,flashback log则将数据库往后滚。
为了保存管理和备份恢复相关的⽂件,oracle10g提供了⼀个叫做闪回恢复区(Flashback recovery area)的新特性,可以将所有恢复相关的⽂件,⽐如flashback log,archive log,backup set等,放到这个区域集中管理。
1.设置闪回恢复区闪回恢复区主要通过3个初始化参数来设置和管理db_recovery_file_dest :指定闪回恢复区的位置db_recovery_file_dest_size :指定闪回恢复区的可⽤空间⼤⼩db_flashback_retention_target :指定数据库可以回退的时间,单位为分钟,默认1440分钟,也就是⼀天。
当然,实际上可回退的时间还决定于闪回恢复区的⼤⼩,因为⾥⾯保存了回退所需要的flash log。
所以这个参数要和db_recovery_file_dest_size配合修改。
2.启动flashback database设置了闪回恢复区后,可以启动闪回数据库功能。
⾸先,数据库必须已经处于归档模式1.关闭数据库SQL> shutdown immediate;2.启动数据库为mount模式SQL> startup mount3.显⽰和修改归档模式SQL> archive log listSQL> alter database archivelog;SQL> alter database open4.设置归档⽇志的格式SQL>alter system set log_archive_format='ARC%s%t%r.log' scope=spfile;5.设置归档⽇志的存放路径SQL>alter system set log_archive_dest='+data/arcl' scope=spfile;SQL>shutdown immediateSQL>startup6.强制切换归档⽇⾄SQL>alter system switch logfile;7.取消归档SQL>alter database noarchivelog;参数1.格式参数%s⽇志序列号%S⽇志序列号(带前导的0)%t重做线程编号%a活动的ID号%d数据库ID号%r RESELOGS的iD值SQL> archive log list;Database log mode Archive ModeAutomatic archival EnabledArchive destination USE_DB_RECOVERY_FILE_DESTOldest online log sequence 156Next log sequence to archive 158Current log sequence 158然后,启动数据库到mount状态SQL> shutdown immediate;Database closed.Database dismounted.ORACLE instance shut down.SQL> startup mountORACLE instance started.Total System Global Area 285212672 bytesFixed Size 1218992 bytesVariable Size 75499088 bytesDatabase Buffers 205520896 bytesRedo Buffers 2973696 bytesDatabase mounted.SQL>alter database flashback on;数据库已更改。
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 ;数据库已更改。
oracle10g使用RMAN和flash_recovery_area进行自动备份恢复
oracle10g使用RMAN和flash_recovery_area进行自动备份恢复oracle 10g使用RMAN和flash_recovery_area进行自动备份恢复文章分类:数据库本文摘自互联网,经过自己实际检测应用,并做了详细修改。
1.配置控制文件自动备份从9i开始,可以用rman来配置控制文件的自动备份,默认备份到$ORACLE_HOME/dbs目录下,如果是10g且使用了闪回区(flash_recovery_area),则备份到闪回区。
使用rman配置控制文件自动备份,前提是一定要设置数据库为归档模式,否则不生效。
1.1环境用下面的命令查看SQL> select * from v$version;SQL> archive log listSQL> show parameter recovery;NAME TYPE VALUE------------------------------------ -----------------------------------------db_recovery_file_dest string /oracle10/flash_reco very_area db_recovery_file_dest_size big integer 1048Mrecovery_parallelism integer 01.2配置控制文件自动备份$ rman target /RMAN> configure controlfile autobackup on;old RMAN configuration parameters:CONFIGURE CONTROLFILE AUTOBACKUP OFF;new RMAN configuration parameters:CONFIGURE CONTROLFILE AUTOBACKUP ON;new RMAN configuration parameters are successfully stored RMAN>RMAN> show controlfile autobackup;RMAN configuration parameters are:CONFIGURE CONTROLFILE AUTOBACKUP ON;RMAN>1.3 测试1.3.1 创建1个新的表空间(在数据库结构发生变化时,就会自动备份控制文件)$ sqlplus / as sysdbaSQL> create tablespace tbs_test datafile'/oracle10/oradata/ora10g/tbs_test_01.dbf' size 10M;Tablespace created.1.3.2观察alert_ora10g ($ORACLE_BASE/admin/$ORACLE_SID/bdump)日志文件,发现发生了控制文件的自动备份Tue Jan 8 20:52:15 2008create tablespace tbs_test datafile'/oracle10/oradata/ora10g/tbs_test_01.dbf' size 10MTue Jan 8 20:52:19 2008Starting control autobackupControl autobackup written to DISK devicehandle'/oracle10/flash_recovery_area/ORA10G/autobackup/2008_ 01_08/o1_mf_s_6 43495940_3r6wj9j1_.bkp'Completed: create tablespace tbs_test datafile'/oracle10/oradata/ora10g/tbs_test_01.dbf' size 10MPS:其实控制文件和spfile同时被自动备份了1.3.3观察闪回区的文件cd[oracle10@seagull ~]$ cd/oracle10/flash_recovery_area/ORA10G/autobackup/2008_0 1_08/[oracle10@seagull 2008_01_08]$ ls -ltotal 6988-rw-r----- 1 oracle10 oinstall 7143424 Jan 8 20:52o1_mf_s_643495940_3r6wj9j1_.bkp1.4恢复控制文件和spfile1.4.1恢复控制文件到一个临时目录下RMAN> restore controlfile to '/tmp/control01.ctl' from autobackup; 文件默认从最近的一个备份进行回复,可以把生成的文件copy到原始的控制文件存放目录/$ORACLE_BASE/product/oradata/[instance]/control01.ctlPS:如果数据库没有mount,则此操作会报错,可以采用set dbid 命令或者恢复时指定自动备份集(restore controlfile to 'xx' from 'xxxx')。
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小时前的值都会被覆盖,以 分为单位
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
何为闪回恢复区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 的新功能之一。
如果在开始的时候没有启用闪回恢复区,可以通过如下方式设定。
调整如下两个动态初始化参数(无需重新启动实例):SQL> ALTER SYSTEM SET db_recovery_file_dest_size=2gSCOPE=BOTH;System altered.SQL>SQL> ALTER SYSTEM SET db_recovery_file_dest='/u01/app/oracle/flash_recovery_area' 2SCOPE=BOTH;System altered.SQL>之后查看所作的修改是否生效:SQL> SHOW parameter db_recovery_file_dest NAMETYPE VALUE----------------------- ------------------------------------------db_recovery_file_deststring/u01/app/oracle/flash_recovery_area db_recovery_file_dest_size big integer 2G SQL>如上所示,我们设定了闪回恢复区,位置在 /u01/app/oracle/flash_recovery_area,上限为2G。
如果要撤销闪回恢复区,把初始化参数 DB_RECOVERY_FILE_DEST 的值清空即可。
注意: DB_RECOVERY_FILE_DEST_SIZE 只有在 DB_RECOVERY_FILE_DEST 清空之后才可以清空。
初始化参数 db_recovery_file_dest_size 的设定有一点点需要注意的地方:∙文件的第0块和操作系统数据块头的空间大小不包含在内∙该参数并不代表实际占用的空间大小。
如果空间被压缩、镜像、RAID 的话,该参数的值意义是不一样的管理并监控闪回恢复区我们先看看闪回恢复区内的文架结构层次SQL> host tree/u01/app/oracle/flash_recovery_area/u01/app/oracle/flash_recovery_area|-- DEMO| |-- archivelog| | |--2004_12_07| | | |-- o1_mf_1_10_0vbwz2fm_.arc| || |-- o1_mf_1_11_0vc1yj14_.arc| | | |--o1_mf_1_12_0vc6vvws_.arc| | | |--o1_mf_1_13_0vcbv6cg_.arc| | | |--o1_mf_1_14_0vchlxb3_.arc| | | |--o1_mf_1_15_0vcnBbz_.arc| | | |--o1_mf_1_5_0vbk8goo_.arc| | | |--o1_mf_1_6_0vbkq6dk_.arc| | | |--o1_mf_1_7_0vbktl5f_.arc| | | |--o1_mf_1_8_0vbo97xp_.arc| | | `--o1_mf_1_9_0vbrrlo6_.arc| | `-- 2004_12_08| ||-- o1_mf_1_16_0vcnyqvf_.arc| | |--o1_mf_1_17_0vcp58bj_.arc| | |--o1_mf_1_18_0vcv4qxb_.arc| | |--o1_mf_1_19_0vczcsl0_.arc| | |--o1_mf_1_20_0vd34svw_.arc| | |--o1_mf_1_21_0vd7tg4h_.arc| | |--o1_mf_1_22_0vddq7lc_.arc| | |--o1_mf_1_23_0vdk0nbh_.arc| | |--o1_mf_1_24_0vdojjky_.arc| | |--o1_mf_1_25_0vdtg1rq_.arc| | |--o1_mf_1_26_0vdz23B_.arc| | |--o1_mf_1_27_0vf3nlnw_.arc| | |--o1_mf_1_28_0vf6hon5_.arc| | |--o1_mf_1_29_0vf867lt_.arc| | |--o1_mf_1_30_0vf86pkg_.arc| | `--o1_mf_1_31_0vfjphqm_.arc| `-- backupset| |--2004_12_07| | |--o1_mf_ncsn1_TAG20041207T150715_0vboq7kv_.bkp| |`-- o1_mf_nnnd1_TAG20041207T150715_0vboo3t2_.bkp|`-- 2004_12_08| |--o1_mf_ncsnf_TAG20041208T161219_0vffxv2n_.bkp||-- o1_mf_ncsnf_TAG20041208T165456_0vfjcvgl_.bkp|`-- o1_mf_nnndf_TAG20041208T161219_0vffv40q_.bkp`--tracking.dbf7 directories, 33 files闪回恢复区中添加或删除文件等变化都将记录在数据库的 alert 日志中,Oracle 10g 也针对该新特性提供了一个新的视图, DBA_OUTSTANDING_ALERTS,通过该视图可以得到相关的信息。
DBA_OUTSTANDING_ALERTS 视图的存在体现了 Oracle 愈加人性化的一面。
我们先来看一下该视图的基本结构,后面会用到。
SQL> DESC dba_outstanding_alerts NameNull? Type ----------------------------------------------------------- SEQUENCE_IDNUMBER OWNERVARCHAR2(30) OBJECT_NAMEVARCHAR2(513) SUBOBJECT_NAMEVARCHAR2(30) OBJECT_TYPEVARCHAR2(64) REASONVARCHAR2(4000) TIME_SUGGESTEDTIMESTAMP(6) WITH TIME ZONE CREATION_TIMETIMESTAMP(6) WITH TIME ZONE SUGGESTED_ACTIONVARCHAR2(4000) ADVISOR_NAMEVARCHAR2(30) METRIC_VALUENUMBER MESSAGE_TYPEVARCHAR2(12) MESSAGE_GROUPVARCHAR2(64) MESSAGE_LEVELNUMBER HOSTING_CLIENT_IDVARCHAR2(64) MODULE_IDVARCHAR2(64) PROCESS_IDVARCHAR2(128) HOST_IDVARCHAR2(256) HOST_NW_ADDRVARCHAR2(256) INSTANCE_NAMEVARCHAR2(16) INSTANCE_NUMBERNUMBER USER_IDVARCHAR2(30) EXECUTION_CONTEXT_IDVARCHAR2(60) ERROR_INSTANCE_IDVARCHAR2(142)SQL>10g 的新视图 V$RECOVERY_FILE_DEST 包含闪回恢复区的相关信息:SQL> desc V$RECOVERY_FILE_DEST NameNull? Type ----------------------------------------------------------- NAMEVARCHAR2(513) SPACE_LIMITNUMBER SPACE_USEDNUMBER SPACE_RECLAIMABLENUMBER SQL> SELECT NAME, space_limit, space_used,space_reclaimable space_rec, 2 number_of_filesfile_num 3 FROM v$recovery_file_dest;NAMESPACE_LIMIT SPACE_USED SPACE_RECFILE_NUM--------------------------- --------------------- --------------------/u01/app/oracle/flash_recovery_area2147483648 1106849280 602410496 30SQL>在一些 10g 的动态视图里( V$CONTROLFILE, V$LOGFILE, V$ARCHIVED_LOG, V$DATAFILE_COPY 等 )的新的列 IS_RECOVERY_DEST_FILE ,指明相关的文件是否在恢复区内。