Oracle第章闪回技术_第1页
Oracle第章闪回技术_第2页
Oracle第章闪回技术_第3页
Oracle第章闪回技术_第4页
Oracle第章闪回技术_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

第12章闪回技术本章内容闪回技术概述闪回查询技术闪回查询闪回版本查询闪回事务查询闪回错误操作技术闪回表闪回删除闪回数据库本章要求了解闪回技术掌握闪回查询操作掌握闪回版本查询操作掌握闪回事务查询操作掌握闪回表操作掌握闪回删除操作掌握闪回数据库操作12.1闪回技术概述闪回基本概念闪回技术分类12.1.1基本概念Oracle9i实现了基于回滚段的闪回查询(FlashbackQuery)技术,即从回滚段中读取一定时间内对表进行操作的数据,恢复错误的DML操作。在Oracle10g中,除提高了闪回查询功能,实现了闪回版本查询、闪回事务查询外,还实现了闪回表、闪回删除和闪回数据库的功能。闪回技术是数据库恢复技术历史上一次重大的进步,从根本上改变了数据恢复。采用闪回技术,可以针对行级和事务级发生过变化的数据进行恢复,减少了数据恢复的时间,而且操作简单,通过SQL语句就可以实现数据的恢复,大大提高了数据库恢复的效率。12.1.2闪回技术分类闪回查询(FlashbackQuery):查询过去某个时间点或某个SCN值时表中的数据信息;闪回版本查询(FlashbackVersionQuery):查询过去某个时间段或某个SCN段内表中数据的变化情况;闪回事务查询(FlashbackTransactionQuery):查看某个事务或所有事务在过去一段时间对数据进行的修改;闪回表(FlashbackTable):将表恢复到过去的某个时间点或某个SCN值时的状态;闪回删除(FlashbackDrop):将已经删除的表及其关联对象恢复到删除前的状态;闪回数据库(FlashbackDatabase):将数据库恢复到过去某个时间点或某个SCN值时的状态。注意闪回查询、闪回版本查询、闪回事务查询以及闪回表主要是基于撤销表空间中的回滚信息实现的;闪回删除、闪回数据库是基于Oracle10g中的回收站(RecycleBin)和闪回恢复区(FlashRecoveryArea)特性实现的。为了使用数据库的闪回技术,必须启用撤销表空间自动管理回滚信息。如果要使用闪回删除技术和闪回数据库技术,还需要启用回收站、闪回恢复区。12.2闪回查询技术概述闪回查询闪回版本查询闪回事务查询闪回查询的机制闪回查询是指利用数据库回滚段存放的信息查看指定表中过去某个时间点的数据信息,或过去某个时间段数据的变化情况,或某个事务对该表的操作信息等。为了使用闪回查询功能,需要启动数据库撤销表空间来管理回滚信息。与撤销表空间相关的参数包括:

UNDO_MANAGEMENT:指定回滚段的管理方式,如果设置为AUTO,则采用撤销表空间自动管理回滚信息;

UNDO_TABLESPACE:指定用于回滚信息自动管理的撤销表空间名;

UNDO_RETENTIOIN:指定回滚信息的最长保留时间。

12.2.1闪回查询闪回查询可以返回过去某个时间点已经提交事务操作的结果。基本语法:SELECTcolumn_name[,…]FROMtable_name[ASOFSCN|TIMESTAMPexpression][WHEREcondition]基于ASOFTIMESTAMP的闪回查询基于ASOFSCN的闪回查询(1)基于于ASOFTIMESTAMP的闪回回查询询SQL>ALTERSESSIONSETNLS_DATE_FORMAT='YYYY-MM-DDHH24:MI:SS';SQL>SETTIMEON09:12:50SQL>SELECTempno,salFROMscott.empWHEREempno=7844;EMPNOSAL--------------7844150009:13:00SQL>UPDATEscott.empSETsal=2000WHEREempno=7844;09:13:07SQL>COMMIT;09:13:12SQL>UPDATEscott.empSETsal=2500WHEREempno=7844;09:14:28SQL>UPDATEscott.empSETsal=3000WHEREempno=7844;09:14:41SQL>COMMIT;09:14:50SQL>UPDATEscott.empSETsal=3500WHEREempno=7844;09:15:43SQL>COMMIT;查询7844号员工工的当当前工工资值值。09:15:48SQL>SELECTempno,salFROMscott.empWHEREempno=7844;EMPNOSAL-----------------78443500查询7844号员工工前一一个小小时的的工资资值。。09:16:00SQL>SELECTempno,salFROMscott.empASOFTIMESTAMPSYSDATE-1/24WHEREempno=7844;EMPNOSAL----------------78441500查询第第一个个事务务提交交,第第二个个事务务还没没有提提交时时7844号员工工的工工资。。09:16:22SQL>SELECTempno,salFROMscott.empASOFTIMESTAMPTO_TIMESTAMP('2009-3-2309:14:41','YYYY-MM-DDHH24:MI:SS')WHEREempno=7844;EMPNOSAL-----------------78442000查询第第二个个事务务提交交,第第三个个事务务还没没有提提交时时7844号员工工的工工资09:17:47SQL>SELECTempno,salFROMscott.empASOFTIMESTAMPTO_TIMESTAMP('2009-3-2309:15:43','YYYY-MM-DDHH24:MI:SS')WHEREempno=7844;EMPNOSAL-----------------78443000如果需需要,,可以以将数数据恢恢复到到过去去某个个时刻刻的状状态。。09:25:23SQL>UPDATEscott.empSETsal=(SELECTsalFROMscott.empASOFTIMESTAMPTO_TIMESTAMP('2009-3-239:15:43','YYYY-MM-DDHH24:MI:SS')WHEREempno=7844)WHEREempno=7844;09:25:55SQL>COMMIT;09:26:13SQL>SELECTempno,salFROMscott.empWHEREempno=7844;EMPNOSAL----------------78443000闪回版版本查查询09:27:58SQL>SELECTcurrent_scnFROMv$database;CURRENT_SCN-----------61724409:27:58SQL>SELECTempno,salFROMscott.empWHEREempno=7844;EMPNOSAL----------------7844300009:28:21SQL>UPDATEscott.empSETsal=5000WHEREempno=7844;09:29:23SQL>COMMIT;09:29:31SQL>UPDATEscott.empSETsal=5500WHEREempno=7844;09:29:55SQL>COMMIT;09:30:14SQL>SELECTcurrent_scnFROMv$database;CURRENT_SCN-----------61731709:30:37SQL>SELECTempno,salFROMscott.empASOFSCN617244WHEREempno=7844;EMPNOSAL---------------78443000注意意事实实上上,,Oracle在内内部部都都是是使使用用SCN的,,即即使使指指定定的的是是ASOFTIMESTAMP,Oracle也会会将将其其转转换换成成SCN。系系统统时时间间与与SCN之间间的的对对应应关关系系可可以以通通过过查查询询SYS模式式下下的的SMON_SCN_TIME表获获得得。。SELECTscn,TO_CHAR(time_dp,'YYYY-MM-DDHH24:MI:SS')time_dpFROMsys.smon_scn_time;利用用闪闪回回版版本本查查询询,,可可以以查查看看一一行行记记录录在在一一段段时时间间内内的的变变化化情情况况,,即即一一行行记记录录的的多多个个提提交交的的版版本本信信息息,,从从而而可可以以实实现现数数据据的的行行级级恢恢复复。。基本本语语法法SELECTcolumn_name[,…]FROMtable_name[VERSIONSBETWEENSCN|TIMESTAMPMINVALUE|expressionANDMAXVALUE|expression][ASOFSCN|TIMESTAMPexpression]WHEREcondition参数数说说明明VERSIONSBETWEEN:用用于于指指定定闪闪回回版版本本查查询询时时查查询询的的时时间间段段或或SCN段;;ASOF:用用于于指指定定闪闪回回查查询询时时查查询询的的时时间间点点或或SCN。在闪闪回回版版本本查查询询的的目目标标列列中中,,可可以以使使用用下下列列几几个个伪伪列列返返回回版版本本信信息息。。VERSIONS_STARTTIME:基于于时时间间的的版版本本有有效效范范围围的的下下界界;VERSIONS_STARTSCN:基于于SCN的版版本本有有效效范范围围的的下下界界;VERSIONS_ENDTIME:基基于于时时间间的的版版本本有有效效范范围围的的上上界界;;VERSIONS_ENDSCN:基基于于SCN的版版本本有有效效范范围围的的上上界界;;VERSIONS_XID:操操作作的的事事务务ID;VERSIONS_OPERATION:执执行行操操作作的的类类型型,,I表示示INSERT,D表示示DELETE,U表示示UPDATE。SQL>UPDATEscott.empSETsal=6000WHEREempno=7844;SQL>UPDATEscott.empSETsal=6500WHEREempno=7844;SQL>UPDATEscott.empSETsal=7000WHEREempno=7844;SQL>COMMIT;SQL>UPDATEscott.empSETsal=7500WHEREempno=7844;SQL>COMMIT;SQL>SETLINESIZE600SQL>COLSTARTTIMEFORMATA30SQL>COLENDTIMEFORMATA30SQL>COLOPERATIONFORMATA10基于于VERSIONSBETWEENTIMESTAMP的闪闪回回版版本本查查询询。。SQL>SELECTversions_xidXID,versions_starttimeSTARTTIME,versions_endtimeENDTIME,versions_operationOPERATION,salFROMscott.empVERSIONSBETWEENTIMESTAMPMINVALUEANDMAXVALUEWHEREempno=7844ORDERBYSTARTTIME;基于VERSIONSBETWEENSCN的闪回版版本查询询。SQL>SELECTversions_xidXID,versions_startscnSTARTSCN,versions_endscnENDSCN,versions_operationOPERATION,salFROMscott.empVERSIONSBETWEENSCNMINVALUEANDMAXVALUEWHEREempno=7844ORDERBYSTARTSCN;查询当前前7844号员工的的工资。。SQL>SELECTempno,salFROMscott.empWHEREempno=7844;EMPNOSAL----------------78447500如果需要要,可以以将数据据恢复到到过去某某个时刻刻的状态态。SQL>UPDATEscott.empSETsal=(SELECTsalFROMscott.empASOFTIMESTAMPTO_TIMESTAMP('2009-3-2310:25:03','YYYY-MM-DDHH24:MI:SS')WHEREempno=7844)WHEREempno=7844;SQL>COMMIT;SQL>SELECTempno,salFROMscott.empWHEREempno=7844;EMPNOSAL-----------------78446000注意在进行闪闪回版本本查询时时,可以以同时使使用VERSIONS短语和ASOF短语。ASOF短语决定定了进行行查询的的时间点点或SCN,VERSIONS短语决定定了可见见的行的的版本信信息。对对于在VERSIONSBETWEEN下界之前前开始的的事务,,或在ASOF指定的时时间或SCN之后完成成的事务务,系统统返回的的版本信信息为NULL。将VERSIONSBWTWEENTIMESTAMP与ASOFTIMESTAMP配合使用用。SQL>SELECTversions_xidXID,versions_starttimeSTARTTIME,versions_endtimeENDTIME,versions_operationOPERATION,salFROMscott.empVERSIONSBETWEENTIMESTAMPMINVALUEANDMAXVALUEASOFTIMESTAMPTO_TIMESTAMP('2009-3-2310:24:40','YYYY-MM-DDHH24:MI:SS')WHEREempno=7844ORDERBYSTARTTIME;将VERSIONSBWTWEENSCN与ASOFSCN配合使用用SQL>SELECTversions_xidXID,versions_startscnSTARTSCN,versions_endscnENDSCN,versions_operationOPERATION,salFROMscott.empVERSIONSBETWEENSCNMINVALUEANDMAXVALUEASOFSCN620045WHEREempno=7844ORDERBYSTARTSCN;闪回事务务查询闪回事务务查询提提供了一一种查看看事务级级数据库库变化的的方法。。可以从从FLASHBACK_TRANSATION_QUERY中查看看回滚滚段中中存储储的事事务信信息。。例如::SQL>SELECToperation,undo_sql,table_nameFROMFLASHBACK_TRANSACTION_QUERY;SQL>SELECToperation,undo_sql,table_nameFROMFLASHBACK_TRANSACTION_QUERYWHERExid=HEXTORAW('04001E002E010000');通常,,将闪闪回事事务查查询与与闪回回版本本查询询相结结合,,先利利用闪闪回版版本查查询获获取事事务ID及事务务操作作结果果,然然后利利用事事务ID查询事事务的的详细细操作作信息息。SQL>SELECTversions_xid,salFROMscott.empVERSIONSBETWEENSCNMINVALUEANDMAXVALUEWHEREempno=7844;SQL>SELECToperation,undo_sqlFROMFLASHBACK_TRANSACTION_QUERYWHERExid=HEXTORAW('04001E002E010000');12.3闪回错错误操操作技技术闪回表表闪回删删除闪回数数据库库闪回表表概述闪回表表是将将表恢恢复到到过去去的某某个时时间点点的状状态,,为DBA提供了了一种种在线线、快快速、、便捷捷地恢恢复对对表进进行的的修改改、删删除、、插入入等错错误的的操作作。与闪回回查询询不同同,闪闪回查查询只只是得得到表表在过过去某某个时时间点点上的的快照照,并并不改改变表表的当当前状状态,,而闪闪回表表则是是将表表及附附属对对象一一起恢恢复到到以前前的某某个时时间点点。利用闪闪回表表技术术恢复复表中中数据据的过过程,,实际际上是是对表表进行行DML操作的的过程程。Oracle自动维维护与与表相相关联联的索索引、、触发发器、、约束束等,,不需需要DBA参与。。为了使使用数数据库库闪回回表功功能,,必须须满足足下列列条件件:用户具具有FLASHBACKANYTABLE系统权权限,或者具具有所所操作作表的的FLASHBACK对象权权限;用户具具有所所操作作表的的SELECT,INSERT,DELETE,ALTER对象权权限;数据库库采用用撤销销表空空间进进行回回滚信信息的的自动动管理理,合合理设设置UNDO_RETENTIOIN参数值值,保保证指指定的的时间间点或或SCN对应信信息保保留在在撤销销表空空间中中;启动被被操作作表的的ROWMOVEMENT特性,,可以以采用用下列列方式式进行行:ALTERTABLEtableENABLEROWMOVEMENT;闪回表表操作作的基基本语语法为为FLASHBACKTABLE[schema.]tableTOSCN|TIMESTAMPexpression[ENABLE|DISABLETRIGGERS]参数说说明SCN:将表表恢复复到指指定的的SCN时状态态;TIMESTAMP:将表表恢复复到指指定的的时间间点;;ENABLE|DIABLETRIGGER:在恢恢复表表中数数据的的过程程中,,表上上的触触发器器是激激活还还是禁禁用((默认认为禁禁用))。注意SYS用户或或以ASSYSDBA身份登登录的的用户户不能能执行行闪回回表操操作。。SQL>CONNscott/tigerSQL>SETTIMEON09:14:01SQL>CREATETABLEtest(IDNUMBERPRIMARYKEY,nameCHAR(20));09:14:12SQL>INSERTINTOtestVALUES(1,'ZHANG');09:14:24SQL>COMMIT;09:14:32SQL>INSERTINTOtestVALUES(2,'ZHAO');09:14:39SQL>COMMIT;09:14:43SQL>INSERTINTOtestVALUES(3,'WANG');09:14:49SQL>COMMIT;09:16:31SQL>SELECTcurrent_scnFROMv$database;CURRENT_SCN-----------67537109:16:50SQL>UPDATEtestSETname='LIU'WHEREid=1;09:17:02SQL>COMMIT;09:17:05SQL>SELECT*FROMtest;IDNAME-----------1LIU2ZHAO3WANG09:17:13SQL>DELETEFROMtestWHEREid=3;09:17:51SQL>COMMIT;09:18:02SQL>SELECT*FROMtest;IDNAME-----------1LIU2ZHAO启动test表的ROWMOVEMENT特性09:19:33SQL>ALTERTABLEtestENABLEROWMOVEMENT;将test表恢复复到2009-3-2409:17:51时刻的的状态态09:20:06SQL>FLASHBACKTABLEtestTOTIMESTAMPTO_TIMESTAMP('2009-3-2409:17:51','YYYY-MM-DDHH24:MI:SS');09:20:18SQL>SELECT*FROMtest;IDNAME-----------1LIU2ZHAO3WANG将test表恢复到SCN为675371的状态09:20:25SQL>FLASHBACKTABLEtestTOSCN675371;09:20:50SQL>SELECT*FROMtest;IDNAME-----------1ZHANG2ZHAO3WANG闪回删除闪回删除概概述回收站管理理闪回删除操操作(1)闪回删除除概述闪回删除可可恢复使用用DROPTABLE语句删除的的表,是一一种对意外外删除的表表的恢复机机制。闪回删除功功能的实现现主要是通通过Oracle10g数据库中的的“回收站”(RecycleBin)技术实现现的。在Oracle10g数据库中,,当执行DROPTABLE操作时,并并不立即回回收表及其其关联对象象的空间,,而是将它它们重命名名后放入一一个称为“回收站”的逻辑容器器中保存,,直到用户户决定永久久删除它们们或存储该该表的表空空间存储空空间不足时时,表才真真正被删除除。为了使用闪闪回删除技技术,必须须开启数据据库的“回收站”。(2)回收站管管理启动“回收站”要使用闪回回删除功能能,需要启启动数据库库的“回收站”,即将参数数RECYCLEBIN设置为ON。在默认情情况下“回收站”已启动。SQL>SHOWPARAMETERRECYCLEBINSQL>ALTERSYSTEMSETRECYCLEBIN=ON;查看“回收站”当执行DROPTABLE操作时,表表及其关联联对象被命命名后保存存在“回收站”中,可以通通过查询USER_RECYCLEBIN,DBA_RECYCLEBIN视图获得被被删除的表表及其关联联对象信息息。SQL>DROPTABLEtest;SQL>SELECTBJECT_NAME,ORIGINAL_NAME,TYPEFROMUSER_RECYCLEBIN;如果在删除除表时使用用了PURGE短语,则表表及其关联联对象被直直接释放,,空间被回回收,相关关信息不会会进入“回收站”中。SQL>CREATETABLEtest_purge(IDNUMBERPRIMARYKEY,nameCHAR(20));SQL>DROPTABLEtest_purgePURGE;SQL>SELECTBJECT_NAME,ORIGINAL_NAME,TYPEFROMUSER_RECYCLEBIN;清除回收站站由于被删除除表及其关关联对象的的信息保存存在“回收站”中,其存储储空间并没没有释放,,因此需要要定期清空空“回收站”,或清除“回收站”中没用的对对象(表、、索引、表表空间),,释放其所所占的磁盘盘空间。清除回收站站语法为::PURGE[TABLEtable|INDEXindex]|[RECYCLEBIN|DBA_RECYCLEBIN]|[TABLESPACEtablespace[USERuser]]参数说明TABLE:从“回收站”中清除指定定的表,并回收其磁磁盘空间;INDEX:从“回收站”中清除指定定的索引,,并回收其其磁盘空间间;RECYCLEBIN:清空用户户“回收站”,并回收所所有对象的的磁盘空间间;DBA_RECYCLEBIN:清空整个个数据库系系统的“回收站”,只有具有有SYSDBA权限的用户户才可以使使用;TABLESPACE:清除“回收站”中指定的表表空间,并并回收磁盘盘空间;USER:清除“回收站”中指定表空空间中特定定用户的对对象,并回回收磁盘空空间。例如:SQL>PURGEINDEX"BIN$i+nXRT6iTp6Gb3zoP/R5Fw==$0";SQL>PURSETABLETEST;SQL>PURGERECYCLEBIN;(3)闪回删除除操作闪回删除的的基本语法法为FLASHBACKTABLE[schema.]tableTOBEFOREDROP[RENAMETOtable]注意只有采用本本地管理的的、非系统统表空间中中的表可以以使用闪回回删除操作作。示例SQL>CREATETABLEexample(IDNUMBERPRIMARYKEY,NAMECHAR(20));SQL>INSERTINTOexampleVALUES(1,'BEFOREDROP');SQL>COMMIT;SQL>DROPTABLEexample;SQL>FLASHBACKTABLEexampleTOBEFOREDROPRENAMETOnew_example;SQL>SELECT*FROMnew_example;IDNAME--------------1BEFOREDROP闪回数据库库闪回数据库库概述闪回数据库库的限制启动闪回数数据库的条条件闪回数据库库操作(1)闪回数据据库概述闪回数据库库技术是将将数据库快快速恢复到到过去的某某个时间点点或SCN值时的状态态,以解决决由于用户户错误操作作或逻辑数数据损坏引引起的问题题。闪回数据库库操作不需需要使用备备份重建数数据文件,,而只需要要应用闪回回日志文件件和归档日日志文件。。为了使用数数据库闪回回技术,需需要预先设设置数据库库的闪回恢恢复区和闪闪回日志保保留时间。。闪回恢复复区用于保保存数据库库运行过程程中产生的的闪回日志志文件,而而闪回日志志保留时间间是指闪回回恢复区中中的闪回日日志文件保保留的时间间,即数据据库可以恢恢复到过去去的最大时时间。(2)闪回数据据库的限制制闪回数据库库操作的限限制:数据文件损损坏或丢失失等介质故故障不能使使用闪回数数据库进行行恢复。闪闪回数据库库只能基于于当前正常常运行的数数据文件;;闪回数据库库功能启动动后,如果果发生数据据库控制文文件重建或或利用备份份恢复控制制文件,则则不能使用用闪回数据据库;不能使用闪闪回数据库库进行数据据文件收缩缩操作;不能使用闪闪回数据库库将数据库库恢复到在在闪回日志志中可获得得最早的SCN之前的SCN,因为闪回回日志文件件在一定条条件下被删删除,而不不是始终保保存在闪回回恢复区中中。(3)启动闪回回数据库的的条件闪回数据库库功能需要要满足的条条件:数据库必须须处于归档档模式(ARCHIVELOG);数据库设置置了闪回恢恢复区;数据库启用用了FLASHBACKDATABASE特性。设置数据库库的归档模模式SQL>CONNSYS/TIGERASSYSDBASQL>ARCHIVELOGLIST;SQL>SHUTDOWNIMMEDIATESQL>STARTUPMOUNTSQL>ALTERDATABASEARCHIVELOG;SQL>ALTERDATABASEOPEN;SQL>ALTERSYSTEMARCHIVELOGSTART;SQL>ARCHIVELOGLIST;设置数据库库的闪回恢恢复区在Oracle10g数据库安装装过程中,,默认情况况下已设置置了数据库库的闪回恢恢复区。可以通过参参数查询数数据闪回恢恢复区及其其空间大小小。SQL>SHOWPARAMETERDB_RECOVERY_FILE启动数据库库FLASHBACK特性为了使用闪闪回数据库库,还需要要启动数据据库的FLASHBACK特性,生成成闪回日志志文件。在在默认情况况下,数据据库的FLASHBACK特性是关闭闭的。在数据库处处于MOUNT状态时执行行ALTERDATABAEFLASHBACKON命令,启动动数据库的的FLASHBACK特性;可以在数据据库处于MOUNT状态时执行行ALTERDATABAEFLASHBACKOFF命令,关闭闭数据库的的FLASHBACK特性。需要通过参参数DB_FLASHBACK_RETENTION_TARGET设置闪回日日志保留时时间,该参参数默认值值为1440分钟,即一一天。示例SQL>SHUTDOWNIMMEDIATESQL>STARTUPMOUNTSQL>ALTERDA

温馨提示

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

评论

0/150

提交评论