1 / 9
文档名称:

Oracle11g闪回技术.docx

格式:docx   大小:2,606KB   页数:9页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Oracle11g闪回技术.docx

上传人:文艺人生 2024/5/10 文件大小:2.54 MB

下载得到文件列表

Oracle11g闪回技术.docx

相关文档

文档介绍

文档介绍:该【Oracle11g闪回技术 】是由【文艺人生】上传分享,文档一共【9】页,该文档可以免费在线阅读,需要了解更多关于【Oracle11g闪回技术 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。Oracle11g闪回技术为什么使用闪回技术 2闪回技术的发展 2闪回查询FlashbackQuery 3闪回表FlashbackTable 3闪回删除flashbackdrop 5闪回版本查询 6闪回事务查询(主要利用undo_sql进行撤消操作) 8闪回数据库flashbackdatabase 8闪回数据归档 9为什么使用闪回技术在Oracle的操作过程中,会不可避免地出现操作失误或用户错误,例如删除了一个表等。传统意义上的解决方法是使用数据导入导出,或是备份恢复技术,但是前提是必须在错误发生之前有正确的备份。有了闪回技术,就可以实现数据的迅速恢复,而且不依赖于数据备份。闪回技术的发展9i闪回查询FlashbackQuery10g闪回表(FlashbackTable)闪回删除/丢弃(FlashbackDrop)闪回版本查询(FlashbackVersionQuery)闪回事务查询(FlashbackTransactionQuery)闪回数据库(FlashbackDatabase)语法:flashbacktabletablenametotimestampxxx;xxx;前提条件:需要有flashbackanytable的系统权限或者是该表的flashback对象权限;需要有该表的select,insert,delete,alter权限;必须保证该表rowmovement。必须启动自动撤消表空间(recyclebin(回收站))查看方法:SQL>showparameterundo_是否启用自动管理撤消表空间有二个初始值参数决定:undo_management:auto表示使用了自动撤消管理表空间,manual则表示手动管理;undo_tablespace:当undo_management值为auto时,该参数用来指定当前的undo表空间名称,undo空间的大小,直接影响到FLASHBACKquery的能力,表空间越大,所能够存储的undo数据自然也越多;undo_retention的设置,通常默认是900秒,15分钟(该参数用来指定undo记录保存的最长时间),关于undo_retention的理解:undo_retention只是指定undo数据的过期时间,并不是说,undo中的数据一定会在undo表空间中保存15分钟,例如:一个新事务开始的时候,如果undo表空间已经被写满,则新事务的数据会自动覆盖已提交事务的数据,而不管这些数据是否已过期,因此,当创建一个自动管理的undo表空间时,还要注意其空间大小,要尽可能保证undo表空间有足够的存储空间。二、flashbacktable影响的因素:如果我们把Flashbackquery看做是恢复记录,则flashbacktable就是用来恢复表的,同时,在Oracle10g中又新引入了一个叫做RecycleBin的功能(主要针对表及其关联对象,比如索引),被删除的表并非真正删除,而是通过修改数据字典的方式,将其改名并放入recyclebin,如果要恢复recyclebin中对象的话,借助flashbacktable是最简便的方式,除此之外,/timestamp的方式从recyclebin中恢复要恢复recyclebin中的表,注意语句如下:Flashbacktable[表名]tobeforedrop,由于该项功能是恢复被删除表,因此官方对其还有另外一个称谓:flashbackdrop。从recyclebin中恢复一个被删除的表:selectobject_name,original_namefromrecyclebin;flashbacktableratestobeforedrop;flashtable语句同时提示一个renameto的子句,如果恢复在当前schema中已经存在同名的表,建议再恢复时通过renameto,为待恢复的表指定一个新的表名,不然数据库会报ora-38312错误例如:DROPTABLErates;CREATETABLErates_3ASSELECT*FROMrates_1;创建一个表rates_3,它是完全copy表rates_1里的全部数据。FLASHBACKTABLErates_3TOBEFOREDROP;ora-38312:原始名称已被现有对象使用。FLASHBACKTABLErates_3TOBEFOREDROPRENAMETOrates_bak;从undo中恢复某些时候,我们要处理的表并不是被意外删除,而是被反复修改过多次希望能恢复到之前的某个时间点,通过前面的学****你一定会说没问题啊,借助flashbackquery就可以。没错,flashbackquery确实可以,但flashbackquery只是查询出记录,如果想做恢复还需要写出相应的insert或update,也许还需要相当多的where条件做判断,一个不慎,可能恢复的数据就是错误的。老板又没在跟前站着,我们没必要在这个时刻用这种方式展示我们娴熟的指法,因此,我们需要更高效更严谨更简便的方式:/timestamp在insert,update,delete之后,mit,不然undo表空间不会记录这些信息的。用到的sql:selectto_char(sysdate,’yyyy-mm-ddhh24:mi:ss’)fromdual;日期/时间的格式化[日期转换为字符串]altertable表名enablerowmovement;flashbacktable表名totimestampto_timestamp(‘2009-11-2309:23:45’,’yyyy-mm-ddhh24:mi:ss’);(to_date(‘2009-12-2905:52:45’,’yyyy-mm-ddhh24:mi:ss’))fromdual;日期/时间的格式化[字符串转换为日期]2378643;:时间戳转化为系统改变号scn_to_timestamp:系统改变号转化为时间戳闪回删除flashbackdrop回收站:实现闪回删除功能,需要使用Oracle回收站(recyclebin),回收站是所有被删除对象及其相依对象的逻辑存储容器,例如当一张表被删除(drop)时,该表及其相依对象并不会马上被数据彻底删除,而是被存放到回收站中。机制:回收站将用户执行的drop操作记录在一个系统表中,也就是被删除的对象写到一个数据字典中,如果确定不再需要该对象,可以使用purge命令对回收站进行清空。回收站中的对象会进行重命名,格式如下:BIN$globalUID$versionBIN:表示becyclebinglobalUID:全局唯一的,二十四字符长的标识对象,该标识于原对象没有任何关系$version:数据库分配的版本号回收站的管理:回收站是否启用Showparameterrecyclebin回收站的信息的查看Showrecyclebin(查看不到删除的表的索引)Select*fromuser_recyclebin;(可以查看到删除的表的索引)Select*fromdba_recyclebin;(可以查看到删除的表的索引)清除回收站的对象Purgetable表名字Purgetabletablespace表空间名;Purgetabletablespace表空间名user用户名;Purgeindex索引名字;Purgerecyclebin;全部清空使用闪回删除的前提条件:必须是DDL语言不能是sys或是dba权限的用户,否则查不出记录例子:SQL>conndwj/dwj;>droptablet;>showrecyclebin;ORIGINALNAMERECYCLEBINNAMEOBJECTTYPEDROPTIME----------------------------------------------------------------------------------Tajjgalk。。。常用命令:Showrecyclebin;查看回收站内容Flashbacktable表名tobeforedrop[renameto别名];Flashbacktable“BIN$e9GYL4AsGlfgQKjAgAEP8A==$0”tobeforedrop[renameto别名];闪回版本查询闪回版本查询,提供了一个审计数据行改变的查询功能,通过它可以查到所有已经提交了的行记录。(注意,只包括被提交的记录,还是存放在undo表空间中)Flashbackversionquery的伪列说明VERSIONS_STARTTIME或时间,如果为空,表示该行记录是在查询范围外创建的VERSIONS_ENDTIME或时间,如果为空,说明记录当前时间在当前表内不存在,或者已经被删除了,可以配合着VERSIONS_OPERATION列来看,如果VERSIONS_OPERATION列值为D,说明该列已被删除,如果该列为空,则说明记录在这段时间无操作VERSIONS_XID该操作的事务IDVERSIONS_OPERATION对该行执行的操作:I表示INSERT,D表示DELETE,U表示UPDATE提示:对于索引键的update操作,版本查询可能会将其识别成两个操作:DELETE和INSERTFlashbackversionquery是通过from语句的扩展语句versionsbetween,有两种形式的versionsbetween:VERSIONSBETWEENTIMESTAMP[lowerbound]AND[upperbound][lowerbound]AND[upperbound]lowerbound/upperbound可以是具体的timestamp/scn,也可以是关键字minvalue/maxvalue。这些关键字让Oracle去找到所有的versions,当然这要受制于undo_retention参数设置的大小,毕竟这部分信息是放在undosegment上的。常用的sql:Select列名from表名versionsbetweentimestampminvalueand/timestamp;Select列名from表名versionsbetweentimestampto_date(‘2009-12-2905:52:45’,’yyyy-mm-ddhh24:mi:ss’)andto_date(‘2009-12-3905:52:45’,’yyyy-mm-ddhh24:mi:ss’)/timestamp;ASof恢复到某个版本闪回事务查询(主要利用undo_sql进行撤消操作)闪回事务查询实际上是闪回版本查询的一个扩充,通过它可以审计某个事务甚至撤消一个已经提交的事务。主要视图:flashback_transaction_query,从该视图可以获取事务的历史操作记录以及撤消语句(undo_sql),如果要撤消此操作可以使用此sql思路:先用版本查询的方法得到versions_xid即事务id的值Selectundo_sqlfromflashback_transaction_querywhereversions_xid=事务id的值运行此undo_sql进行撤消操作闪回数据库flashbackdatabase上,从而实现数据库的恢复,这种恢复时不需要通过备份。常用的参数:db_recovery_file_dest闪回日志的存放位置db_recovery_file_dest_size存放闪回日志的空间(恢复区)的大小db_flashback_retention_target闪回数据的保留时间,单位是分,默认是1440,既一天闪回数据的要求:查看数据库的闪回是否开启:Selectflashback_onfromv$database;Alterdatabaseflashbackon;(在mount状态下开启闪回数据库功能)归档模式闪回数据库的步骤:A:shutdownimmediateB:startupmountexclusiveC:flashbackdatabasetotimestamp(to_date(‘2009-12-3905:52:45’,’yyyy-mm-ddhh24:mi:ss’));D:alterdatabaseopenresetlogs;常用sql:Altersessionsetnls_data_format=’yyyy-mm-ddhh24:mi:ss’—设置当前会话时间格式,oldest_flashback_timefromV$flashback_database_log;闪回数据归档