ITPub博客

首页 > 数据库 > Oracle > 闪回技术

闪回技术

原创 Oracle 作者:huming0927 时间:2011-07-18 23:48:54 0 删除 编辑

闪回(Flashback)技术

概述:

闪回包括四部分内容:闪回查询,闪回表,闪回删除和闪回数据库

其中闪回查询和闪回表是基于撤销段(以前称为回滚段)。主要是设置两个重要参数:UNDO_MANAGEMENT=AUTO和UNDO_RETENTION设置合理的保留时间;

而闪回删除时基于Oracle中的回收站工作原理,即删除对象其实只是修改其名称而非真正立刻彻底删除,因此通过查询回收站可知道被删除对象新的删除后名字然后将其恢复;

闪回数据库的原理是Oracle中有一个叫做闪回日志的专门针对闪回数据库的日志,它是以递增的方式记录指定时间间隔内已经更改的所有数据块。而这些闪回“检查点”就是提供给数据库可以回退到的时间点。

闪回查询

使用闪回查询的指导原则是要求首先启用自动撤销,即UNDO_MANAGEMENT=AUTO;

其次,设置UNDO_TABLESPACE参数以指出哪个表空间将处理撤销任务;

最后,将UNDO_RETENTION设置合理的保留时间。

闪回查询记录:

SQL>select … from tabname as of timestamp to_timestamp(‘2011-05-24 17:23:00’, ‘YYYY-MM-DD HH:MI:SS’) where …;

SQL>select … from tabname as of scn 1573 where …;

闪回版本查询:

闪回查询只能查看到特定时间点的表中的数据,但不能完整地查看到在两个时间点之间表中数据的变化情况。而闪回版本查询就提供了这样的功能,它提供来一个审计各个行的数据改变的功能,它能找到所有已经提交了的操作及其操作时间、结果。所以闪回版本查询在某种程度上可以替代精细审计功能和LogMiner工具的功能。

只要是在撤销段中现有的数据都可以被用于闪回版本查询。因此,最大可用的版本依赖于undo_retention初始化参数的设置。由于该参数不是强制性的,所以如果想保证在该参数所设置的时间内不会覆盖撤销段中已经提交的数据,就需要给撤销表空间设置RETENTION GUARANTEE选项。

备注:关于undo_retention和retention guarantee

undo_retention参数的作用是用来控制当transaction被commit后,undo信息的保留时间。这些undo信息可以用来构造consistent read以及用于一系列的闪回恢复,而且足够的undo信息还可以减少经典的ORA-01555 Snapshot too old(快照太旧,长时间查询过程中还未过期的撤销数据已被覆盖造成)。这个参数的默认值为900(秒),这是一个noguarantee的限制,也就是说我将undo_retention=900,原本以为在一个事务提交后,之前的撤销数据还可以保存900秒才可以被别的事务覆盖,殊不知当有其他的事务处理过程中需要undo空间的时候,恰恰这个时候undo表空间没有足够的空间了,而且我们没有开启自动扩展,且由于我们的retention是noguarantee的,所以事务就会忽略这种retention的时间限制而直接覆盖我们的undo信息,这种结果下其实在很多情况下是不希望看到的。Oracle 10g后新增了一个参数guarantee,可以强制oracle来保护undo信息,也就是说即使新的事务需要undo空间的时候,即使undo的空间不足,这个session也不会强制覆盖由undo_retention所保护的undo信息,而且这个新增事务会因为undo空间的不足而报一个错而推出。

Select to_char(versions_starttime, ‘yyyy-mm-dd hh24:mi:ss) starttime,

to_char(versions_endtime, ‘yyyy-mm-dd hh24:mi:ss) endtime,

versions_xid, versions_operation, num, opt_time

from test

versions between timestamp minvalue and maxvalue;

或者

Select to_char(versions_starttime, ‘yyyy-mm-dd hh24:mi:ss) starttime,

to_char(versions_endtime, ‘yyyy-mm-dd hh24:mi:ss) endtime,

versions_xid, versions_operation, num, opt_time

from test

versions between timestamp

to_date(‘2011-05-25 10:50:00’, ‘yyyy-mm-dd hh24:mi:ss’)

and to_date(‘2011-05-25 10:55:00’, ‘yyyy-mm-dd hh24:mi:ss’);

闪回事务查询:

闪回事务查询其实是闪回版本查询的扩充或继续。它提供了一种查看事务级数据库变化的方法。通常需要首先借助闪回版本查询查出其事务版本号,然后再进行闪回事务的查询。

select start_scn, to_char(start_timestamp, ‘yyyy-mm-dd hh24:mi:ss’) starttime, undo_sql

from flashback_transacton_query where xid=’050000000927’;

闪回表

闪回表的功能基本等同于TSPITR,而且过程更简单;闪回表的使用与闪回查询的机制相同——使用存储在撤销段中的信息。

使用闪回表除了要进行闪回查询的三个配置之外,还需要启用表的行移动(row movement):

alter table tabname enable row movement;(预见可能的闪回表候选物并且尽可能启用行移动,这一点至关重要。不可以先启动行移动,然后立刻将表闪回到启用行移动之前的时间点,这种操作将导致如下错误:ORA-08189:cannot flashback the table because row movement is not enable.换句话说,不可以等到需要闪回表时,才启用行移动!)

闪回表不能恢复已经被删除的表和truncate的表;

闪回表:

SQL>flashback table tabname to timestamp to_timestamp(‘2011-05-24 17:23:00’, ‘YYYY-MM-DD HH:MI:SS’);

SQL>flashback table tabname to timestamp to scn 1573;

闪回删除

Oracle中被删除的对象实际上是被重命名,且还在其原来的表空间中。

对象在回收站中能存放的时间是不能被精确调控的(Oracle中有这样的规则:如果表空间中的空间不足,则不能将已删除的对象强制保留在回收站中。即使启用自动扩展,也要在表空间扩展之前清除已删除的对象),只有两个办法可以在一定程度上增加被删除对象在回收站中的存放时间:

1、 建立过大的表空间以适应删除操作;

2、 手工管理回收站并清除不需要保存的对象,从而为需要保存的对象留出空间。

闪回删除:

flashback table tabname to before drop;

闪回数据库

闪回数据库的工作方式如下:数据库以递增的方式记录指定时间间隔内已经更改的所有数据块。这些闪回“检查点”然后提供数据库可以“回绕”到的时间点。回绕到检查点后,可以使用归档的日志前滚到通过flashback database命令指定的确切时间或SCN。相比较而言,在闪回检查点后应用的归档日志比在最近备份上应用的归档日志要少,因此闪回的恢复阶段非常快速。

闪回数据库实现了新的日志类型,称为闪回日志。闪回日志由数据库定期生成,并且在闪回恢复区(FRA)中累积。我们必须具有用于闪回数据库的FRA;不可以在任何其他位置创建闪回日志。闪回日志包含从生成最近的闪回日志以来每个已更改数据块的映像副本。当执行flashback database命令将数据库回绕到在flashback命令中指定的时间点时,这些数据块将恢复到该数据库中。

使用闪回数据库需要进行的配置:

打开闪回记录功能:

alter database flashback on;

alter tablespace tbsname flashback on; 打开某表空间的闪回记录功能

alter tablespace tbsname flashback off; 关闭某表空间的闪回记录功能

设置闪回日志保存目标的时间窗口:

alter system set db_flashback_retention_target=720 scope=both sid=’*’; 单位是分钟

设置FRA的相关参数:

alter system set db_recovery_file_dest_size=2335825920 scope=both sid=’*’;

alter system set db_recovery_file_dest =’/oracle/fra’ scope=both sid=’*’;

闪回的执行:

Flashback database to scn 123456;[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/14338195/viewspace-1052666/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    24
  • 访问量
    28962