扩大
缩小

oracle flashback

一、Flashback闪回技术概述:
当Oracle数据库发生逻辑错误时,必须使用flashback技术,实现快速和方便的恢复数据。对于人为错误,要确定受到错误事务影响的对象或者记录是非常困难的。使用flashback技术,你能够诊断出错误是如何被引入到数据库的,并且你能够修复这些错误对数据库造成的破坏。你能够查看对特定行更改的事务,也能够查看到指定行在某段时间的版本,也能够查看在过去某个时间点的数据。
Flashback技术适用于不同的对象级别如database、table和Tx。所涉及到的flashback技术包括有针对数据库级别的flashback database,针对表级别的flashback drop、flashback table、flashback query、flashback version,以及针对Tx级别的flashback transaction。
Flashback database使用flashback日志执行闪回,flashback drop使用recycle bin(回收站),而其他的闪回技术则使用UNDO。
需要注意的一点是,并不是所有的闪回特性都会更改数据库。其中有一些只是简单的查询数据的版本,这些闪回技术可以作为诊断问题和帮助恢复的工具。这些flashback查询(包括flashback query, flashback version, flashback transaction)的结果可以帮助你决定使用那种flashback操作(database-modifying类型,如flashback database, flashback drop, flashback table)用于修复问题。
二、逻辑层闪回
大部份的闪回特性是在逻辑层的,能够让你查看和控制数据库对象,逻辑层闪回特性不需要依赖于RMAN。除了flashback drop之外,逻辑闪回特性依赖于UNDO数据。逻辑闪回主要包括:
1.Flashback Query:
通过指定一个目标时间,并执行数据库的查询,可以查看在目标时间点时所存在的数据。通过这个方法可以将不希望被更改的数据(如对某张表执行了错误的update)恢复到错误发生之前的目标时间。
2.Flashback Version Query
用于查看一个或多个表中在特定的时间段内所有记录的所有版本。也可以检索某个记录的不同版本之间的元数据,包括开始时间、结束时间、操作和事务ID。也可以使用该特性恢复丢失的数据,以及对表的更改进行审计。
3.Flashback Transaction Query
用于查看某个事务的对数据库的更改,或者在某个指定的时间周期内所有事务对数据库的更改。
4.Flashback Transaction
用于反转一个事务。数据库会确定事务之间的依赖性,并实际上创建一个修正的事务,用于反转不希望的更改。数据库退回到一个好像该事务或者所依赖的事务从来没有发生过的一个状态。
5.Flashback Table
通告flashback table可以在线的恢复一个或者多个表到指定的过去的某个时间点。在很多情况下,flashback table消除了复杂的point-in-time recovery操作。Flashback table恢复表的同时,能够自动维护相关的属性如索引、触发器和约束。.
6.Flashback Drop
用于反转drop table的操作,即将被drop的表恢复回来。
三、物理层闪回
Oracle Flashback Database属于物理层闪回,提供了一种更有效率的可以实现时间点恢复的数据保护。如果当前的数据文件存在不希望的更改,就可以使用flashback database把数据文件回退到过去的一个时间。其结果差不多和DBPITR(database point-in-time recovery)一样,但是flashback database更快,因为它不需要从备份中恢复数据文件,并且比media recovery所需要的redo更少。
Flashback Database使用flashback logs存取数据块的以前的版本,同时会存储一些信息在归档日志中。Flashback Database需要配置fast recovery area用于存储flashback logs,默认情况下Flashback logging是不激活的。
Oracle还支持通过恢复点(restore point)将数据库快速的恢复到过去的某个时间点。恢复点相当于是SCN的别名。如果你预感到需要将数据库部分或者全部的恢复到某个时间点,则可以在任何时间创建一个恢复点。受保护的恢复点(guaranteed restore point)确保你能够使用flashback database把数据库恢复到恢复点的时间。

补充:关于fast recovery area和flash recovery area

fast recovery area是一个可选的磁盘存储目录,用于存储恢复相关的文件,如控制文件和联机日志文件的拷贝,归档日志文件,闪回日志,以及RMAN的备份。Oracle数据库和RMAN自动管理这些在fast recovery area中的文件。可以为fast recovery area指定磁盘配额(disk quota),以限制fast recovery area的最大存储空间。在Oracle11g之前称为flash recovery area。

四、Flashback Drop and the Recycle Bin

在Oracle数据库的早期版本中,如果错误的drop了一张表,那么就只能通过把整个数据库恢复到以前的时间点的方式来恢复被错误drop的表。这个过程将会导致其他正常的事务的丢失。

Oracle 10g开始引入了Flashback Drop特性,用于撤销DROP TABLE的结果,而不需要使用point-in-time的恢复。

RECYCLEBIN初始化参数设置为ON或者OFF,决定了Flashback Drop功能打开或者关闭。如果设置为OFF,则被drop的表不会被存在于回收站(recycle bin)中;如果设置为ON,则被drop的表会存放在回收站中,并用于恢复。默认情况下RECYCLEBIN初始化参数设置为ON。

在没有启用回收站的情况下,当你drop一张表后,该表和相关对象的存储空间将立即被回收,也就是说这些被回收的存储空间可被其他对象所使用。

而如果启用回收站,当你drop一张表后,即使该表和相关对象的存储空间会显示在DBA_FREE_SPACE中,但这些存储空间是不会被立即回收的。被drop的对象会临时存放在回收站中,并仍然属于他们原来的拥有者(owner)。回收站中对象所使用的存储空间是永远不会自动回收的,除非整体的存储空间存在不足。这能够让你有足够多的时间去恢复回收站中的对象。

实际上,对一张表执行drop操作后,该表和相关的对象、约束将会自动的改成系统自动生成的名称,并移动到回收站中。目的是为了避免发生对象名称冲突的问题。

回收站本身是一个数据字典表,该表包含被drop对象的原始名称和系统自动生成的名称之间的关系。可以通告DBA_RECYCLEBIN视图查看回收站的内容。

补充:回收站是一个逻辑的概念,其实际的物理存储空间是表和相关对象所在的表空间。可以把它理解为windows操作系统的回收站。

五、从回收站中恢复表

执行flashback table <table_name> to before drop [rename to <new_name>]命令可用于从回收站中恢复表和所有相关的对象。在执行flashback table时可以指定表的原始名称或者系统自动产生的名称。

如果在回收站中对于同一个原始表具有多条记录:

->使用惟一的、系统产生的名称恢复到指定的版本

->使用被drop的表的原始名称,则被恢复的表是最后进入回收站的版本,可重复执行flashback table直到恢复出你所需要的版本。

如果在drop某张表后,又创建了一张新的同名的表,则在执行flashback table使需要指定rename to指定新的名称,否则将报错。

从回收站中恢复被drop的表后,同时被恢复的index、trigger和constraints将保留回收站中的名称。因此,在执行flashback之前先查询一下回收站和DBA_CONSTRAINTS视图中的内容。并在恢复后重新命名。

六、回收站:自动空间回收和手动空间回收

回收站中对象根据如下策略进行回收:

->执行PURGE手动清除

->根据空间需求自动清理,当某个表空间上有新的空间需求(如需要创建一张新的表)时,将按照如下顺序使用该表空间上的空闲空间:

1.首先,使用非回收站对象所占用的空闲空间(请理解一点:回收站中的对象虽然实际上占用了表空间的存储空间,但是这部分存储空间是属于空闲空间,可通过DBA_FREE_SPACE视图查看到)

2.其次,使用回收站对象占用的空闲空间,同时这些回收站中的对象将根据先进先出(FIFO)的规则被自动的从回收站中purged

3.如果表空间是自动扩展的,则会自动分配新的空闲空间。

手动清除回收站中的对象:

使用purge命令能够永久的从回收站中删除对象,当然,从回收站删除对象后就不能再使用flashback drop命令进行恢复了.

->PURGE TABLE  清除指定的表

->PURGE INDEX  清除指定的索引

  语法:Purge {table <table_name>|index <index_name>}

->PURGE TABLESPACE  清除指定表空间内的所有回收站对象,另外,存在于其他表空间的互相关联的对象也会被清除。也可以指定USER清除相应用户的对象。

  语法:purge tablespace <ts_name> [user <user_name>]

->PURGE RECYCLEBIN  清除当前用户的所有对象,RECYCLEBIN相当于USER_ RECYCLEBIN

->PURGE DBA_RECYCLEBIN  清除所有对象,当然需要有足够的系统权限或者SYSDBA的权限。

  语法:purge [USER_|DBA_]recyclebin

转载地址:http://blog.chinaunix.net/uid-18974058-id-3087582.html

 

posted on 2013-10-06 08:28  LinuxPanda  阅读(904)  评论(0编辑  收藏  举报

导航