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
oracle flashback的更多相关文章
- Oracle Flashback Technologies - 闪回查询
Oracle Flashback Technologies - 闪回查询 查看表中,某行数据的修改记录 #创建一个表,并插入和修改数据 SQL> create table y3(id )); T ...
- Oracle Flashback Technologies - 闪回被drop的表
Oracle Flashback Technologies - 闪回被drop的表 在oracle10g中,drop一个表后,表没有真正被删除,支持被rename后放在recyclebin中. #新建 ...
- Oracle Flashback Technologies - 估算不同时间段闪回日志的产生量
Oracle Flashback Technologies - 估算不同时间段闪回日志的产生量 v$flashback_database_stat监控闪回数据的i/o开销的统计信息,根据之前的系统负载 ...
- Oracle Flashback Technologies - 闪回数据库
Oracle Flashback Technologies - 闪回数据库 根据指定的SCN,使用rman闪回数据库 #查看可以闪回到多久前 SQL> select * from v$flash ...
- Oracle Flashback Technologies (总)
Oracle Flashback Technologies Oracle 9i中增加了闪回查询技术,闪回查询为数据库提供了一种简单.强大.完全无干扰从人为错误中恢复的机制.通过闪回查询,用户可以查看过 ...
- ORACLE FLASHBACK DATABASE 知识整理
1.知识储备 1) 只有SYSDBA有权执行,闪回前一定要记录当前SCN 2) 需要停机,并要求处于ARCHIVELOG模式中 3) 闪回日志不能被复用和归档,是自动管理的.RVWR ...
- Oracle Flashback 详解
Oracle flashback 是一种方便快捷的数据库恢复技术,它不使用备份文件,通过闪回日志可以使数据库恢复到过去的某个状态,当用户发生逻辑错误时(误删表数据.表.表空间等)需要快速恢复数据库,可 ...
- oracle flashback data archive闪回数据归档天坑之XID重用导致闪回查询数据重复
我们有个系统使用了Oracle flashback data archive闪回数据归档特性来作为基于时间点的恢复机制,在频繁插入.更新期间发现SYS_FBA_HIST_NNNN表中的XID被两个事务 ...
- oracle flashback 后主键及索引更改问题
oracle flashback 后 主键会变为bin开头,如果删除可以采用将sql复制出单独窗口,然后加上“”执行
随机推荐
- POJ3613 Cow Relays [矩阵乘法 floyd类似]
Cow Relays Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7335 Accepted: 2878 Descri ...
- 【NOIP 2012 国王游戏】 贪心+高精度
题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍 ...
- USB Type-C接口完美无瑕?小心这五点
今年下半年发布的新手机中,采用USB Type-C接口与传统micro USB接口的手机,所占比例大概是一半对一半.采用Type-C接口的手机大多数都是国产手机,而像三星.摩托罗拉以及索尼等老牌的手机 ...
- Android Integer.decode()和Intger.valueof()
decode合适用来分析数字 可以分析 8进:010=>分析后为 8 10进:10=>分析后为 10 16进:#10|0X10|0x10=>分析后是 16 而valueof 只 ...
- js中replace用法
js中replace的用法 replace方法的语法是:stringObj.replace(rgExp, replaceText) 其中stringObj是字符串(string),reExp可以是正则 ...
- 【Python Network】权威域名服务器级联查询
如果PyDNS库,跳过本地名称服务器,直接向权威名称服务器查询.如baidu.com查询.com域名服务器,并从各个域名服务器中查询下一即域名,并输出相关信息. #! /usr/bin/env pyt ...
- 结构体typedef struct dtuple_struct dtuple_t;
/** Structure for an SQL data tuple of fields (logical record) */ struct dtuple_struct { ulint info_ ...
- c#调用c++动态库的一些理解
调用c++动态库一般我们这样写 [DllImport("UCamer.dll", CallingConvention = CallingConvention.Winapi)] ...
- C#实现微信公众号群发消息(突破破解一天只能发一次的限制)
总体思路:1.首先必须要在微信公众平台上申请一个公众号. 2.然后进行模拟登陆.(由于我对http传输原理和编程不是特别懂,在模拟登陆的地方,不是特别清楚,希望有大神指教) 3.模拟登陆后会获得一个t ...
- Android 开发性能优化之SparseArray(一)
多数Android开发者都知道在Android中可以使用HashMap来映射一种对应关系,在java开发中HashMap也算是一种很重要的数据存储结构.然后很多人在Android开发中多数都会用Has ...