闪回的基本概念
在Oracle的操作工程中,会不可避免地出现操作失误或者用户失误,例如不小心删除了一个表等,这些失误和错误可能会造成重要数据的丢失,最终导致Oracle数据库停止。在传统意义上,当发生数据丢失、数据错误问题时,解决的主要办法是数据的导入导出、备份恢复技术,这些方法都需要在发生错误前,有一个正确的备份才能进行恢复。为了减少这方面的损失,Oracle提供了闪回技术。有了闪回技术,就可以实现数据的快速恢复,而且不需要数据备份。闪回的类型:闪回表(flashback table) :恢复到过去的一个是时间点闪回删除(flashback drop) :回收站中将已删除的对象恢复到删除之前的状态闪回版本查询(flashback version query) :查看用户提交了的增删改的操作以及相应操作时间的记录闪回事务查询(flashback transaction query) :查询某个事务甚至撤销一个已经提交的事务闪回的益处恢复中,闪回技术是革命性的进步传统的恢复技术缓慢:•它是整个数据库或者一个文件恢复,不只恢复损坏的数据•在数据库日志中每个修改都必须被检查闪回速度快:•通过行和事务把改变编入索引•仅仅改变了的数据会被恢复闪回命令很容易:•没有复杂棘手的多步程序
闪回表
闪回表,实际上是将表中的数据快速恢复到过去的一个是时间点或者系统改变号SCN上。实现表的闪回,需要使用到与撤销表空间相关的undo信息,通过show parameter undo命令可以了解这些信息。用户对表数据的修改操作,都记录在撤销表空间中,这为表的闪回提供了数据恢复的基础。例如,某个修改操作在提交后被记录在撤销表空间中,保留时间为900秒,用户可以在这900秒的时间内对表进行闪回操作,从而将表中的数据恢复到修改之前的状态。闪回表的步骤:1.执行表的闪回要设置用户权限:grant flashback any table to scott;2. 获取要恢复的点(SCN号):select sysdate 时间, timestamp_to_scn(sysdate) SCN from dual;3. 将表的行移动功能打开:alter table flshback_table enable row movement;4. 执行闪回表:flashback table flashback_table to scn 945018(获取到的scn号,也可指定在某个时间段恢复);
闪回删除
闪回删除,实际上从系统的回收站中将已删除的对象,恢复到删除之前的状态。 系统的回收站只对普通用户有作用。回收站是所有被删除对象及其相依对象的逻辑存储容器,例如当一个表被删除(drop)时,该表及其相依对象并不会马上被数据库彻底删除,而是被保存到回收站中,而管理员是没有回收站。回收站将用户执行的drop操作记录在一个系统表中,也就是将被删除的对象写到一个数据字典中。如果确定不再需要该对象,可以使用purge命令对回收站进行清空。被删除的对象的名字可能是相同的,例如用户创建了一个test表,使用drop命令删除该表后,又创建了一个test表,这时,如果再次删除该表就会导致向回收站中添加了两个相向同的表,这样就需要将回收站中的名称重命名后再执行闪回。查看回收站:show recyclebin;清空回收站:purge recyclebin;彻底删除表不经回收站:drop table TEST123 purge;执行闪回(必须在回收站中):flashback table test123 to before drop;很据在回收站中的名称执行闪回:flashback table "BIN$9JMrb6kbRCON287lDV+5dA==$0" to before drop;回收站中的名称重命名后执行闪回:flashback table test123 to before drop rename to test1234;闪回删除: 需要注意的事情:闪回删除对下列表无效:在SYSTEM 表空间内的表用精细审计的数据库或 虚拟的私人数据库属于字典管理的表空间由于空间不足已经被手动或自动删除的表以下依赖不被保护:位图索引表之前删掉的索引
闪回版本查询
闪回版本查询,通过它可以查找到所有已经提交了的增删改信息,什么时间段内提交了什么样的操作,根据时间同样也可以方便的闪回表,闪回版本查询其格式如下:例如:select vid,vname,versions_operation,versions_starttime,versions_endtime
from versions_table
versions between timestamp minvalue and maxvalue
order by 1,4;其中:between...and时间段;timestamp 时间;MAXVALUE最大值;MINVALUE最小值;versions指是一个版本查询;versions_operation:增删改操作;versions_starttime:起始时间。
闪回事务查询
闪回事务查询实际上闪回版本查询的一个扩充,通过它可以查询某个事务甚至撤销一个已经提交的事务。实现闪回事务查询,需要先了解flashback_transaction_query视图,从该视图中可以获取事务的历史操作记录以及撤销语句(UNDO_SQL)。闪回事务查询的步骤:
1. 通过闪回版本查询获取事务号(xid)select tid,tname,versions_operation,versions_starttime,versions_endtime,versions_xid
from transaction_table
versions between timestamp minvalue and maxvalue
order by versions_xid;
2. 通过xid查询Flashback_transaction_query,获取undo_sqlselect operation,undo_sql
from Flashback_transaction_query
where xid='0400140020040000';注意,要查询flashback_transaction_query视图的信息,需要有grant select any transaction to scott;的权限。