Oracle Flashback 技术 总结
Oracle Flashback
5). Drop table table_name purge: 删除对象并且不放在Recycle Bin中,即永久的删除,不能用Flashback恢复。
SQL> select original_name,object_name from recyclebin;
ORIGINAL_NAME OBJECT_NAME
-------------------------------- ------------------------------
From:
/docs/cd/E11882_01/server.112/e17120/tables011.htm#ADMIN11679
初始化参数recyclebin 用于控制是否启用recyclebin功能,缺省是ON, 可以使用OFF关闭。
buffer_pool_recycle string
db_recycle_cache_size big integer 0
recyclebin string on
禁用该功能:
SQL> alter system set recyclebin=off;
Oracle Flashback 技术总结3(转载David Dai )2.4.3.1. Tablespace Recycle Bin
从Oracle 10g 开始, 每个表空间都会有一个叫作回收站的逻辑区域,当用户执行drop命令时, 被删除的表和表的关联对象( 包括索引, 约束,触发器,LOB段,LOB index 段) 不会被物理删除, 这些对象先转移到回收站中,这就给用户提供了一个恢复的可能。
oracle_flashback
---闪回技术闪回的文件存放在闪回(快速)恢复区。
通过db_recovery_file_dest 初始化参数指定其位置。
db_recovery_file_dest_size 参数设置其大小。
alter system set db_recovery_file_dest='path';alter system set db_recovery_file_dest_size=3G scope=BOTH;停用闪回恢复区alter system set db_recovery_file_dest='';与闪回恢复区相关的视图有:dba_outstanding_alerts 相关警告信息v$recovery_file_dest 可以监控恢复区的使用空间情况v$flash_recovery_area_usage 与文件类型及空间有关的视图v$controlfile\ v$logfile \ v$archived_log \v$datafile_copy 中的列is_recovery_dest_file 指明相关的文件是否在恢复区。
闪回技术组要是7个功能的总称:1、闪回查询(闪回时间点查询,闪回版本查询)2、闪回数据归档3、闪回事务查询、4、闪回事务、5、闪回表6、闪回删表7、闪回数据库闪回技术是基于撤销空间、撤销数据块的。
初始化参数undo_retention 的值表示修改所产生的撤销数据应该在发起修改的事提交之后再保留的时间长度,单位是秒。
默认值是900秒即15 分钟。
默认的数据库是不尊重900s以上的任何设置。
即默认是NOGARANTEE (select retention from dba_tablespaces where tablespace_name='UNDOTBS1');可以修改为retention (alter tablespace undotbs1 retention guarantee);修改保留时长:alter system set undo_retention =300;撤销数据的保留策略取决于:初始化参数undo_retention 、undo表空间的数据文件是否启用自动增长undo 表空间是否绝对尊重undo_retention的值、数据库中的事务量。
Oracle闪回(Flashback)技术
例如: SQL>set time on 创建示例表: SQL>create table hr.mydep4 as select * from hr.departments; 删除记录: SQL>delete from hr.mydep4 where department_id=300; SQL>commit; 使用select查询不到刚才删除的记录,但使用闪回查询可 以找到: SQL>select * from hr.mydep4 as ofto_date(‘2012-3-28 10:30:00’, ‘yyyy-mmdd hh24: mi:ss’)) 3 Where department_id=300;
20
参数说明如下: VERSIONS BETWEEN:用于指定闪回版本查询时
的时间段或SCN段; AS OF:表示恢复单个版本; TIMESTAMP:表示时间。
在进行闪回版本查询时,可以同时使用VERSIONS短语 和AS OF短语。
AS OF短语决定了进行查询的时间点或SCN, VERSIONS短语决定了可见的行的版本信息。对于在 VERSIONS BETWEEN下界之前开始的事务,或在AS OF指定的时间或SCN之后完成的事务,系统返回的版本 信息为NULL。
用户可以从sysdate中得到系统的当前时间。 当用户发出FLASHBACK DATABASE语句之后,数 据库会首先检查所需要的归档文件与联机重建日志文件的可 用性。如果可用,则会将数据库恢复到指定的SCN或者时间 点上。
9
在数据库中闪回数据库的总数和大小由 DB_FLASHBACK_RETENTION_TARGET初始化参数控 制。可通过查询V$FLASHBACK_DATABASE_LOG视图 来确定能恢复到过去多远。
oracleFlashback详解
oracleFlashback详解使用oracle数据库时,难免会碰到一些问题.例:1.如何回滚已经commit了的数据2.如何查询已经被覆盖掉的数据[update],或者被delete了的数据3.如何将数据恢复到某个时间点我们就可以使用Flashback相关语句解决相关问题了关于Flashback[回闪]:从9i到10g到最新的11.2g,oracle对Flashback功能进行了进一步的扩展,利用Flashback我们可做到1.flashback query 闪回查询,并不实际修改表的数据2.flashback table 闪回表格,可恢复表格的数据3.flash database 闪回数据库,可恢复db的数据①:关于Flashback Query:1.Flash Query通过undo数据表空间数据,利用一致性的方法来查找用户需要的数据2.作用范围:查找指定时间点被(delete,update)的数据只是做查找操作,如果设计恢复那么就要使用flashback table了3.相关参数:1.查询出来的数据存活时间受undo_retention(默认为900秒)影响 [目标值,该变量(秒)可以影响undo表空间产生的data存活时间,时间一到,即死亡(消失)]2.闪回时间受undo表空间大小影响[关于undo表空间的操作,另一片文章会有讲解]3.查询的仅仅是快照,并不能修改当前状态4.基本语法[两种方式,使用时间片或scn号] 使用时间片的情况比较多1.select * from 你要查询表的名字 as of timestamp [查询某一时间该表的数据]2.select * from 你要查询表的名字 as of scn 具体scn号 [关于scn号,另一篇文章会讲解]4.原理:简单的说就是将以前被修改,删除了的数据,通过开启Flashback 模式,回到我们需要回到的时间来查看数据,在undo_retention该变量设置的时间过后,该镜像数据会自动被清除.相当于查看的是一个镜像数据.一种方式是利用scn号来查看镜像数据,另一种是通过查找时间片来查询镜像数据案例1:①--创建测试flashQuery表格主要由scn号和系统日期组成create table testQuery(id number,scn number,time varchar2(20),mydate varchar2(20));②--插入测试数据beginfor i in 1..16loopinsert into testQuery values(i,dbms_flashback.get_system_change_number(),to_char (sysdate,'yyyy-mm-dd hh24:mi:ss'),'你好'||i);--插入scn号和sysdate为方便后续查询commit;--如果不实时commit,那么会在循环完后,批量提交,时间点是一样的dbms_lock.sleep(2);--使用dbms_lock.sleep 方法和java的thread睡眠是一个意思参数以秒为单位end loop;end;③--查询未修改的数据result:1 3303552 2011-01-25 11:51:33 你好12 3303556 2011-01-25 11:51:35 你好23 3303558 2011-01-25 11:51:37 你好34 3303560 2011-01-25 11:51:39 你好45 3303562 2011-01-25 11:51:41 你好56 3303564 2011-01-25 11:51:43 你好67 3303566 2011-01-25 11:51:45 你好78 3303568 2011-01-25 11:51:47 你好89 3303570 2011-01-25 11:51:49 你好910 3303572 2011-01-25 11:51:51 你好1011 3303574 2011-01-25 11:51:53 你好1112 3303576 2011-01-25 11:51:55 你好1213 3303578 2011-01-25 11:51:57 你好1314 3303580 2011-01-25 11:51:59 你好1415 3303582 2011-01-25 11:52:01 你好1516 3303584 2011-01-25 11:52:03 你好16④--查询最新的scn号[类似于check point],该scn号在每次commit时,都会自动变化[使用scn号来开启Flashback Query模式] select dbms_flashback.get_system_change_number from dual;result:3307628 --该scn号可以理解成为一个check point点.我们可以借助这个标记来回退到该scn号查询当前的数据④--修改第十条,和第十一条的数据:update testQuery tq set tq.mydate='新年快乐'where scn='3303572';commit;update testQuery tq set tq.mydate='万事如意'where scn='3303574';commit;select*from testQueryresult:1 3303552 2011-01-25 11:51:33 你好12 3303556 2011-01-25 11:51:35 你好23 3303558 2011-01-25 11:51:37 你好34 3303560 2011-01-25 11:51:39 你好45 3303562 2011-01-25 11:51:41 你好56 3303564 2011-01-25 11:51:43 你好67 3303566 2011-01-25 11:51:45 你好78 3303568 2011-01-25 11:51:47 你好89 3303570 2011-01-25 11:51:49 你好910 3303572 2011-01-25 11:51:51 新年快乐11 3303574 2011-01-25 11:51:53 万事如意12 3303576 2011-01-25 11:51:55 你好1213 3303578 2011-01-25 11:51:57 你好1314 3303580 2011-01-25 11:51:59 你好1415 3303582 2011-01-25 11:52:01 你好1516 3303584 2011-01-25 11:52:03 你好16⑤--使用scn号来进行闪回查询1.不开启Flashback模式,仅使用Flashback query语句做查询select*from testQuery as of scn 3307628result:1 3303552 2011-01-25 11:51:33 你好12 3303556 2011-01-25 11:51:35 你好23 3303558 2011-01-25 11:51:37 你好34 3303560 2011-01-25 11:51:39 你好45 3303562 2011-01-25 11:51:41 你好56 3303564 2011-01-25 11:51:43 你好67 3303566 2011-01-25 11:51:45 你好78 3303568 2011-01-25 11:51:47 你好89 3303570 2011-01-25 11:51:49 你好910 3303572 2011-01-25 11:51:51 你好1011 3303574 2011-01-25 11:51:53 你好1112 3303576 2011-01-25 11:51:55 你好1213 3303578 2011-01-25 11:51:57 你好1314 3303580 2011-01-25 11:51:59 你好1415 3303582 2011-01-25 11:52:01 你好1516 3303584 2011-01-25 11:52:03 你好162.开启Flashback模式做查询,整个db将会产生某个scn号所在时间点的镜像数据.使用dbms包开启Flashback模式:execDBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER(330 7628);现在查看表的数据:select*from testQuery as of scn 3307628;result:1 3303552 2011-01-25 11:51:33 你好12 3303556 2011-01-25 11:51:35 你好23 3303558 2011-01-25 11:51:37 你好34 3303560 2011-01-25 11:51:39 你好45 3303562 2011-01-25 11:51:41 你好56 3303564 2011-01-25 11:51:43 你好67 3303566 2011-01-25 11:51:45 你好78 3303568 2011-01-25 11:51:47 你好89 3303570 2011-01-25 11:51:49 你好910 3303572 2011-01-25 11:51:51 你好1011 3303574 2011-01-25 11:51:53 你好1112 3303576 2011-01-25 11:51:55 你好1213 3303578 2011-01-25 11:51:57 你好1314 3303580 2011-01-25 11:51:59 你好1415 3303582 2011-01-25 11:52:01 你好1516 3303584 2011-01-25 11:52:03 你好16注:此时整个DB为镜像数据.[如果单独再开启个链接,那么看到的还是真实数据而不是镜像数据];[如果中途要退出Flashback模式请使用:exec DBMS_FLASHBACK.DISABLE;]退出Flashback 模式:exec DBMS_FLASHBACK.DISABLE;select*from testQueryresult:1 3303552 2011-01-25 11:51:33 你好12 3303556 2011-01-25 11:51:35 你好23 3303558 2011-01-25 11:51:37 你好34 3303560 2011-01-25 11:51:39 你好45 3303562 2011-01-25 11:51:41 你好56 3303564 2011-01-25 11:51:43 你好67 3303566 2011-01-25 11:51:45 你好78 3303568 2011-01-25 11:51:47 你好89 3303570 2011-01-25 11:51:49 你好910 3303572 2011-01-25 11:51:51 新年快乐11 3303574 2011-01-25 11:51:53 万事如意12 3303576 2011-01-25 11:51:55 你好1213 3303578 2011-01-25 11:51:57 你好1314 3303580 2011-01-25 11:51:59 你好1415 3303582 2011-01-25 11:52:01 你好1516 3303584 2011-01-25 11:52:03 你好16以上就是使用scn号来做闪回查询了;⑥--使用时间点来进行闪回查询select*from testQuery as of timestamp to_timestamp('2011-01-25 13:25:55','yyyy-mm-dd hh24:mi:ss');做此查询要确保没有对原有表结构进行修改,如果有的话可能引发异常;select*from testQuery;result:1 3303552 2011-01-25 11:51:33 你好12 3303556 2011-01-25 11:51:35 你好23 3303558 2011-01-25 11:51:37 你好34 3303560 2011-01-25 11:51:39 你好45 3303562 2011-01-25 11:51:41 你好56 3303564 2011-01-25 11:51:43 你好67 3303566 2011-01-25 11:51:45 你好78 3303568 2011-01-25 11:51:47 你好89 3303570 2011-01-25 11:51:49 你好910 3303572 2011-01-25 11:51:51 你好1011 3303574 2011-01-25 11:51:53 你好1112 3303576 2011-01-25 11:51:55 你好1213 3303578 2011-01-25 11:51:57 你好1314 3303580 2011-01-25 11:51:59 你好1415 3303582 2011-01-25 11:52:01 你好1516 3303584 2011-01-25 11:52:03 你好16关于scn号和这个timeStamp的转换[这个可能会出问题(undo 表空间过小,无法查询到过早的数据)]scn→→timeStamp:select SCN_TO_TIMESTAMP(SCN号)as ts from dual;timeStamp→→scnselect TIMESTAMP_TO_SCN('25-1月-11 01.05.29.046000 下午')from dual;②:关于Flashback Table:1.闪回表格,可将表格的数据闪回到某个时间点2.需要开启行移动模式 [enable row movement]3.原理:Flashback Table也是利用Undo数据来恢复对象到指定时间点4.使用范围:恢复当前表及其相关对象到某个时间点5.注意点:1).闪回时间受参数undo_retention影响2).闪回时间受undo表空间大小影响3).和flashback query有差别,恢复表到以前的时间点[真实闪回,而不是镜像]6.语法:1).flashback table table_name to timestamp .... [根据时间点闪回]2).flash table table_name to scn ... [根据scn号回退,实际操作基本上不会用到]3).flashback table table_name to timestamp ... enable triggers. [创建表,开启行移动模式,用的不多]4).flashback table testFlashTable to TIMESTAMP systimestamp - interval '5' minute; [回退到几分钟之前,用的多]例:将第一条数据更新,然后进行闪回表格,得到我们以前的数据;创建新的表格测试:create table testFlashTable(id number,mydata varchar2(60));插入测试数据:insert into testFlashTable values(1,'一帆风顺'); commit;select*from testQuery;result:1 一帆风顺------等待5分钟--------让scn号飞一会,不然可能会出错删除数据:delete from testFlashTable;commit;select*from testQuery;result:无;开启行移动模式:alter table testFlashTable enable row movement;使用flashBack:[这种方法用的比较多,不小心删除了,马上就可以闪回][闪回到5分钟以前]flashback table testFlashTable to TIMESTAMP systimestamp -interval'5'minute;或者: [闪回到时间点]flashback table t to timestamp to_timestamp('2011-01-26 11:35:40','yyyy-mm-dd hh24:mi:ss');③:关于Flashback Database:1.闪回DB,可将数据库闪回到某个时间点 [需要事先配置,让oracle处于Flashback 状态]在真实环境中使用Flashback Database的场景是较少的,更多的是使用rman技术来做恢复还原需要单独开启后台进程[Recover Writer][RVWR],会额外增大oracle的开销这里就不对其做描述了.项目例子脚本,依次执行--后的脚本:--按创建时间逆序查询select * from web_log t order by create_date desc;--删除符合条件的数据--delete from web_log where create_date>to_date('2012-11-5 01:00:00','yyyy-mm-dd hh:mi:ss')--同上--delete from web_log where url='tj_fx';--闪回查询时间点前数据--select * from web_log as of timestamp to_timestamp('2012-11-03 13:25:55','yyyy-mm-dd hh24:mi:ss');--开启行移动模式--alter table web_log enable row movement--闪回恢复操作时间段前的数据--flashback table web_log to TIMESTAMP systimestamp - interval '30' minute。
OracleFlashback详解
OracleFlashback详解 Oracle flashback 是⼀种⽅便快捷的数据库恢复技术,它不使⽤备份⽂件,通过闪回⽇志可以使数据库恢复到过去的某个状态,当⽤户发⽣逻辑错误时(误删表数据、表、表空间等)需要快速恢复数据库,可以使⽤Flashback 实现。
1 启⽤Flashback 数据库 Oracle 默认不启动flashback 数据库,使⽤flashback 技术必须先启动数据库到flashback 状态,且数据库必须处于archive 模式下,并启⽤闪回恢复区,因为闪回⽇志⽂件必须存放在闪回恢复区中。
1) 检查数据库的归档状态SQL> archive log list;Database log mode Archive ModeAutomatic archival EnabledArchive destination USE_DB_RECOVERY_FILE_DESTOldest online log sequence 4Next log sequence to archive 6Current log sequence 6SQL>如果数据库没有启动到归档模式,需要⼿动启动到模式下。
SQL> shutdown immediateSQL> startup mountSQL> alter database archivelog2) 确定闪回恢复区的⽬录SQL> show parameter DB_RECOVERY_FILE_DEST;NAME TYPE VALUE------------------------------------ ----------- ------------------------------db_recovery_file_dest string /usr/oracle/app/flash_recovery_areadb_recovery_file_dest_size big integer 3882M3) 查看并设置db_flashback_retention_target参数该参数是⼀个以分为单位的数字,默认为1440分钟,表⽰从当前开始计算最⼤可以把数据库闪回到过去的时间。
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 的特性。
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的flashback特性
[三思笔记]全面学习oracle flashback特性2008-05-28Flashback是ORACLE自9i就开始提供的一项特性,在9i中利用oracle查询多版本一致的特点,实现从回滚段中读取表一定时间内操作过的数据,可用来进行数据比对,或者修正意外提交造成的错误数据,该项特性也被称为Flashback Query。
在10g中Flashback又得到了相当大的增强,利用Recycle Bin(回收站)和Flash Recovery Area(闪回区)的特性实现快速恢复删除表(Flashback Table)或做数据库时间点恢复(Flashback Database)的功能。
本文将分三个部分分别介绍!----君三思junsansi@一、Flashback Query(闪回查询)................................................................2008-05-28(1.3)-versions between(1.4)-Transaction query(1.5)-制约因素外篇-之什么是Automatic Undo Management(自动撤销管理表空间)二、Flashback Table(闪回表)................................................................2008-06-01(2.1)-flashback from recycle bin(2.2)-flashback from undo(2.3)-注意事项外篇-之什么是Recycle Bin(回收站)三、Flashback Database(闪回数据库)................................................................2008-06-04外篇-之什么是Flash recovery area(闪回区)Flashback是ORACLE自9i就开始提供的一项特性,在9i中利用oracle查询多版本一致的特点,实现从回滚段中读取表一定时间内操作过的数据,可用来进行数据比对,或者修正意外提交造成的错误数据,该项特性也被称为Flashback Query。
在Oracle中使用Flashback
在Oracl e中使用Flashback在Oracle 9i/10g中使用Flashback一、Flashback的概念在Oracle 9i数据库中,提出了数据闪回〔Flashback〕的概念。
使用Flashback,可以在不对数据库进行不完全恢复的情况下,对某一个指定的表进行恢复。
所谓Flashback就是使数据库中的实体显示或回到过去的某一时间点,这样可以实现对历史数据的恢复。
二、在Oracle 9i中使用Flashback? ? ?在Oracle 9i中使用包DBMS_FLASHBACK来提供闪回功能。
如果需要用到闪回查询,必须在init.ora或者是spfile.ora中设置以下参数undo_management = auto 〔默认〕此外,参数undo_retention = n〔秒〕,它决定了能往前闪回的最大时间〔Undo 最多的保存时间〕,越大的值,就会需要更多的Undo空间的支持。
SQL> show parameter autoSQL> alter system set undo_retention=1200; 〔Undo信息将保持1200秒=20分钟〕注意:Oracle 9i是每五分钟记录一次SCN的,并将SCN和对应时间的映射做个纪录。
如果原来插入的记录到做闪回的时间在5分钟之内,用基于时间的flashback可能并查询不到记录,因为如果是基于时间点的查询,也是转化为最近的一次SCN,然后从这个SCN开始进行恢复,因此,如果需要精确的查询,我们可以采用基于SCN的flashback,它将能精确的闪回到需要恢复的时间。
Oracle 9i的Flashback有如下限制。
? 采用时间点的恢复,不能精确到最近5分钟,如果需要更精确的查询,需要采用SCN。
? 不能flashback 5天以前的数据,这个并不是undo_retention所能决定的。
? 闪回查询无法恢复到表结构改变之前,因为闪回查询使用的当前的数据字典。
oracle 闪回技术
GET_SYSTEM_CHANGE_NUMBER -----------------------1051730 SQL> delete from test1.tb1 where empno=1000; SQL> commit; SQL> select dbms_flashback.get_system_change_number from dual; GET_SYSTEM_CHANGE_NUMBER -----------------------1051754 SQL> select empno,ename,job,versions_xid xid,versions_startscn v_stcn,versions_endscn v_edcn,versions_operation v_ops from test1.tb1 versions between scn 1051730 and 1051754;
二、Flashback Transaction Query
闪回事务查询就是对过去某段时间内所完成事务的查询和 撤销,通过闪回事物分析,可以识别在一个特定的时间段内所 发生的所有变化,也可以对数据库表进行事物级恢复。前面提 到可以审计一个事务到底做了什么,现在可以获得事务的历史 操作进行撤销。Flashback Transaction Query 利用UNDO表空间 的undo数据来实现。利用这个功能可以查看某个事务执行的所 有变化。
Flashback分为以下成员: Flashback Database,Flashback Drop,Flashback Query(分Flashback Query,Flashback Version Query,Flashback Transaction Query 三种) Flashback Table和Flashback Data Archive。 理解闪回级别: 从闪回的方式可以分为基于数据库级别闪回、表级别闪 回、事务级别闪回
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闪回介绍
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闪回技术
Oracle闪回技术Oracle闪回技术闪回(Flashback)错误操作:1. 错误的delete一条记录,并且commit2. 错误地删除了一个表: drop table3. 查询某个表的历史记录(所有已经提交了的历史记录)4. 错误地执行了一个事务对应闪回的四种类型:1. 闪回表---------针对delete方式删除数据可进行回滚2. 闪回删除---------针对drop方式删除整张表进行回滚3. 闪回版本查询4. 闪回事务查询5. 闪回数据库注意:1、delete删除表数据可以闪回,因为他是只删除数据,表没变;但是truncate删除表所有数据无法闪回,因为truncate原理是先删除原先整个表,在重新建立一个结构相同的表,该表是新创建的,无法回滚了。
1、对用户进行闪回设置与授权SQL> --闪回的时间参数cmd下> sqlplus system/admin已连接。
SQL> show userUSER 为"SYS"SQL> show parameters undo;l闪回表,实际上是将表中的数据快速恢复到过去的一个是焦点或者系统改变号SCN上。
实现表的闪回,需要使用到与撤销表空间相关的undo信息,通过show parameter undo命令可以了解这些信息。
ll用户对表数据的修改操作,都记录在撤销表空间中,这为表的闪回提供了数据恢复的基础。
例如,某个修改操作在提交后被记录在撤销表空间中,保留时间为900秒,用户可以在这900秒的时间内对表进行闪回操作,从而将表中的数据恢复到修改之前的状态。
NAME TYPE V ALUEundo_management string AUTOundo_retention integer 900undo_tablespace string UNDOTBS1-- 将900秒改为20分钟SQL> alter system set undo_retention=1200 scope=both;系统已更改。
Oracle Flashback
15 1648271 2009-08-12 11:11:34
16 1648274 2009-08-12 11:11:37
17 1648276 2009-08-12 11:11:40
6 1648253 2009-08-12 11:11:07
7 1648255 2009-08-12 11:11:10
8 1648257 2009-08-12 11:11:13
9 1648259 2009-08-12 11:11:16
Table created.
JANE !>begin
2 for i in 1..20
3 loop
4 insert into t values(i,dbms_flashback.get_system_change_number(),to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')); --插入scn和sysdate为了后面查询方便明了
JANE !>select * from t; --表的数据已经改变
ID SCN TIME
---------- ---------- ----------------------------------------
1 1648243 2009-08-12 11:10:52
ห้องสมุดไป่ตู้
--从上面例子也可以看出scn和timestamp并不是完全对应的.在实际案例中我们往往忽略这些微小差别.
2.Flashback Table
1).原理:Flashback Table也是利用Undo数据来恢复对象到指定时间点
Oracle Flashback 技术 总结
1. Flashback1. 闪回恢复区Flashback Recovery Area1. 设置闪回恢复区2. 取消闪回恢复区3. 闪回恢复区的内容4. 闪回恢复区的一些限制5. 闪回恢复区的空间管理6. Flash Recovery Area空间不足导致DB不能打开或hang住处理方法7. Flash Recovery Area 的备份2. Flashback Database1. Flashback Database 说明2. Flashback Database 架构3. 启用Flashback Database 步骤1. 配置Flash Recovery Area2. 启动flashback database4. Flashback Database操作示例1. 检查是否启动了flash recovery area2. 检查是否启用了归档3. 检查是否启用了flashback database4. 查询当前的scn5. 查询当前的时间6. 删除表A7. 重启DB 到mount8. 执行恢复分timestamp 或者SCN两种9. 打开数据库5. 和Flashback Database 相关的3个视图1. Vdatabase2. Vflashback_database_log3. Vflashback_database_stat6. Flashback Drop1. Tablespace Recycle Bin2. Flashback Drop 实例操作7. Flashback Query1. Flashback Query1. 多版本读一致性2. As of timestamp 的示例3. As of scn 示例4. SCN 与timestamp 关系5. Flashback Query 函数存储过程包触发器等对象2. Flashback version Query3. Flashback Transaction Query8. Flashback Table9. Oracle Flashback Data Archive1. Flashback Data Archive 说明2. Flashback Data Archive 的相关操作1. Creating a Flashback Data Archive2. Altering a Flashback Data Archive3. Dropping a Flashback Data Archive4. Specifying the Default Flashback Data Archive5. Enabling and Disabling Flashback Data Archive6. DDL Statements on Tables Enabled for Flashback DataArchive3. 一个用Flashback Data Archive 恢复数据的测试写在前面:2009年的时候结合网上的资料整理了下Flashback的用法。
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小时前的值都会被覆盖,以 分为单位
Flashback用法汇总
Oracle的Flashback用法汇总by jdstkxx on 2012 年 4 月 22 日/*11g的flashbackup 分好几种,分别用途不一样。
A.flashback database 闪回数据库,简单理解就是把数据库闪回到某个以前的时间点,能恢复到的最早的SCN,取决与Flashback Log中记录的最早SCNB.flashback drop 回收数据库表,用于表误drop后恢复。
类似Windows的回收站。
C.flashback query 闪回表记录,用于数据表记录的恢复D.falshabck Table 闪回数据库表,后两个是重点,下面说明。
*/– A.flashback database相关/*1.默认情况数据库的flashback database是关闭,可以在mount exclusive状态下打开。
在设置了闪回恢复区后,可以启动闪回数据库功能。
*/–1.检查是否启动了flash recovery areashow parameter db_recovery_file–2.检查是否启用了归档archive log list;–3.flashback database 默认是关闭的,查看方法select flashback_on from v$database;–4.查询当前的scnSELECT CURRENT_SCN FROM V$DATABASE;–5.查询当前的时间select to_char(sysdate,’yy-mm-dd hh24:mi:ss’) time from dual;–6.查看SCN 和 timestamp 之间的对应关系:select scn,to_char(time_dp,’yyyy-mm-dd hh24:mi:ss’)from sys.smon_scn_time;–7.恢复到时间点,或者恢复到SCNflashback database to timestamp to_timestamp(’09-10-14 14:37:05′,’yy-mm-dd hh24:mi:ss’);flashback database to scn 947921;– B. flashback table 恢复误drop表drop table sphsy.login_table;select * from flash_table;–purge table sphsy.login_table;清空回收站flashback table sphsy.login_table to before drop;select * from sphsy.login_table;– C. flashback query 实现行级恢复/*flashback查询用于获取先前时间点的表行级数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7. Flashback Database 实际是对数据库的一个不完全恢复操作,因为需要关闭数据库重启到mount状态。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
TIME
-----------------
09-10-14 14:37:05
6. 删除表A
SQL> select * from A;
ID NAME
---------- ----------
1 tianle
2 dave
SQL> drop table A;
表已删除。
SQL> commit;
3. 如果控制文件是从备份中恢复出来的,或者是重建的控制文件,也不能使用Flashback Database。
4. 使用Flashback Database锁能恢复到的最早的SCN, 取决与Flashback Log中记录的最早SCN。
Flashback Database 架构
Flashback Database 整个架构包括一个进程Recover Writer(RVWR)后台进程,Flashback Database Log日志 和Flash Recovery Area。一旦数据库启用了Flashback Database, 则RVWR进程会启动,该进程会向Flash Recovery Area中写入Flashback Database Log, 这些日志包括的是数据块的 " 前镜像(before image)", 这也是Flashback Database 技术不完全恢复块的原因。
db_recovery_file_dest_size big integer 1G
2. 检查是否启用了归档-
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
Flashback 技术是以Undo segment中的内容为基础的, 因此受限于UNDO_RETENTON参数。要使用flashback 的特性,必须启用自动撤销管理表空间。
在Oracle 10g中, Flash back家族分为以下成员: Flashback Database, Flashback Drop,Flashback Query(分Flashback Query,Flashback Version Query, Flashback Transaction Query 三种) 和Flashback Table。
一. Flashback Database
Flashback Database 功能非常类似与RMAN的不完全恢复, 它可以把整个数据库回退到过去的某个时点的状态, 这个功能依赖于Flashback log 日志。 比RMAN更快速和高效。 因此Flashback Database 可以看作是不完全恢复的替代技术。 但它也有某些限制:
YES
4. 查询当前的scn-
SQL> SELECT CURRENT_SCN FROM V$DATABASE;
CURRENT_SCN
-----------
947921
5. 查询当前的时间
SQL> select to_char(sysdate,'yy-mm-dd hh24:mi:ss') time from dual;
数据库已更改。
SQL> select name, current_scn, flashback_on from v$database;
NAME CURRENT_SCN FLASHBACK_ON
--------- ----------- ------------------
DBA 0 YES
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest tring D:\oracle/flash_recovery_area
1. 配置Flash Recovery Area
要想使用Flashback Database, 必须使用Flash Recovery Area,因为Flashback Database Log只能保存在这里。 要配置的2个参数如下,一个是大小,一个是位置。如果数据库是RAC,flash recovery area 必须位于共享存储中。数据库必须处于archivelog 模式.
2. 启用数据态
SQL> startup mount;
2). 检查Flashback 功能, 缺省时功能是关闭的。
SQL> select name, current_scn, flashback_on from v$database;
最早的联机日志序列 9
下一个存档日志序列 11
当前日志序列 11
3. 检查是否启用了flashback database
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
这里演示,就以resetlogs方式打开:
SQL> alter database open resetlogs;
4). 设置初始化参数:DB_FLASHBACK_RETENTION_TARGET:
SQL>alter system set db_flashback_retention_target=1440 scope=both;
该参数用来控制flashback log 数据保留的时间,或者说,你希望flashback database 能够恢复的最早的时间点。默认值是1440,单位是minute,即24 小时,需要注意的是该参数虽然未直接指定flash recovery area大小,但却受其制约,举个例子假如数据库每天有10%左右的数据变动的话,如果该初始化参数值设置为1440,则flash recovery area 的大小至少要是当前数据库实际容量的10%,如果该初始化参数设置为2880,则flash recovery area 的大小就至少是数据库所占容量的20%。
2). 先执行alter database open read only 命令以read-only 模式打开数据库,然后立刻通过逻辑导出的方式将误操作涉及表的数据导出,再执行recover database 命令以重新应用数据库产生的redo,将数据库修复到flashback database 操作前的状态,然后再通过逻辑导入的方式,将之前误操作的表重新导入,这样的话对现有数据的影响最小,不会有数据丢失。
禁用Flash Recovery Area:
SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='' ;
对于Flash Recovery Area,Oracle 是这样建议的,flash recovery area 设置的越大,flashback database 的恢复能力就越强,因此建议flash recovery area 能够放的下所有的数据文件,增量备份,以及所有尚未备份的归档文件,当然还有它自己产生的flashback logs。
hh24:mi:ss');
闪回完成。
或者:
SQL> Flashback database to scn 947921;
闪回完成。
9. 打开数据库:
在执行完flashback database 命令之后,oracle 提供了两种方式让你修复数据库:
1). 直接alter database open resetlogs 打开数据库,当然,指定scn 或者timestamp 时间点之后产生的数据统统丢失。
Redo Buffers 7139328 bytes
数据库装载完毕。
8. 执行恢复:分timestamp 或者SCN两种
SQL> Flashback database to timestamp to_timestamp('09-10-14 14:37:05','yy-mm-dd
NAME CURRENT_SCN FLASHBACK_ON
-------- ----------- ------------------
DBA 945715 NO
3). 启动Flashback功能
SQL> alter database flashback on;
1. Flashback Database 不能解决Media Failure, 这种错误RMAN恢复仍是唯一选择
2. 如果删除了数据文件或者利用Shrink技术缩小数据文件大小,这时不能用Flashback Database技术回退到改变之前的状态,这时候就必须先利用RMAN把删除之前或者缩小之前的文件备份restore 出来, 然后利用Flashback Database 执行剩下的Flashback Datbase。
对于因Flash Recovery Area导致的数据库hang的处理,请参考:
/tianlesoftware/archive/2009/10/14/4668991.aspx
或者
/251097186/blog/1244650673