Oracleg闪回技术.docx_第1页
Oracleg闪回技术.docx_第2页
Oracleg闪回技术.docx_第3页
Oracleg闪回技术.docx_第4页
Oracleg闪回技术.docx_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Oracleg闪回技术 作者: 日期:为什么使用闪回技术1闪回技术的发展1闪回查询Flashback Query2闪回表Flashback Table2闪回删除flashback drop4闪回版本查询5闪回事务查询(主要利用undo_sql进行撤消操作)6闪回数据库flashback database6闪回数据归档7为什么使用闪回技术在Oracle的操作过程中,会不可避免地出现操作失误或用户错误,例如删除了一个表等。传统意义上的解决方法是使用数据导入导出,或是备份恢复技术,但是前提是必须在错误发生之前有正确的备份。有了闪回技术,就可以实现数据的迅速恢复,而且不依赖于数据备份。闪回技术的发展9i 闪回查询Flashback Query10g闪回表(Flashback Table)闪回删除/丢弃(Flashback Drop)闪回版本查询(Flashback Version Query)闪回事务查询(Flashback Transaction Query)闪回数据库(Flashback Database)11g闪回数据归档(Flashback Data Archive)Flashback Table将表回滚到一个过去的时间点或系统改变号SCN上,用来快速恢复表。Flashback Drop结合Oracle的回收站,将删除的对象从回收站中还原。Flashback Version Query查看某个表在指定时间段或某两个SCN之间的修改操作。Flashback Transaction Query结合闪回版本查询,查看某个对象的事务信息,该信息中记录了撤消SQL语句,用于实现对该事务的撤消处理。Flashback Database将数据库回滚到一个过去的时间点或系统改变号SCN,快速恢复数据库。Flashback Data Archive将数据库对象的修改操作记录在闪回数据归档区域中,这样可以使得数据的闪回不依赖于UNDO撤消数据。闪回查询Flashback Query允许对误删除、误更新等DML操作进行闪回(UNDO表空间读取操作前的记录数据)。常用的sql:Select current_scn from v$database;Select count(*) from 表名 as of scn scn的值;-查询Select count(*) from 表名 as of timestamp timestamp的值;-查询Insert into 表名 Select * from 表名 as of scn scn的值; -恢复数据的方法闪回表Flashback Table实际上就是将表中的数据快速恢复到过去的一个时间点或是系统改变号SCN上,实现表的闪回,需要使用到与undo表空间相关的undo信息,通过show parameter undo可以了解这些信息。用户对表数据的修改操作,都记录在undo表空间中,这为表的闪回提供了数据恢复的基础。Oracle Flashback Table特性允许利用Flashback Table语句,确保闪回到表的前一个时间点。与Oracle9i中的Flashback Query相似,利用回滚段信息来恢复一个或一些表到以前的一个时间点(一个快照)。要注意的是,Flashback Table不等于Flashback Query,Flashback Query仅仅是查询以前的一个快照点而已,并不改变当前表的状态,而Flashback Table将改变当前表及附属对象一起回到以前的时间点。语法:flashback table tablename to timestamp xxx;flashback table tablename to scn xxx;前提条件:需要有flashback any table的系统权限或者是该表的flashback对象权限;需要有该表的select,insert,delete,alter权限;必须保证该表row movement。必须启动自动撤消表空间(recycle bin(回收站)查看方法:SQLshow parameter undo_是否启用自动管理撤消表空间有二个初始值参数决定:undo_management:auto表示使用了自动撤消管理表空间,manual则表示手动管理;undo_tablespace:当undo_management值为auto时,该参数用来指定当前的undo表空间名称,undo空间的大小,直接影响到FLASHBACK query的能力,表空间越大,所能够存储的undo数据自然也越多;undo_retention的设置,通常默认是900秒,15分钟(该参数用来指定undo记录保存的最长时间),关于undo_retention的理解:undo_retention只是指定undo数据的过期时间,并不是说,undo中的数据一定会在undo表空间中保存15分钟,例如:一个新事务开始的时候,如果undo表空间已经被写满,则新事务的数据会自动覆盖已提交事务的数据,而不管这些数据是否已过期,因此,当创建一个自动管理的undo表空间时,还要注意其空间大小,要尽可能保证undo表空间有足够的存储空间。二、flashback table影响的因素:如果我们把Flashback query看做是恢复记录,则flashback table就是用来恢复表的,同时,在Oracle10g中又新引入了一个叫做Recycle Bin的功能(主要针对表及其关联对象,比如索引),被删除的表并非真正删除,而是通过修改数据字典的方式,将其改名并放入recycle bin,如果要恢复recycle bin中对象的话,借助flashback table是最简便的方式,除此之外,flashback table也提供了类似flashback query中as of scn/timestamp的方式从recycle bin中恢复要恢复recycle bin中的表,注意语句如下:Flashback table 表名 to before drop,由于该项功能是恢复被删除表,因此官方对其还有另外一个称谓:flashback drop。从recycle bin中恢复一个被删除的表:select object_name,original_name from recyclebin;flashback table rates to before drop;flash table语句同时提示一个rename to 的子句,如果恢复在当前schema中已经存在同名的表,建议再恢复时通过rename to,为待恢复的表指定一个新的表名,不然数据库会报ora-38312错误例如:DROP TABLE rates;CREATE TABLE rates_3 AS SELECT * FROM rates_1; 创建一个表rates_3,它是完全copy 表rates_1里的全部数据。FLASHBACK TABLE rates_3 TO BEFORE DROP;ora-38312:原始名称已被现有对象使用。FLASHBACK TABLE rates_3 TO BEFORE DROP RENAME TO rates_bak;从undo中恢复某些时候,我们要处理的表并不是被意外删除,而是被反复修改过多次希望能恢复到之前的某个时间点,通过前面的学习,你一定会说没问题啊,借助flashback query就可以。没错,flashback query确实可以,但flashback query只是查询出记录,如果想做恢复还需要写出相应的insert或update,也许还需要相当多的where条件做判断,一个不慎,可能恢复的数据就是错误的。老板又没在跟前站着,我们没必要在这个时刻用这种方式展示我们娴熟的指法,因此,我们需要更高效更严谨更简便的方式:flashback table tbname to scn/timestamp在insert,update,delete之后,必须commit,不然undo表空间不会记录这些信息的。用到的sql:select to_char(sysdate,yyyy-mm-dd hh24:mi:ss)from dual; 日期/时间的格式化日期转换为字符串alter table 表名 enable row movement;flashback table 表名 to timestamp to_timestamp(2009-11-23 09:23:45, yyyy-mm-dd hh24:mi:ss);select timestamp_to_scn(to_date(2009-12-29 05:52:45, yyyy-mm-dd hh24:mi:ss) from dual; 日期/时间的格式化字符串转换为日期flashback table 表名 to scn 2378643;timestamp_to_scn:时间戳转化为系统改变号scn_to_timestamp:系统改变号转化为时间戳闪回删除flashback drop回收站:实现闪回删除功能,需要使用Oracle回收站(recycle bin),回收站是所有被删除对象及其相依对象的逻辑存储容器,例如当一张表被删除(drop)时,该表及其相依对象并不会马上被数据彻底删除,而是被存放到回收站中。机制:回收站将用户执行的drop操作记录在一个系统表中,也就是被删除的对象写到一个数据字典中,如果确定不再需要该对象,可以使用purge命令对回收站进行清空。回收站中的对象会进行重命名,格式如下:BIN$globalUID$versionBIN:表示becyclebinglobalUID:全局唯一的,二十四字符长的标识对象,该标识于原对象没有任何关系$version:数据库分配的版本号回收站的管理:回收站是否启用Show parameter recyclebin回收站的信息的查看Show recyclebin(查看不到删除的表的索引)Select * from user_ recyclebin;(可以查看到删除的表的索引)Select * from dba_ recyclebin;(可以查看到删除的表的索引)清除回收站的对象Purge table 表名字Purge table tablespace 表空间名;Purge table tablespace 表空间名user 用户名;Purge index 索引名字;Purge recyclebin;全部清空使用闪回删除的前提条件:必须是DDL语言不能是sys或是dba权限的用户,否则查不出记录例子:SQLconn dwj/dwj;Connected.SQLdrop table t;Table dropped.SQLshow recyclebin;ORIGINAL NAME RECYCLEBIN NAME OBJECTTYPE DROPTIME- - - -Tajjgalk。常用命令:Show recyclebin;查看回收站内容Flashback table 表名 to before drop rename to 别名;Flashback table “BIN$e9GYL4AsGlfgQKjAgAEP8A=$0”to before drop rename to 别名;闪回版本查询闪回版本查询,提供了一个审计数据行改变的查询功能,通过它可以查到所有已经提交了的行记录。(注意,只包括被提交的记录,还是存放在undo表空间中)Flashback version query的伪列说明VERSIONS_STARTSCNVERSIONS_STARTTIME该条记录操作时的SCN或时间,如果为空,表示该行记录是在查询范围外创建的VERSIONS_ENDSCNVERSIONS_ENDTIME该条记录失效时的SCN或时间,如果为空,说明记录当前时间在当前表内不存在,或者已经被删除了,可以配合着VERSIONS_OPERATION列来看,如果VERSIONS_OPERATION列值为D,说明该列已被删除,如果该列为空,则说明记录在这段时间无操作VERSIONS_XID该操作的事务IDVERSIONS_OPERATION对该行执行的操作:I表示INSERT,D表示DELETE,U表示UPDATE提示:对于索引键的update操作,版本查询可能会将其识别成两个操作:DELETE和INSERTFlashback version query是通过from语句的扩展语句versions between,有两种形式的versions between:VERSIONS BETWEEN TIMESTAMP lower bound AND upper boundVERSIONS BETWEEN SCN lower bound AND upper boundlower bound/upper bound可以是具体的timestamp/scn,也可以是关键字minvalue/maxvalue。这些关键字让Oracle去找到所有的versions,当然这要受制于undo_retention参数设置的大小,毕竟这部分信息是放在undo segment上的。常用的sql:Select列名 from 表名 versions between timestamp minvalue and maxvalue order by 列名 as of scn/timestamp;Select列名 from 表名 versions between timestamp to_date(2009-12-29 05:52:45, yyyy-mm-dd hh24:mi:ss) and to_date(2009-12-39 05:52:45, yyyy-mm-dd hh24:mi:ss) order by 列名 as of scn/timestamp;AS of 恢复到某个版本闪回事务查询(主要利用undo_sql进行撤消操作)闪回事务查询实际上是闪回版本查询的一个扩充,通过它可以审计某个事务甚至撤消一个已经提交的事务。主要视图:flashback_transaction_query,从该视图可以获取事务的历史操作记录以及撤消语句(undo_sql),如果要撤消此操作可以使用此sql思路:先用版本查询的方法得到versions_xid即事务id的值Select undo_sql from flashback_transaction_query where versions

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论