1.说明
Flashback技术是以Undo segment中的内容为基础的,因此受限于UNDO_RETENTION参数。要使用flashback特性,必须启用自动撤销表空间管理。
在oracle 10g中,flash back分为一下成员:Flashback Database、Flashback Drop、Flashback Query(分为Flashback Query、Flashback Version Query、Flashback Transation Query三种)和Flashback Table。
2.Flashback Database
把整个数据库回退到过去的某个时点,依赖于Flashback log日志。速度很快,可以认为是不完全恢复的替代技术。
2.1 受到以下限制
-
- Flashback不能解决Media Failure问题,这种情况RMAN恢复是唯一选择;
- 如果删除了数据文件或者使用shrink技术缩小数据库文件大小,这是不能使用flashback database回退到改变之前的状态,这时候就必须先利用RMAN把删除之前或者缩小之前的文件备份restore出来,然后利用flashback database执行剩下的数据恢复。
- 控制文件如果是从备份汇总恢复的,或者是重建的,不能使用flashback database
- 使用flashback database所能恢复到最早的SCN,取决与flashback log中的最早的SCN
2.2 flashback database架构
flashback database包括一个后台进程RVWR(recover write),flashback database log日志和flashback recovery area。一旦数据库启用了flashback database,该RVWR进程会启动,该进程会向flashback database area写入flashback database log。这些日志包括的是数据块的“前镜像”。
查看后台进程 ps -ef|grep rvw
2.3 启用flashback database
系统默认是关闭flashback database功能的,要启用,需要做以下配置:
2.3.1 配置flashback database area
需要配置的包括大小和位置,如果是RAC,flashback recovery area必须在共享存储中。数据必须处于archivelog模式。
启用:alter system set db_recovery_file_dest_size=20G,scope=both;
alter system set db_recovery_file_dest='/DBA/FB' scope=both;
禁用:alter system set db_recovery_file_dest='';
2.3.2 启用数据库 flashback 功能
-
-
-
- 启动数据库到mount:startup mout;
- 检查flashback暂时是关闭的:select name,current_scn,flashback_on from v$database;
- 启动:alter database flashback on;
- 设置初始化参数db_flashback_retention_target 控制数据保留的时间 默认是1440 单位是分钟,即24小时
- 启动数据库 alter database open;
2.4 语法
首先要将数据库启动到mount状态
flashback database to timestamp to_timestamp('20090101 21:22:22','yyyymmdd hh:24:mi:ss');
flashback database to scn 947921;
执行万flashback database后有两种方式修复数据库,
1)直接以alter database open resetlogs;打开数据库;指定scn或者timestamp后的数据统统丢弃;
2)alter database open read only;打开数据库,通过逻辑导出的方式将误操作的表的数据导出,再执行recover database命令以重新应用数据库产生的redo,将数据库修复到flashback database前的状态。再
通过逻辑导入的方式将之前误操作的表重新导入,这样的化对现有数据的表影响最小,不会有数据丢失。
2.5相关视图
-
-
- v$database:查看是否启用了flashback database功能
- v$flashback_database_log
- flashback database 所能回退到的最早时间
- oldest_flashback_scn/oldest_flashback_time
- flashback size:flash recovery area大小
- retention target:系统定义的策略
- estimated_flashback_size:根据策略对所需的空间大小的估值
- v$flashback_database_stat;对flashback log空间进行更细粒度的记录和估计
2.flashback drop
从10g开始,用于恢复误删除的对象,包括表和索引。依赖与tablespace recycle bin(表空间回收站)。
flashback不支持sys用户,system表空间下的对象,也不能从表空间回收站中拿到。
2.1 Tablespace Recycle Bin
从ORACLE10g开始,表空间会存在叫做回收站的逻辑区域,当用户执行drop时,被删除的表和表的关联对象不会被物理删除。
初始化参数recyclebin用于控制是否启用recyclebin,缺省是on,可以使用off关闭。
show recyclebin
-
- purge tablespace tablespacename:清空表空间的recyclebin
- purge tablespace tablespacename user username:清除表空间的recycle bin中指定用户的对象
- purge recyclebin 删除当前用户的recyclebin对象
- purge dba_recyclebin:删除所有用户的recyclebin对象,该命令要sysdba权限
- drop table tablename purge:永久删除
- purge index recycle_bin_object_name:当想删除recyclebin的空间,又想能恢复表时,可以通过释放该对象的index所占用的空间来环节空间压力。
2.2 实例操作
flashback table tablename to before drop;
flashback table tablename to before drop rename to b;
select original_name,object_name from recyclebin;
flashback table "object_name" to before drop;
2.3 限制
-
- 只能用于非系统表空间和本地管理的表空间
- 对象的约束参考不会被恢复,指向该对象的外键约束需要重建
- 对象能否恢复成功,取决与对象空间是否被覆盖使用
- 当删除表是,依赖于该表的物化视图也会同时删除,物化视图不会被放入recyclebin。flashback table不会恢复物化视图
- 对于recyclebin中的对象,只支持查询
3 flashback query
3.1 flashback query(9ir2)
利用多版本读一致性的特性从undo表空间读取操作前的记录数据。
3.1.1 语法
select * from table as of timestamp sysdate-5/1440;
select * from table as of scn scnnumber;
恢复数据使用insert +select方式
oracle内部使用的是scn,即时用的是timestamp也会转换成scn。系统时间与scn之间的关系存在一张表,即sys下的SMON_SCN_TIME;每隔5分钟产生一次记录,表中记录了1440个时间标记与scn的匹配记录
select scn ,to_char(time_dp,'yyyymmdd hh24:mi:ss') from sys.smon_scn_time;
3.2 flashback version query (10g)
查看过去某个时间段内,数据是如何发生变化的。伪列ORA_ROWSCN(10g新增).
select versions_xid,versions_startscn,versions_endscn,versions_opreration from tablename versions between scn minvalue and maxvalue;
flashback_transation_query表.ORA_ROWSCN数据不修改时不发生变化,是数据块级别。
3.3 flashback transation query
使用undo信息来实现。可以查看某个事务执行的所有变化,他需要访问flashback_transation_query视图。xid列表示事务id。
4 flashback table
sys用户不支持闪回。
flashback talbe也是使用undo tablespace的内容实现数据的回退。
flashback table tablename to scn(to timestamp);
注意:需要表支持row movement。可以在user_tables中查询
select row_movement from user_talbes where table_name='a';
alter table tablename enable row movement;
alter table tablename disable row movement;
5 注意事项
1.基于undo 的表恢复,需要注意DDL 操作的影响
第三个就是修改并提交过数据之后,对表做过DDL 操作,包括:
drop/modify 列, move 表, drop 分区(如果有的话), truncate table/partition,这些操作会另undo 表空间中的撤销数据失效,对于执行过这些操作的表应用flashback query 会触发ORA-01466 错误。另外一些表结构修改语句虽然并不会影响到undo 表空间中的撤销记录,但有可能因表结构修改导致undo 中重做记录无法应用的情况,比如对于增加了约束,而flashback query 查询出的undo 记录已经不符合新建的约束条件,这个时候直接恢复显然不可能成功,你要么暂时disable 约束,要么通过适当逻辑,对要恢复的数据进行处理之后,再执行恢复。
另外,flashback query 对v$tables,x$tables 等动态性能视图无效,不过对于dba_*,all_*,user_*等数据字典是有效的。同时该特性也完全支持访问远端数据库,比如select * from tbl@dblink as of scn 360;的形式。
2. 基于undo 的表恢复,flashback table 实际上做的也是dml 操作(会在被操作的表上加dml 锁),因此还需要注意triggers 对其的影响,默认情况下,flashback table to scn/timestamp 在执行时会自动disable 掉与其操作表相差的triggers,如果你希望在此期间trigger 能够继续发挥做用,可以在flashback table 后附加
ENABLE TRIGGERS 子句。
分享到:
相关推荐
### Oracle Flashback 技术详解 #### 一、概述 Oracle Flashback 技术是一种能够帮助用户恢复数据库至某一特定时间点的技术。该技术利用了Undo Segment中的数据,因此受到`UNDO_RETENTION`参数的影响。为了启用...
ORACLE flashback database测试,主要进行ORACLE flashbackup 闪回整个数据库的实现。
Oracle Flashback技术是Oracle数据库提供的一种强大的数据恢复和时间旅行功能,它允许用户查看和恢复到数据库的某个历史状态,而无需依赖传统的备份和恢复过程。这一特性在处理误删除、错误更新或需要查看历史数据时...
ORACLE FLASHBACK 综述 Oracle Flashback 是 Oracle 数据库中的一种功能,允许用户快速地恢复数据库到以前的状态,从而避免了由于操作失误或用户错误带来的问题。下面是 Oracle Flashback 的知识点。 1. Oracle ...
Oracle Flashback技术是Oracle数据库提供的一种强大的数据恢复和历史数据查询功能,它允许用户恢复到数据库的某个历史状态,或者查询过去的某个时刻的数据。这项技术的核心是基于Undo Segment中的信息,Undo Segment...
Oracle Flashback 特性 Oracle Flashback 是 Oracle 数据库中的一种功能强大的特性,可以让用户快速地恢复到过去的某个时间点,查看过去的数据状态,或者是回滚到某个特定的事务状态。Flashback 特性可以分为三个...
Oracle Flashback技术是数据库管理系统中的一种高级特性,它允许用户恢复到数据库的某个历史状态,无需进行复杂的备份和恢复操作。这项技术主要基于事务日志和快照来实现,为数据库管理员提供了极大的便利,尤其在...
Oracle Flashback技术是Oracle数据库提供的一种高级数据恢复机制,它允许用户恢复到数据库的某个历史状态,无需回滚日志或还原备份。在医院数据恢复中,这一特性尤为重要,因为医院业务的连续性和数据完整性至关重要...
### Oracle Flashback技术详解 #### 一、概述 Oracle Flashback技术是一种强大的数据恢复机制,它可以帮助用户在遇到数据丢失或损坏的情况下恢复到之前的某个时间点。这项技术基于Undo Segment中的内容,允许用户...
在Oracle 10g中,Flashback技术包含了多个组件,如Flashback Database、Flashback Drop、Flashback Query(包括Flashback Query、Flashback Version Query和Flashback Transaction Query)以及Flashback Table。...
这一技术在Oracle 10g版本中得到了极大的增强和发展,形成了一个完整的“Flashback家族”,其中包括Flashback Database、Flashback Drop、Flashback Query(进一步细分为Flashback Query、Flashback Version Query、...
FLASHBACK DATABASE flashback data1base闪回到过去的某一时刻 闪回点之后的所有工作都将丢失 必须使用resetlogs创建新的场景并打开数据库(一旦resetlogs之后,将不能再闪回至resetlogs之前的时间点) .......
"Oracle-Flashback-技术-总结.txt"和"oracle_10g_flashback(数据恢复).txt"以及"oracle_10g_flashback.txt"这三份文档可能提供了一个全面的概述,包括Flashback日志、闪回数据库(Flashback Database)、闪回事务...
### Oracle 10g Flashback 数据恢复功能详解 Oracle 10g 引入了强大的 Flashback 技术,这是一系列旨在帮助管理员和开发者在出现数据丢失或损坏时能够快速恢复数据的功能集合。该技术从 Oracle 9i 开始引入,并在 ...
"Oracle 闪回(Flashback)技术" Oracle 闪回(Flashback)技术是 Oracle 数据库提供的一系列人为错误更正技术,用于快速恢复逻辑误操作。闪回技术从 Oracle 9i 版本开始,逐步发展到 Oracle 11g 版本,成为数据库...
Oracle 11g Flashback Archive 资料整理 Oracle Flashback Archive 是 Oracle 11g 中的一项新特性,旨在提供有针对性数据表的可控时间闪回功能。Flashback Archive 可以实现对特定数据表的闪回,保留不同时间的数据...
Oracle 10g引入了一系列回闪(Flashback)技术,旨在提供一种快速恢复数据库至特定时间点的能力,而无需传统的备份和恢复过程。这些技术允许数据库管理员轻松地撤消数据更改或恢复到特定的时间点,为误操作提供了...
Oracle 闪回特性 FLASHBACK & RECYCLEBIN Flashback 系列是 Oracle 数据库中的一组功能强大且实用的闪回机制,旨在帮助数据库管理员和开发者快速恢复数据库中的各种对象,包括表、数据、事务等。Flashback 系列的...