您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > Oracle11G 闪回技术
第15章闪回技术授课教师:刘明洋主要内容闪回技术概述闪回查询闪回版本查询闪回事务查询闪回表闪回删除闪回数据库闪回数据归档15.1闪回技术概述闪回技术介绍闪回技术分类15.1.1闪回技术介绍Oracle9i实现了基于回滚段的闪回查询(FlashbackQuery)技术,即从回滚段中读取一定时间内对表进行操作的数据,恢复错误的DML操作。在Oracle11g中,除提高了闪回查询功能,实现了闪回版本查询、闪回事务查询外,还实现了闪回表、闪回删除和闪回数据库的功能。利用Oracle数据库的闪回特性,能够完成下列工作查询数据库过去某一时刻的状态;查询反映过去一段时间内数据变化情况的元数据;将表中数据或将删除了的表恢复到过去的某一个时刻的状态;自动跟踪、存档数据变化信息;回滚事务及其依赖事务的操作15.1.2闪回技术分类闪回查询(FlashbackQuery):查询过去某个时间点或某个SCN值时表中的数据信息;闪回版本查询(FlashbackVersionQuery):查询过去某个时间段或某个SCN段内表中数据的变化情况;闪回事务查询(FlashbackTransactionQuery):查看某个事务或所有事务在过去一段时间对数据进行的修改;闪回表(FlashbackTable):将表恢复到过去的某个时间点或某个SCN值时的状态;闪回删除(FlashbackDrop):将已经删除的表及其关联对象恢复到删除前的状态;※闪回数据库(FlashbackDatabase):将数据库恢复到过去某个时间点或某个SCN值时的状态。※闪回数据归档:利用保存在一个或多个表空间中的数据变化信息查询过去某个时刻或某个SCN值时表中数据的快照。15.2闪回查询&闪回查询概述&撤销表空间相关参数配置&闪回查询操作15.2.1闪回查询概述闪回查询主要是利用数据库撤销表空间中存放的回退信息,根据指定的过去的一个时刻或SCN值,返回当时已经提交的数据快照。利用闪回查询可以实现下列功能:–返回当前已经丢失或被误操作的数据在操作之前的快照;–可以进行当前数据与之前特定时刻的数据快照的比较;–可以检查过去某一时刻事务操作的结果;–简化应用设计,不需要存储一些不断变化的临时数据。15.2.2撤销表空间相关参数配置为了使用闪回查询功能,需要启动数据库撤销表空间来管理回滚信息。与撤销表空间相关的参数包括:UNDO_MANAGEMENT:指定回滚段的管理方式,如果设置为AUTO,则采用撤销表空间自动管理回滚信息;UNDO_TABLESPACE:指定用于回滚信息自动管理的撤销表空间名;UNDO_RETENTIOIN:指定回滚信息的最长保留时间。15.2.3闪回查询操作闪回查询可以返回过去某个时间点已经提交事务操作的结果。基本语法:SELECTcolumn_name[,…]FROMtable_name[ASOFSCN|TIMESTAMPexpression][WHEREcondition](1)基于ASOFTIMESTAMP的闪回查询SQLALTERSESSIONSETNLS_DATE_FORMAT='YYYY-MM-DDHH24:MI:SS';SQLSETTIMEON15:33:12SQLALTERSESSIONSETNLS_DATE_FORMAT='YYYY-MM-DDHH24:MI:SS';15:33:25SQLSELECTemployee_id,salaryFROMehr.employeesWHEREemployee_id=140;15:33:34SQLUPDATEehr.employeesSETsalary=12000WHEREemployee_id=140;15:33:48SQLCOMMIT;15:33:56SQLUPDATEehr.employeesSETsalary=13000WHEREemployee_id=140;15:34:05SQLUPDATEehr.employeesSETsalary=14000WHEREemployee_id=140;15:34:12SQLCOMMIT;15:34:19SQLUPDATEehr.employeesSETsalary=15000WHEREemployee_id=140;15:34:26SQLCOMMIT;查询140号员工的当前工资值。15:34:32SQLSELECTemployee_id,salaryFROMehr.employeesWHEREemployee_id=140;EMPLOYEE_IDSALARY-----------------------14014000查询140号员工前一个小时的工资值。15:36:34SQLSELECTemployee_id,salaryFROMehr.employeesASOFTIMESTAMPSYSDATE-1/24WHEREemployee_id=140;EMPLOYEE_IDSALARY----------------------1402500查询第一个事务已经提交,第二个事务还没有提交时140号员工的工资。15:40:26SQLSELECTemployee_id,salaryFROMehr.employeesASOFTIMESTAMPTO_TIMESTAMP('2013-3-815:34:00','YYYY-MM-DDHH24:MI:SS')WHEREemployee_id=140;EMPLOYEE_IDSALARY-----------------------14012000查询第二个事务已经提交,第三个事务还没有提交时140号员工的工资。15:43:56SQLSELECTemployee_id,salaryFROMehr.employeesASOFTIMESTAMPTO_TIMESTAMP('2013-3-815:34:30','YYYY-MM-DDHH24:MI:SS')WHEREemployee_id=140;EMPLOYEE_IDSALARY----------------------14014000(2)基于ASOFSCN的闪回查询15:47:07SQLSELECTcurrent_scnFROMv$database;CURRENT_SCN-------------946572315:52:15SQLSELECTemployee_id,salaryFROMehr.employeesWHEREemployee_id=140;EMPLOYEE_IDSALARY----------------------1401200015:52:29SQLUPDATEehr.employeesSETsalary=14000WHEREemployee_id=140;15:52:37SQLCOMMIT;15:52:44SQLUPDATEehr.employeesSETsalary=15000WHEREemployee_id=140;15:52:50SQLCOMMIT;15:52:57SQLSELECTcurrent_scnFROMv$database;CURRENT_SCN-------------946582015:53:07SQLSELECTemployee_id,salaryFROMehr.employeesASOFSCN9465723WHEREemployee_id=140;EMPLOYEE_IDSALARY-----------------------1401200015.3闪回版本查询闪回版本查询的概念闪回版本查询操作闪回版本查询可以查询一条记录在一段时间内的变化情况,即一条记录的多个提交版本信息。闪回版本查询的基本语法为:SELECTcolumn_name[,…]FROMtable_nameVERSIONSBETWEENSCN|TIMESTAMPMINVALUE|expressionANDMAXVALUE|expression[ASOFSCN|TIMESTAMPexpression]WHEREcondition在闪回版本查询的目标列中,可以使用下列伪列返回行的版本信息。VERSIONS_STARTTIME:基于时间的版本有效范围的下界。VERSIONS_STARTSCN:基于SCN的版本有效范围的下界。VERSIONS_ENDTIME:基于时间的版本有效范围的上界。VERSIONS_ENDSCN:基于SCN的版本有效范围的上界。VERSIONS_XID:操作的事务ID。VERSIONS_OPERATION:执行操作的类型,I表示INSERT,D表示DELETE,U表示UPDATE。下面是一个闪回版本查询示例SQLUPDATEehr.employeesSETsalary=6000WHEREemployee_id=140;SQLUPDATEehr.employeesSETsalary=6500WHEREemployee_id=140;SQLUPDATEehr.employeesSETsalary=7000WHEREemployee_id=140;SQLCOMMIT;SQLUPDATEehr.employeesSETsalary=7500WHEREemployee_id=140;SQLCOMMIT;可以基于VERSIONSBETWEENTIMESTAMP进行闪回版本查询:SQLSELECTversions_xidXID,versions_starttimeSTARTTIME,versions_endtimeENDTIME,versions_operationOPERATION,salaryFROMehr.employeesVERSIONSBETWEENTIMESTAMPMINVALUEANDMAXVALUEWHEREemployee_id=140ORDERBYSTARTTIME;可以基于VERSIONSBETWEENSCN进行闪回版本查询:SQLSELECTversions_xidXID,versions_startscnSTARTSCN,versions_endscnENDSCN,versions_operationOPERATION,salaryFROMehr.employeesVERSIONSBETWEENSCNMINVALUEANDMAXVALUEWHEREemployee_id=140ORDERBYSTARTSCN;查询当前140号员工的工资。SQLSELECTemployee_id,salaryFROMehr.employeesWHEREemployee_id=140;EMPLOYEE_IDSALARY-------------------------140750015.4闪回事务查询闪回事务查询的概念闪回事务查询操作闪回事务查询可以返回在一个特定事务中行的历史数据及与事务相关的元数据,或返回在一个时间段内所有事务的操作结果及事务的元数据在Oracle11g数据库中,为了记录事务操作的详细信息,需要启动数据库的日志追加功能SQLALTERDATABASEADDSUPPLEMENTALLOGDATA;可以从FLASHBACK_TRANSATION_QUERY中查看撤销表空间中存储的事务信息SQLSELECTxid,start_scn,commit_scn,operation,table_nameFROMFLASHBACK_TRANSACTION_QUERYWHEREtable_name=’EMPLOYEES’ANDtable_owner=’EHR’;SQLSELECToperation,undo_sql,table_nameFROMFLAS
本文标题:Oracle11G 闪回技术
链接地址:https://www.777doc.com/doc-3969782 .html