Oracle第12章闪回技术

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Oracle10g数据库基础教程第12章闪回技术Oracle10g数据库基础教程本章内容闪回技术概述闪回查询技术闪回查询闪回版本查询闪回事务查询闪回错误操作技术闪回表闪回删除闪回数据库Oracle10g数据库基础教程本章要求了解闪回技术掌握闪回查询操作掌握闪回版本查询操作掌握闪回事务查询操作掌握闪回表操作掌握闪回删除操作掌握闪回数据库操作Oracle10g数据库基础教程12.1闪回技术概述闪回基本概念闪回技术分类Oracle10g数据库基础教程12.1.1基本概念Oracle9i实现了基于回滚段的闪回查询(FlashbackQuery)技术,即从回滚段中读取一定时间内对表进行操作的数据,恢复错误的DML操作。在Oracle10g中,除提高了闪回查询功能,实现了闪回版本查询、闪回事务查询外,还实现了闪回表、闪回删除和闪回数据库的功能。闪回技术是数据库恢复技术历史上一次重大的进步,从根本上改变了数据恢复。采用闪回技术,可以针对行级和事务级发生过变化的数据进行恢复,减少了数据恢复的时间,而且操作简单,通过SQL语句就可以实现数据的恢复,大大提高了数据库恢复的效率。Oracle10g数据库基础教程12.1.2闪回技术分类闪回查询(FlashbackQuery):查询过去某个时间点或某个SCN值时表中的数据信息;闪回版本查询(FlashbackVersionQuery):查询过去某个时间段或某个SCN段内表中数据的变化情况;闪回事务查询(FlashbackTransactionQuery):查看某个事务或所有事务在过去一段时间对数据进行的修改;闪回表(FlashbackTable):将表恢复到过去的某个时间点或某个SCN值时的状态;闪回删除(FlashbackDrop):将已经删除的表及其关联对象恢复到删除前的状态;闪回数据库(FlashbackDatabase):将数据库恢复到过去某个时间点或某个SCN值时的状态。Oracle10g数据库基础教程注意闪回查询、闪回版本查询、闪回事务查询以及闪回表主要是基于撤销表空间中的回滚信息实现的;闪回删除、闪回数据库是基于Oracle10g中的回收站(RecycleBin)和闪回恢复区(FlashRecoveryArea)特性实现的。为了使用数据库的闪回技术,必须启用撤销表空间自动管理回滚信息。如果要使用闪回删除技术和闪回数据库技术,还需要启用回收站、闪回恢复区。Oracle10g数据库基础教程12.2闪回查询技术概述闪回查询闪回版本查询闪回事务查询Oracle10g数据库基础教程闪回查询的机制闪回查询是指利用数据库回滚段存放的信息查看指定表中过去某个时间点的数据信息,或过去某个时间段数据的变化情况,或某个事务对该表的操作信息等。为了使用闪回查询功能,需要启动数据库撤销表空间来管理回滚信息。与撤销表空间相关的参数包括:UNDO_MANAGEMENT:指定回滚段的管理方式,如果设置为AUTO,则采用撤销表空间自动管理回滚信息;UNDO_TABLESPACE:指定用于回滚信息自动管理的撤销表空间名;UNDO_RETENTIOIN:指定回滚信息的最长保留时间。Oracle10g数据库基础教程12.2.1闪回查询闪回查询可以返回过去某个时间点已经提交事务操作的结果。基本语法:SELECTcolumn_name[,…]FROMtable_name[ASOFSCN|TIMESTAMPexpression][WHEREcondition]基于ASOFTIMESTAMP的闪回查询基于ASOFSCN的闪回查询Oracle10g数据库基础教程(1)基于ASOFTIMESTAMP的闪回查询SQLALTERSESSIONSETNLS_DATE_FORMAT='YYYY-MM-DDHH24:MI:SS';SQLSETTIMEON09:12:50SQLSELECTempno,salFROMscott.empWHEREempno=7844;EMPNOSAL--------------7844150009:13:00SQLUPDATEscott.empSETsal=2000WHEREempno=7844;09:13:07SQLCOMMIT;09:13:12SQLUPDATEscott.empSETsal=2500WHEREempno=7844;Oracle10g数据库基础教程09:14:28SQLUPDATEscott.empSETsal=3000WHEREempno=7844;09:14:41SQLCOMMIT;09:14:50SQLUPDATEscott.empSETsal=3500WHEREempno=7844;09:15:43SQLCOMMIT;查询7844号员工的当前工资值。09:15:48SQLSELECTempno,salFROMscott.empWHEREempno=7844;EMPNOSAL-----------------78443500Oracle10g数据库基础教程查询7844号员工前一个小时的工资值。09:16:00SQLSELECTempno,salFROMscott.empASOFTIMESTAMPSYSDATE-1/24WHEREempno=7844;EMPNOSAL----------------78441500查询第一个事务提交,第二个事务还没有提交时7844号员工的工资。09:16:22SQLSELECTempno,salFROMscott.empASOFTIMESTAMPTO_TIMESTAMP('2009-3-2309:14:41','YYYY-MM-DDHH24:MI:SS')WHEREempno=7844;EMPNOSAL-----------------78442000Oracle10g数据库基础教程查询第二个事务提交,第三个事务还没有提交时7844号员工的工资09:17:47SQLSELECTempno,salFROMscott.empASOFTIMESTAMPTO_TIMESTAMP('2009-3-2309:15:43','YYYY-MM-DDHH24:MI:SS')WHEREempno=7844;EMPNOSAL-----------------78443000Oracle10g数据库基础教程如果需要,可以将数据恢复到过去某个时刻的状态。09:25:23SQLUPDATEscott.empSETsal=(SELECTsalFROMscott.empASOFTIMESTAMPTO_TIMESTAMP('2009-3-239:15:43','YYYY-MM-DDHH24:MI:SS')WHEREempno=7844)WHEREempno=7844;09:25:55SQLCOMMIT;09:26:13SQLSELECTempno,salFROMscott.empWHEREempno=7844;EMPNOSAL----------------78443000Oracle10g数据库基础教程12.2.2闪回版本查询09:27:58SQLSELECTcurrent_scnFROMv$database;CURRENT_SCN-----------61724409:27:58SQLSELECTempno,salFROMscott.empWHEREempno=7844;EMPNOSAL----------------7844300009:28:21SQLUPDATEscott.empSETsal=5000WHEREempno=7844;09:29:23SQLCOMMIT;09:29:31SQLUPDATEscott.empSETsal=5500WHEREempno=7844;Oracle10g数据库基础教程09:29:55SQLCOMMIT;09:30:14SQLSELECTcurrent_scnFROMv$database;CURRENT_SCN-----------61731709:30:37SQLSELECTempno,salFROMscott.empASOFSCN617244WHEREempno=7844;EMPNOSAL---------------78443000Oracle10g数据库基础教程注意事实上,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;Oracle10g数据库基础教程利用闪回版本查询,可以查看一行记录在一段时间内的变化情况,即一行记录的多个提交的版本信息,从而可以实现数据的行级恢复。基本语法SELECTcolumn_name[,…]FROMtable_name[VERSIONSBETWEENSCN|TIMESTAMPMINVALUE|expressionANDMAXVALUE|expression][ASOFSCN|TIMESTAMPexpression]WHEREcondition参数说明VERSIONSBETWEEN:用于指定闪回版本查询时查询的时间段或SCN段;ASOF:用于指定闪回查询时查询的时间点或SCN。Oracle10g数据库基础教程在闪回版本查询的目标列中,可以使用下列几个伪列返回版本信息。VERSIONS_STARTTIME:基于时间的版本有效范围的下界;VERSIONS_STARTSCN:基于SCN的版本有效范围的下界;VERSIONS_ENDTIME:基于时间的版本有效范围的上界;VERSIONS_ENDSCN:基于SCN的版本有效范围的上界;VERSIONS_XID:操作的事务ID;VERSIONS_OPERATION:执行操作的类型,I表示INSERT,D表示DELETE,U表示UPDATE。Oracle10g数据库基础教程SQLUPDATEscott.empSETsal=6000WHEREempno=7844;SQLUPDATEscott.empSETsal=6500WHEREempno=7844;SQLUPDATEscott.empSETsal=7000WHEREempno=7844;SQLCOMMIT;SQLUPDATEscott.empSETsal=7500WHEREempno=7844;SQLCOMMIT;SQLSETLINESIZE600SQLCOLSTARTTIMEFORMATA30SQLCOLENDTIMEFORMATA30SQLCOLOPERATIONFORMATA10Oracle10g数据库基础教程基于VERSIONSBETWEENTIMESTAMP的闪回版本查询。SQLSELECTversions_xidXID,versions_starttimeSTARTTIME,versions_endtimeENDTIME,versions_operationOPERATION,salFROMscott.empVERSIONSBETWEENTIMESTAMPMINVALUEANDMAXVALUEWHEREempno=7844ORDERBYSTARTTIME;Oracle10g数据库基础教程基于VERSIONSBETWEENSCN的闪回版本查询。SQLSELECTversions_xidXID,versions_startscnSTARTSCN,versions_endscn

1 / 64
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功