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)读一致性:当一个会话正在修改数据时,其它的会话将看不到该会话未提交的修改。
- 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 ,指明相关的文件是否在恢复区内。