Oracle-10g数据库基础教程之闪回技术课件_第1页
Oracle-10g数据库基础教程之闪回技术课件_第2页
Oracle-10g数据库基础教程之闪回技术课件_第3页
Oracle-10g数据库基础教程之闪回技术课件_第4页
Oracle-10g数据库基础教程之闪回技术课件_第5页
已阅读5页,还剩123页未读 继续免费阅读

下载本文档

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

文档简介

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

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

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

UNDO_RETENTIOIN:指定回滚信息的最长保留时间。闪回查询的机制914.2.1闪回查询闪回查询可以返回过去某个时间点已经提交事务操作的结果。基本语法:SELECTcolumn_name[,…]FROMtable_name[ASOFSCN|TIMESTAMPexpression][WHEREcondition]基于ASOFTIMESTAMP的闪回查询基于ASOFSCN的闪回查询14.2.1闪回查询闪回查询可以返回过去某个时间点已经提10

(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;

(1)基于ASOFTIMESTAMP的闪回查询SQL1109: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-----------------7844350009:14:28SQL>UPDATEscott.emp12查询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号员工前一个小时的工资值。13查询第二个事务提交,第三个事务还没有提交时7844号员工的工资09:17:47SQL>SELECTempno,salFROMscott.empASOFTIMESTAMPTO_TIMESTAMP('2009-3-2309:15:43','YYYY-MM-DDHH24:MI:SS')WHEREempno=7844;EMPNOSAL-----------------78443000

查询第二个事务提交,第三个事务还没有提交时7844号员工的工14如果需要,可以将数据恢复到过去某个时刻的状态。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如果需要,可以将数据恢复到过去某个时刻的状态。1514.2.2闪回版本查询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;14.2.2闪回版本查询09:27:58SQL>SEL1609:29:55SQL>COMMIT;09:30:14SQL>SELECTcurrent_scnFROMv$database;CURRENT_SCN-----------61731709:30:37SQL>SELECTempno,salFROMscott.empASOFSCN617244WHEREempno=7844;EMPNOSAL---------------78443000

09:29:55SQL>COMMIT;17注意事实上,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;注意18利用闪回版本查询,可以查看一行记录在一段时间内的变化情况,即一行记录的多个提交的版本信息,从而可以实现数据的行级恢复。基本语法SELECTcolumn_name[,…]FROMtable_name[VERSIONSBETWEENSCN|TIMESTAMPMINVALUE|expressionANDMAXVALUE|expression][ASOFSCN|TIMESTAMPexpression]WHEREcondition参数说明VERSIONSBETWEEN:用于指定闪回版本查询时查询的时间段或SCN段;ASOF:用于指定闪回查询时查询的时间点或SCN。利用闪回版本查询,可以查看一行记录在一段时间内的变化情况,即19在闪回版本查询的目标列中,可以使用下列几个伪列返回版本信息。VERSIONS_STARTTIME:基于时间的版本有效范围的下界;VERSIONS_STARTSCN:基于SCN的版本有效范围的下界;VERSIONS_ENDTIME:基于时间的版本有效范围的上界;VERSIONS_ENDSCN:基于SCN的版本有效范围的上界;VERSIONS_XID:操作的事务ID;VERSIONS_OPERATION:执行操作的类型,I表示INSERT,D表示DELETE,U表示UPDATE。在闪回版本查询的目标列中,可以使用下列几个伪列返回版本信息。20SQL>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

SQL>UPDATEscott.empSETsal=621基于VERSIONSBETWEENTIMESTAMP的闪回版本查询。SQL>SELECTversions_xidXID,versions_starttimeSTARTTIME,versions_endtimeENDTIME,versions_operationOPERATION,salFROMscott.empVERSIONSBETWEENTIMESTAMPMINVALUEANDMAXVALUEWHEREempno=7844ORDERBYSTARTTIME;基于VERSIONSBETWEENTIMESTAMP的闪22基于VERSIONSBETWEENSCN的闪回版本查询。SQL>SELECTversions_xidXID,versions_startscnSTARTSCN,versions_endscnENDSCN,versions_operationOPERATION,salFROMscott.empVERSIONSBETWEENSCNMINVALUEANDMAXVALUEWHEREempno=7844ORDERBYSTARTSCN;基于VERSIONSBETWEENSCN的闪回版本查询。23查询当前7844号员工的工资。SQL>SELECTempno,salFROMscott.empWHEREempno=7844;EMPNOSAL----------------78447500查询当前7844号员工的工资。24如果需要,可以将数据恢复到过去某个时刻的状态。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如果需要,可以将数据恢复到过去某个时刻的状态。25注意在进行闪回版本查询时,可以同时使用VERSIONS短语和ASOF短语。ASOF短语决定了进行查询的时间点或SCN,VERSIONS短语决定了可见的行的版本信息。对于在VERSIONSBETWEEN下界之前开始的事务,或在ASOF指定的时间或SCN之后完成的事务,系统返回的版本信息为NULL。注意26将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;将VERSIONSBWTWEENTIMESTAMP与AS27将VERSIONSBWTWEENSCN与ASOFSCN配合使用SQL>SELECTversions_xidXID,versions_startscnSTARTSCN,versions_endscnENDSCN,versions_operationOPERATION,salFROMscott.empVERSIONSBETWEENSCNMINVALUEANDMAXVALUEASOFSCN620045WHEREempno=7844ORDERBYSTARTSCN;将VERSIONSBWTWEENSCN与ASOFSC2814.2.3闪回事务查询闪回事务查询提供了一种查看事务级数据库变化的方法。可以从FLASHBACK_TRANSATION_QUERY中查看回滚段中存储的事务信息。例如:SQL>SELECToperation,undo_sql,table_nameFROMFLASHBACK_TRANSACTION_QUERY;SQL>SELECToperation,undo_sql,table_nameFROMFLASHBACK_TRANSACTION_QUERYWHERExid=HEXTORAW('04001E002E010000');14.2.3闪回事务查询闪回事务查询提供了一种查看事务级29通常,将闪回事务查询与闪回版本查询相结合,先利用闪回版本查询获取事务ID及事务操作结果,然后利用事务ID查询事务的详细操作信息。

SQL>SELECTversions_xid,salFROMscott.empVERSIONSBETWEENSCNMINVALUEANDMAXVALUEWHEREempno=7844;SQL>SELECToperation,undo_sqlFROMFLASHBACK_TRANSACTION_QUERYWHERExid=HEXTORAW('04001E002E010000');通常,将闪回事务查询与闪回版本查询相结合,先利用闪回版本查询3014.3闪回错误操作技术闪回表闪回删除闪回数据库14.3闪回错误操作技术闪回表3114.3.1闪回表概述闪回表是将表恢复到过去的某个时间点的状态,为DBA提供了一种在线、快速、便捷地恢复对表进行的修改、删除、插入等错误的操作。与闪回查询不同,闪回查询只是得到表在过去某个时间点上的快照,并不改变表的当前状态,而闪回表则是将表及附属对象一起恢复到以前的某个时间点。利用闪回表技术恢复表中数据的过程,实际上是对表进行DML操作的过程。Oracle自动维护与表相关联的索引、触发器、约束等,不需要DBA参与。14.3.1闪回表概述32为了使用数据库闪回表功能,必须满足下列条件:用户具有FLASHBACKANYTABLE系统权限,或者具有所操作表的FLASHBACK对象权限;用户具有所操作表的SELECT,INSERT,DELETE,ALTER对象权限;数据库采用撤销表空间进行回滚信息的自动管理,合理设置UNDO_RETENTIOIN参数值,保证指定的时间点或SCN对应信息保留在撤销表空间中;启动被操作表的ROWMOVEMENT特性,可以采用下列方式进行:ALTERTABLEtableENABLEROWMOVEMENT;为了使用数据库闪回表功能,必须满足下列条件:33闪回表操作的基本语法为FLASHBACKTABLE[schema.]tableTOSCN|TIMESTAMPexpression[ENABLE|DISABLETRIGGERS]参数说明SCN:将表恢复到指定的SCN时状态;TIMESTAMP:将表恢复到指定的时间点;ENABLE|DIABLETRIGGER:在恢复表中数据的过程中,表上的触发器是激活还是禁用(默认为禁用)。注意SYS用户或以ASSYSDBA身份登录的用户不能执行闪回表操作。闪回表操作的基本语法为34SQL>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;SQL>CONNscott/tiger3509:16:31SQL>SELECTcurrent_scnFROMv$database;CURRENT_SCN-----------67537109:16:50SQL>UPDATEtestSETname='LIU'WHEREid=1;09:17:02SQL>COMMIT;09:17:05SQL>SELECT*FROMtest;IDNAME-----------1LIU2ZHAO3WANG

09:16:31SQL>SELECTcurrent_sc3609:17:13SQL>DELETEFROMtestWHEREid=3;09:17:51SQL>COMMIT;09:18:02SQL>SELECT*FROMtest;IDNAME-----------1LIU2ZHAO

09:17:13SQL>DELETEFROMtest37启动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表的ROWMOVEMENT特性38将test表恢复到SCN为675371的状态09:20:25SQL>FLASHBACKTABLEtestTOSCN675371;09:20:50SQL>SELECT*FROMtest;IDNAME-----------1ZHANG2ZHAO3WANG

将test表恢复到SCN为675371的状态3914.3.2闪回删除闪回删除概述回收站管理闪回删除操作14.3.2闪回删除闪回删除概述40(1)闪回删除概述

闪回删除可恢复使用DROPTABLE语句删除的表,是一种对意外删除的表的恢复机制。闪回删除功能的实现主要是通过Oracle10g数据库中的“回收站”(RecycleBin)技术实现的。在Oracle10g数据库中,当执行DROPTABLE操作时,并不立即回收表及其关联对象的空间,而是将它们重命名后放入一个称为“回收站”的逻辑容器中保存,直到用户决定永久删除它们或存储该表的表空间存储空间不足时,表才真正被删除。为了使用闪回删除技术,必须开启数据库的“回收站”。(1)闪回删除概述闪回删除可恢复使用DROPTABLE语41(2)回收站管理

启动“回收站”要使用闪回删除功能,需要启动数据库的“回收站”,即将参数RECYCLEBIN设置为ON。在默认情况下“回收站”已启动。SQL>SHOWPARAMETERRECYCLEBINSQL>ALTERSYSTEMSETRECYCLEBIN=ON;(2)回收站管理启动“回收站”42查看“回收站”当执行DROPTABLE操作时,表及其关联对象被命名后保存在“回收站”中,可以通过查询USER_RECYCLEBIN,DBA_RECYCLEBIN视图获得被删除的表及其关联对象信息。SQL>DROPTABLEtest;SQL>SELECTBJECT_NAME,ORIGINAL_NAME,TYPEFROMUSER_RECYCLEBIN;查看“回收站”43如果在删除表时使用了PURGE短语,则表及其关联对象被直接释放,空间被回收,相关信息不会进入“回收站”中。SQL>CREATETABLEtest_purge(IDNUMBERPRIMARYKEY,nameCHAR(20));SQL>DROPTABLEtest_purgePURGE;SQL>SELECTBJECT_NAME,ORIGINAL_NAME,TYPEFROMUSER_RECYCLEBIN;如果在删除表时使用了PURGE短语,则表及其关联对象被直接释44清除回收站由于被删除表及其关联对象的信息保存在“回收站”中,其存储空间并没有释放,因此需要定期清空“回收站”,或清除“回收站”中没用的对象(表、索引、表空间),释放其所占的磁盘空间。清除回收站语法为:PURGE[TABLEtable|INDEXindex]|[RECYCLEBIN|DBA_RECYCLEBIN]|[TABLESPACEtablespace[USERuser]]清除回收站45参数说明TABLE:从“回收站”中清除指定的表,并回收其磁盘空间;INDEX:从“回收站”中清除指定的索引,并回收其磁盘空间;RECYCLEBIN:清空用户“回收站”,并回收所有对象的磁盘空间;DBA_RECYCLEBIN:清空整个数据库系统的“回收站”,只有具有SYSDBA权限的用户才可以使用;TABLESPACE:清除“回收站”中指定的表空间,并回收磁盘空间;USER:清除“回收站”中指定表空间中特定用户的对象,并回收磁盘空间。参数说明46例如:SQL>PURGEINDEX"BIN$i+nXRT6iTp6Gb3zoP/R5Fw==$0";SQL>PURSETABLETEST;SQL>PURGERECYCLEBIN;例如:47(3)闪回删除操作闪回删除的基本语法为FLASHBACKTABLE[schema.]tableTOBEFOREDROP[RENAMETOtable]注意只有采用本地管理的、非系统表空间中的表可以使用闪回删除操作。(3)闪回删除操作闪回删除的基本语法为48示例SQL>CREATETABLEexample(IDNUMBERPRIMARYKEY,NAMECHAR(20));SQL>INSERTINTOexampleVALUES(1,'BEFOREDROP');SQL>COMMIT;SQL>DROPTABLEexample;SQL>FLASHBACKTABLEexampleTOBEFOREDROPRENAMETOnew_example;SQL>SELECT*FROMnew_example;IDNAME--------------1BEFOREDROP示例4914.3.3闪回数据库闪回数据库概述闪回数据库的限制启动闪回数据库的条件闪回数据库操作14.3.3闪回数据库闪回数据库概述50(1)闪回数据库概述闪回数据库技术是将数据库快速恢复到过去的某个时间点或SCN值时的状态,以解决由于用户错误操作或逻辑数据损坏引起的问题。闪回数据库操作不需要使用备份重建数据文件,而只需要应用闪回日志文件和归档日志文件。为了使用数据库闪回技术,需要预先设置数据库的闪回恢复区和闪回日志保留时间。闪回恢复区用于保存数据库运行过程中产生的闪回日志文件,而闪回日志保留时间是指闪回恢复区中的闪回日志文件保留的时间,即数据库可以恢复到过去的最大时间。(1)闪回数据库概述闪回数据库技术是将数据库快速恢复到过去的51(2)闪回数据库的限制闪回数据库操作的限制:数据文件损坏或丢失等介质故障不能使用闪回数据库进行恢复。闪回数据库只能基于当前正常运行的数据文件;闪回数据库功能启动后,如果发生数据库控制文件重建或利用备份恢复控制文件,则不能使用闪回数据库;不能使用闪回数据库进行数据文件收缩操作;不能使用闪回数据库将数据库恢复到在闪回日志中可获得最早的SCN之前的SCN,因为闪回日志文件在一定条件下被删除,而不是始终保存在闪回恢复区中。(2)闪回数据库的限制闪回数据库操作的限制:52(3)启动闪回数据库的条件闪回数据库功能需要满足的条件:数据库必须处于归档模式(ARCHIVELOG);数据库设置了闪回恢复区;数据库启用了FLASHBACKDATABASE特性。(3)启动闪回数据库的条件闪回数据库功能需要满足的条件:53设置数据库的归档模式SQL>CONNSYS/TIGERASSYSDBASQL>ARCHIVELOGLIST;SQL>SHUTDOWNIMMEDIATESQL>STARTUPMOUNTSQL>ALTERDATABASEARCHIVELOG;SQL>ALTERDATABASEOPEN;SQL>ALTERSYSTEMARCHIVELOGSTART;SQL>ARCHIVELOGLIST;设置数据库的归档模式54设置数据库的闪回恢复区在Oracle10g数据库安装过程中,默认情况下已设置了数据库的闪回恢复区。可以通过参数查询数据闪回恢复区及其空间大小。SQL>SHOWPARAMETERDB_RECOVERY_FILE设置数据库的闪回恢复区55启动数据库FLASHBACK特性为了使用闪回数据库,还需要启动数据库的FLASHBACK特性,生成闪回日志文件。在默认情况下,数据库的FLASHBACK特性是关闭的。在数据库处于MOUNT状态时执行ALTERDATABAEFLASHBACKON命令,启动数据库的FLASHBACK特性;可以在数据库处于MOUNT状态时执行ALTERDATABAEFLASHBACKOFF命令,关闭数据库的FLASHBACK特性。需要通过参数DB_FLASHBACK_RETENTION_TARGET设置闪回日志保留时间,该参数默认值为1440分钟,即一天。启动数据库FLASHBACK特性56示例SQL>SHUTDOWNIMMEDIATESQL>STARTUPMOUNTSQL>ALTERDATABASEFLASHBACKON;SQL>ALTERDATABASEOPEN;SQL>ALTERSYSTEMSETDB_FLASHBACK_RETENTION_TARGET=2880;示例57(4)闪回数据库操作闪回数据库基本语法为FLASHBACK[STANDBY]DATABASE[database]TO[SCN|TIMESTAMPexpression]|[BEFORESCN|TIMESTAMPexpression]参数说明STANDBY:指定执行闪回的数据库为备用数据库;TOSCN:将数据库恢复到指定SCN的状态;TOTIMESTAMP:将数据库恢复到指定的时间点;TOBEFORESCN:将数据库恢复到指定SCN的前一个SCN状态TOBEFORETIMESTAMP:将数据库恢复到指定时间点前一秒的状态。(4)闪回数据库操作闪回数据库基本语法为58查询数据库系统当前时间和当前SCN。SQL>SELECTSYSDATEFROMDUAL;SYSDATE-------------------2009-03-2512:36:19SQL>SELECTCURRENT_SCNFROMV$DATABASE;CURRENT_SCN-----------735884

查询数据库系统当前时间和当前SCN。59查询数据库中当前最早的闪回SCN和时间。SQL>SELECTOLDEST_FLASHBACK_SCN,OLDEST_FLASHBACK_TIMEFROMV$FLASHBACK_DATABASE_LOG;OLDEST_FLASHBACK_SCNLDEST_FLASHBACK_TI---------------------------------------------------------7309552009-03-2510:26:50

查询数据库中当前最早的闪回SCN和时间。60改变数据库的当前状态。SQL>SETTIMEON12:37:38SQL>CREATETABLEtest_flashback(IDNUMBER,NAMECHAR(20));12:37:45SQL>INSERTINTOtest_flashbackVALUES(1,'DATABASE');12:37:52SQL>COMMIT;

改变数据库的当前状态。61进行闪回数据库恢复,将数据库恢复到创建表之前的状态。12:37:56SQL>SHUTDOWNIMMEDIATE12:38:49SQL>STARTUPMOUNTEXCLUSIVE12:43:42SQL>FLASHBACKDATABASETOTIMESTAMP(TO_TIMESTAMP('2009-3-2511:00:00','YYYY-MM-DDHH24:MI:SS'));12:44:38SQL>ALTERDATABASEOPENRESETLOGS;进行闪回数据库恢复,将数据库恢复到创建表之前的状态。62验证数据库的状态(test_flashback表应该不存在)。12:44:58SQL>SELECT*FROMtest_flashback;SELECT*FROMtest_flashback*第1行出现错误:ORA-00942:表或视图不存在验证数据库的状态(test_flashback表应该不存在)63总结了解闪回技术掌握闪回查询操作掌握闪回版本查询操作掌握闪回事务查询操作掌握闪回表操作掌握闪回删除操作掌握闪回数据库操作总结了解闪回技术64第14章闪回技术第14章闪回技术65本章内容闪回技术概述闪回查询技术闪回查询闪回版本查询闪回事务查询闪回错误操作技术闪回表闪回删除闪回数据库本章内容闪回技术概述66本章要求了解闪回技术掌握闪回查询操作掌握闪回版本查询操作掌握闪回事务查询操作掌握闪回表操作掌握闪回删除操作掌握闪回数据库操作本章要求了解闪回技术6714.1闪回技术概述闪回基本概念闪回技术分类14.1闪回技术概述闪回基本概念6814.1.1基本概念Oracle9i实现了基于回滚段的闪回查询(FlashbackQuery)技术,即从回滚段中读取一定时间内对表进行操作的数据,恢复错误的DML操作。在Oracle10g中,除提高了闪回查询功能,实现了闪回版本查询、闪回事务查询外,还实现了闪回表、闪回删除和闪回数据库的功能。闪回技术是数据库恢复技术历史上一次重大的进步,从根本上改变了数据恢复。采用闪回技术,可以针对行级和事务级发生过变化的数据进行恢复,减少了数据恢复的时间,而且操作简单,通过SQL语句就可以实现数据的恢复,大大提高了数据库恢复的效率。14.1.1基本概念Oracle9i实现了基于回滚段的6914.1.2闪回技术分类闪回查询(FlashbackQuery):查询过去某个时间点或某个SCN值时表中的数据信息;闪回版本查询(FlashbackVersionQuery):查询过去某个时间段或某个SCN段内表中数据的变化情况;闪回事务查询(FlashbackTransactionQuery):查看某个事务或所有事务在过去一段时间对数据进行的修改;闪回表(FlashbackTable):将表恢复到过去的某个时间点或某个SCN值时的状态;闪回删除(FlashbackDrop):将已经删除的表及其关联对象恢复到删除前的状态;闪回数据库(FlashbackDatabase):将数据库恢复到过去某个时间点或某个SCN值时的状态。14.1.2闪回技术分类闪回查询(FlashbackQ70注意闪回查询、闪回版本查询、闪回事务查询以及闪回表主要是基于撤销表空间中的回滚信息实现的;闪回删除、闪回数据库是基于Oracle10g中的回收站(RecycleBin)和闪回恢复区(FlashRecoveryArea)特性实现的。为了使用数据库的闪回技术,必须启用撤销表空间自动管理回滚信息。如果要使用闪回删除技术和闪回数据库技术,还需要启用回收站、闪回恢复区。注意7114.2闪回查询技术概述闪回查询闪回版本查询闪回事务查询14.2闪回查询技术概述72闪回查询的机制闪回查询是指利用数据库回滚段存放的信息查看指定表中过去某个时间点的数据信息,或过去某个时间段数据的变化情况,或某个事务对该表的操作信息等。为了使用闪回查询功能,需要启动数据库撤销表空间来管理回滚信息。与撤销表空间相关的参数包括:

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

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

UNDO_RETENTIOIN:指定回滚信息的最长保留时间。闪回查询的机制7314.2.1闪回查询闪回查询可以返回过去某个时间点已经提交事务操作的结果。基本语法:SELECTcolumn_name[,…]FROMtable_name[ASOFSCN|TIMESTAMPexpression][WHEREcondition]基于ASOFTIMESTAMP的闪回查询基于ASOFSCN的闪回查询14.2.1闪回查询闪回查询可以返回过去某个时间点已经提74

(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;

(1)基于ASOFTIMESTAMP的闪回查询SQL7509: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-----------------7844350009:14:28SQL>UPDATEscott.emp76查询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号员工前一个小时的工资值。77查询第二个事务提交,第三个事务还没有提交时7844号员工的工资09:17:47SQL>SELECTempno,salFROMscott.empASOFTIMESTAMPTO_TIMESTAMP('2009-3-2309:15:43','YYYY-MM-DDHH24:MI:SS')WHEREempno=7844;EMPNOSAL-----------------78443000

查询第二个事务提交,第三个事务还没有提交时7844号员工的工78如果需要,可以将数据恢复到过去某个时刻的状态。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如果需要,可以将数据恢复到过去某个时刻的状态。7914.2.2闪回版本查询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;14.2.2闪回版本查询09:27:58SQL>SEL8009:29:55SQL>COMMIT;09:30:14SQL>SELECTcurrent_scnFROMv$database;CURRENT_SCN-----------61731709:30:37SQL>SELECTempno,salFROMscott.empASOFSCN617244WHEREempno=7844;EMPNOSAL---------------78443000

09:29:55SQL>COMMIT;81注意事实上,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;注意82利用闪回版本查询,可以查看一行记录在一段时间内的变化情况,即一行记录的多个提交的版本信息,从而可以实现数据的行级恢复。基本语法SELECTcolumn_name[,…]FROMtable_name[VERSIONSBETWEENSCN|TIMESTAMPMINVALUE|expressionANDMAXVALUE|expression][ASOFSCN|TIMESTAMPexpression]WHEREcondition参数说明VERSIONSBETWEEN:用于指定闪回版本查询时查询的时间段或SCN段;ASOF:用于指定闪回查询时查询的时间点或SCN。利用闪回版本查询,可以查看一行记录在一段时间内的变化情况,即83在闪回版本查询的目标列中,可以使用下列几个伪列返回版本信息。VERSIONS_STARTTIME:基于时间的版本有效范围的下界;VERSIONS_STARTSCN:基于SCN的版本有效范围的下界;VERSIONS_ENDTIME:基于时间的版本有效范围的上界;VERSIONS_ENDSCN:基于SCN的版本有效范围的上界;VERSIONS_XID:操作的事务ID;VERSIONS_OPERATION:执行操作的类型,I表示INSERT,D表示DELETE,U表示UPDATE。在闪回版本查询的目标列中,可以使用下列几个伪列返回版本信息。84SQL>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

SQL>UPDATEscott.empSETsal=685基于VERSIONSBETWEENTIMESTAMP的闪回版本查询。SQL>SELECTversions_xidXID,versions_starttimeSTARTTIME,versions_endtimeENDTIME,versions_operationOPERATION,salFROMscott.empVERSIONSBETWEENTIMESTAMPMINVALUEANDMAXVALUEWHEREempno=7844ORDERBYSTARTTIME;基于VERSIONSBETWEENTIMESTAMP的闪86基于VERSIONSBETWEENSCN的闪回版本查询。SQL>SELECTversions_xidXID,versions_startscnSTARTSCN,versions_endscnENDSCN,versions_operationOPERATION,salFROMscott.empVERSIONSBETWEENSCNMINVALUEANDMAXVALUEWHEREempno=7844ORDERBYSTARTSCN;基于VERSIONSBETWEENSCN的闪回版本查询。87查询当前7844号员工的工资。SQL>SELECTempno,salFROMscott.empWHEREempno=7844;EMPNOSAL----------------78447500查询当前7844号员工的工资。88如果需要,可以将数据恢复到过去某个时刻的状态。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如果需要,可以将数据恢复到过去某个时刻的状态。89注意在进行闪回版本查询时,可以同时使用VERSIONS短语和ASOF短语。ASOF短语决定了进行查询的时间点或SCN,VERSIONS短语决定了可见的行的版本信息。对于在VERSIONSBETWEEN下界之前开始的事务,或在ASOF指定的时间或SCN之后完成的事务,系统返回的版本信息为NULL。注意90将VE

温馨提示

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

评论

0/150

提交评论