撤销和闪回技术

来源:互联网 发布:阿里云防cc攻击 编辑:程序博客网 时间:2024/05/22 12:58
闪回查询和闪回表的功能完全基于oracle database中长期存在的技术,撤销段,撤销段用于撤销没有提交的事物。
当提交事物时,撤销段中保存行的前映像的盘区被释放,用于将来的重写。在oracle9i和以后的版本中,oracle开始使用闪回查询技术,我们现在可以控制撤销盘区在被重写之前所保留的时间。完成这项工作后,
我们就可以很好的使用撤销段---从而帮助我们撤销已提交的错误事物。
根据撤销盘区在被重写之前所保留在撤销表空间中的时间来决定是否可查询对象或将对象改回过去的某个时间点。
在利用撤销表空间中的每个盘区后才会进行重写操作。
至于在回退到多久以前的情况下可以使用“闪回查询/闪回表”,则取决于oracle如何从提交事物的时间点切换到重写该事物的撤销时间点。从提交事物到重写撤销盘区的周期就是闪回窗口。
有许多因素决定闪回窗口,但最重要的因素时事物负载,可以使用视图V$UNDOSTAT查看撤销使用情况的统计。该视图中的每一行代表10分钟内利用的撤销块数量。
1.undo_management=auto
2.undo_tablespace
3.undo_retention






1.闪回查询【允许查询过去某个时间的数据库,可以借助一条select语句或通过将会话临时退回到过去以使其所有查询都针对先前版本的数据库】『受撤销保留时间限制』

   
   select * from emp as of timestamp to_timestamp('2009-06-27 13:00:00','YYYY-MM-DD HH:MI:SS')
   select * from emp as of scn 173194;
2.闪回表【如果已确定针对某个表提交了不正确的操作,可以提示oracle反转从特定的时间点以来对该表所做的所有更改,而保持其他所有表当前的状态】
   启动行移动 alter table emp enable row movement;
   flashback table emp to timestamp to_timestamp('2009-06-27 13:00:00','YYYY-MM-DD HH:MI:SS')
   flashback table emp to scn 173194;
3.闪回事物【】
  使用闪回事物可以看见某一指定事物产生的所有更改或者某个特定时间框架内所有的事物。
  闪回事物是使用重做以及利用日志挖掘(logminer)功能挖掘出事物的更改向量,然后确定回滚这些更改的最佳方式。

4.闪回删除<回收站>『受表空间的可用空间限制』
  闪回删除允许您将之前删除的表恢复到刚好删除它之前的状态,同时还会恢复所有索引以及任何触发器和权限。唯一的主键和非空约束也会被恢复---但不包括外键约束。
  闪回删除是drop命令特有的,而不能闪回truncate命令。
   flashback table emp to before drop;
5.闪回数据库『受闪回日志的大小限制』
  闪回数据库不能撤销物理损坏,而只能恢复用户错误造成的逻辑错误。
  闪回数据库要求归档日志模式并使用alter database open resetlogs 来创建数据库的一个新化身。
   (1)开启闪回数据库
   startup mount
   数据库处于归档模式
   设置闪回保存目标为所需的值(闪回日志的生命周期与闪回数据库选项能恢复的时间范围直接相关。
   默认情况下,闪回日志保留足够长的时间,从而可以从当前时间闪回24小时,如果时间过长或过短,则可以使用初始化参数进行更改)
   alter system set db_flashback_retention_target=720;
   闪回很大程度增加了fra的使用率。
   alter database flashback on;
   alter tablespace sales_idx flashback off;(对于不需要的表空间,关闭闪回记录功能)
   alter database open;
   (2)执行闪回数据库
   查询当前scn ;select current_scn from v$database;
   引入错误
   数据库必须加载且没有打开进行闪回操作
   shutdown immediate
   startup mount
 
   flashback database to timestamp to_timestamp('','yy-mm-dd hh24:mi:ss');时间戳
   ------sql*plus的闪回语法可以接受时间戳或系统更改号(SCN)参数。与rman不同,它不接受日期或日志切换序列号。
 

   flashback database to scn =897786;
   flashback database to sequence=2112 thread=1;日志切换序列号
   flashback database to time=to_date('','yy-mm-dd hh24:mi:ss');
   ----------在rman中,有三种选择某个时间点,scn,日志切换序列号

  alter database open read only;
   确定已经闪回到适当的scn
   shutdown immediate;
   startup mount
   alter database open resetlogs;(使用resetlogs打开数据库)
   (3)闪回数据库的调整

   1)select retention_target,flashback_size,estimated_flashback_size,oldest_flashback_scn,oldest_flashback_time from v$flashback_database_log;
   保留目标时间的设置值(单位时分钟)默认1天;闪回日志文件占用的时间空间,提供了总闪回大小的估计,也提供将数据库闪回到的实际最早时间

   
   2)select * from V$flashback_database_stat;

   V$flashback_database_stat 可以查看闪回记录活动,提供了一段时间内生成的闪回数据的相关信息,除了显示闪回记录的数量,该视图也提交生成的重做和相同时间周期内生生成的实际数据库数据。

 
    如果启用了闪回 数据库,那么会记录所有表空间的闪回数据,可以关闭某些表空间的闪回属性
    alter tablespace <tablespace_name> flashback off;
     alter tablespace <tablespace_name> flashback on;
     如果一个或多个表空间不生成闪回数据,那么在执行闪回操作之前必须使构成表空间的文件脱机,然后闪回可以政策进行。要记住recover将忽略脱机数据文件--这与flashback时相同的。
      将一些表空间排除在闪回日志记录之外将有助于提高联机性能,但付出的代价时必须执行属于恢复过错的部分还原。这样做通常仍会比不完整恢复所需的完全还原更快速一些。
6.闪回数据归档
  使用flashback data archive,它能够查看过去任何时间的表的状态。
   当一个表启用flashback data arvchive会创建一个表(和其他几个对象),可用于存储的所有先前的版本;当针对表提交了dml操作后,一个称为flashback data archive进程(FBDA)的
后台进程将捕捉必需的数据并将它保存在归档上。在那里可以使用常规闪回查询采用的相同语法来查询--但是闪回可以回溯到多年以前。
   当创建flashback data archive时指定时间限制,FBDA会确保保存该时间之前的所有数据,然后会删除,FDBA负责在归档中创建对象,根据需要使用行来填充,并清除超过有效期的回数据。

   使用闪回数据归档可以把所以更改永久归档到一个表中,以便及时回滚到任一时间点和查看过去的数据。
   闪回数据归档要求构建一个特定类型的表空间,以便保存要求在特定表中及时回滚的版本信息
   如果将表置于闪回数据归档模式,不能进行的操作:执行带有upgrade子句的alter table命令;执行删除表的操作
   (1)create tablespace fbs datafile '/home/oracle/app/oracle/oradata/orcl11g/fbs01.dbf' size 1024m;
   (2)create flashback archvie default fda01 tablespace fbs qutoa 500m retention 1 year;
   (3)alter table emp flashback archive;



----------------------闪回技术与DATAGUARD
闪回数据库使用自己的闪回日志和一些重做数据,使整个数据库返回到先前的时间点和SCN。这个过程并不会生成任何重做数据,在住数据库上使用时,它也需要执行open resetlogs,以便再次以读写模式打开数据库。
以下情况使用闪回数据库
1.要在任意备用数据库上恢复数据
  必须启用闪回数据库,并基于需求将保留期设置为足以恢复数据的期限,闪回恢复区需要进行大小调整以处理保留期生成的闪回日志。
2.要在物理备用上以快照模式(用于测试的读写模式)打开物理备用数据库
  在这种情况下,闪回数据库不见得明确启用,因为以读写模式打开物理备用数据库前,DATAGUARD使用保证还原点(GRP)。保留期也不需要,因为会根据需要的时间长度维护闪回日志。
  这也意味着需要分配相应大小的闪回恢复区,因为并不存在滚动闪回窗口的概念,如果闪回恢复区耗尽了分配空间,不仅快照备用异常终止,而且从主数据库传入的重做数据也将停止。
3.要在主数据库和所有备用数据库上及时闪回主数据库
  在这种情况下,主数据库上的闪回发生之前,dataguard设置中的所有数据库必须明确启用闪回数据库。备用数据库上的保留期也必须大于或等于主数据库上的保留期。
  如果在主数据库上执行了闪回数据库操作,必须首先停止所有备用数据库上的应用进程,在闪回后,一旦open resetlogs命令已在主数据库上执行,就必须将每个备用数据库闪回到主闪回之前的时间点。当重做
  数据再次开始传输(序列号重置为1),备用数据库将识别更改并恢复备用数据库直至闪回点,然后开始处理新的重做流。
4.要在主数据库上,在故障转移后恢复数据库
  这种情况下,故障转移到备用数据库之前,必须启用闪回数据库。








0 0
原创粉丝点击