1、第第12章章 闪回技术闪回技术Oracle数据库应用技术主要内容主要内容p闪回技术介绍p闪回查询p闪回版本查询p闪回事务查询p闪回表p闪回删除p闪回数据库 Oracle数据库应用技术12.1 闪回技术介绍闪回技术介绍p闪回基本概念p闪回技术分类Oracle数据库应用技术基本概念基本概念pOracle 9i实现了基于回滚段的闪回查询(Flashback Query)技术,即从回滚段中读取一定时间内对表进行操作的数据,恢复错误的DML操作。p在Oracle 11g中,除提高了闪回查询功能,实现了闪回版本查询、闪回事务查询外,还实现了闪回表、闪回删除和闪回数据库的功能。p闪回技术是数据库恢复技术历史
2、上一次重大的进步,从根本上改变了数据恢复。p采用闪回技术,可以针对行级和事务级发生过变化的数据进行恢复,减少了数据恢复的时间,而且操作简单,通过SQL语句就可以实现数据的恢复,大大提高了数据库恢复的效率。 Oracle数据库应用技术闪回技术分类闪回技术分类p闪回查询(Flashback Query):查询过去某个时间点或某个SCN值时表中的数据信息;p闪回版本查询(Flashback Version Query):查询过去某个时间段或某个SCN段内表中数据的变化情况;p闪回事务查询(Flashback Transaction Query):查看某个事务或所有事务在过去一段时间对数据进行的修改;
3、p闪回表(Flashback Table):将表恢复到过去的某个时间点或某个SCN值时的状态;p闪回删除(Flashback Drop):将已经删除的表及其关联对象恢复到删除前的状态;p闪回数据库(Flashback Database):将数据库恢复到过去某个时间点或某个SCN值时的状态。Oracle数据库应用技术12.2 闪回查询闪回查询p闪回查询的概念p闪回查询操作Oracle数据库应用技术12.2.1闪回查询的概念闪回查询的概念闪回查询是指利用数据库回滚段存放的信息查看指定表中过去某个时间点的数据信息,或过去某个时间段数据的变化情况,或某个事务对该表的操作信息等。为了使用闪回查询功能,需
4、要启动数据库撤销表空间来管理回滚信息。 与撤销表空间相关的参数包括 : UNDO_MANAGEMENT:指定回滚段的管理方式指定回滚段的管理方式,如如果设置为果设置为AUTO,则采用撤销表空间自动管理回滚信息则采用撤销表空间自动管理回滚信息; UNDO_TABLESPACE:指定用于回滚信息自动管理的:指定用于回滚信息自动管理的撤销表空间名;撤销表空间名; UNDO_RETENTIOIN:指定回滚信息的最长保留时间。:指定回滚信息的最长保留时间。 Oracle数据库应用技术12.2.2闪回查询操作闪回查询操作闪回查询可以返回过去某个时间点已经提交事务操作的结果。基本语法:SELECT colu
5、mn_name,FROM table_nameAS OF SCN|TIMESTAMP expressionWHERE condition 基于AS OF TIMESTAMP的闪回查询 基于AS OF SCN的闪回查询 Oracle数据库应用技术为方便测试,需要打开时间显示SQLALTER SESSION SET NLS_DAT_FORMAT=YYY-MM-DD HH24:MI:SS;SQLSET TIME ON;Oracle数据库应用技术20:57:35 SQLSELECT empno,sal FROM scott.emp WHERE empno=7369;EMPNO SAL- -7369 8
6、0020:57:39 SQLUPDATE scott.emp SET sal=2000 WHERE empno=7369;20:57:59 SQLCOMMIT;20:58:03 SQLUPDATE scott.emp SET sal=2500 WHERE empno=7369;20:58:54 SQLCOMMIT;Oracle数据库应用技术20:58:57 SQLSELECT empno,sal FROM scott.emp WHERE empno=7369;EMPNO SAL- -7369 250021:01:02 SQLSELECT empno,sal FROM scott.emp AS
7、OF TIMESTAMP SYSDATE-1/24 WHERE empno=7369;EMPNO SAL- -7369 80021:02:43 SQLSELECT empno,sal FROM scott.emp AS OF TIMESTAMP TO_TIMESTAMP(2012-11-22 20:58:10,YYYY-MM-DD HH24:MI:SS) WHERE empno=7369;EMPNO SAL- -7369 2000Oracle数据库应用技术下面是一个基于AS OF SCN的闪回查询示例。21:08:34 SQLSELECT current_scn FROM v$database
8、;CURRENT_SCN-145560021:08:37 SQLSELECT empno,sal FROM scott.emp WHERE empno=7369;EMPNO SAL- -7369 2500Oracle数据库应用技术21:09:08 SQLUPDATE scott.emp SET sal=5000 WHERE empno=7369;21:09:26 SQLCOMMIT;21:09:44 SQLSELECT current_scn FROM v$database;CURRENT_SCN-145563421:09:53 SQLSELECT empno,sal FROM scott.e
9、mp AS OF SCN 1455600 WHERE empno=7369;EMPNO SAL- -7369 2500Oracle数据库应用技术12.3 闪回版本查询闪回版本查询p闪回版本查询的概念p闪回版本查询操作Oracle数据库应用技术12.3.1闪回版本查询的概念闪回版本查询的概念闪回版本查询可以查询一条记录在一段时间内的变化情况,即一条记录的多个提交版本信息。闪回版本查询的基本语法为:SELECT column_name, FROM table_nameVERSIONS BETWEEN SCN|TIMESTAMP MINVALUE|expression AND MAXVALUE|ex
10、pressionAS OF SCN|TIMESTAMP expression WHERE conditionOracle数据库应用技术在闪回版本查询的目标列中,可以使用下列伪列返回行的版本信息。VERSIONS_STARTTIME:基于时间的版本有效范围:基于时间的版本有效范围的下界。的下界。VERSIONS_STARTSCN:基于:基于SCN的版本有效范围的的版本有效范围的下界。下界。VERSIONS_ENDTIME:基于时间的版本有效范围的上:基于时间的版本有效范围的上界。界。VERSIONS_ENDSCN:基于:基于SCN的版本有效范围的上的版本有效范围的上界。界。VERSIONS_XI
11、D:操作的事务:操作的事务ID。VERSIONS_OPERATION:执行操作的类型,:执行操作的类型,I 表示表示INSERT,D 表示表示DELETE,U 表示表示UPDATE。Oracle数据库应用技术13.3.2闪回版本查询操作闪回版本查询操作下面是一个闪回版本查询示例。SQLUPDATE scott.emp SET sal=6000 WHERE empno=7844;SQLUPDATE scott.emp SET sal=6000 WHERE empno=7369;SQLUPDATE scott.emp SET sal=7000 WHERE empno=7369;SQLCOMMIT;
12、SQLUPDATE scott.emp SET sal=7500 WHERE empno=7369;SQLCOMMIT;Oracle数据库应用技术p可以基于VERSIONS BETWEEN TIMESTAMP进行闪回版本查询:nSQLSELECT versions_xid nXID,versions_starttime STARTTIME, nversions_endtime ENDTIME, nversions_operation OPERATION, salnFROM scott.emp VERSIONS BETWEEN nTIMESTAMP MINVALUE AND MAXVALUE n
13、WHERE empno=7369 ORDER BY STARTTIME;Oracle数据库应用技术p可以基于VERSIONS BETWEEN SCN进行闪回版本查询:nSQLSELECT versions_xid XID,versions_startscn nSTARTSCN, versions_endscn ENDSCN, nversions_operation OPERATION, salnFROM scott.emp VERSIONS BETWEEN SCN nMINVALUE AND MAXVALUE nWHERE empno=7369 ORDER BY STARTSCN;Oracle
14、数据库应用技术12.4 闪回事务查询闪回事务查询p闪回事务查询的概念p闪回事务查询操作Oracle数据库应用技术12.4.1闪回事务查询的概念闪回事务查询的概念p闪回事务查询可以返回在一个特定事务中行的历史数据及与事务相关的元数据,或返回在一个时间段内所有事务的操作结果及事务的元数据。Oracle数据库应用技术p在Oracle 11g数据库中,为了记录事务操作的详细信息,需要启动数据库的日志追加功能nSQLALTER DATABASE ADD SUPPLEMENTAL LOG DATA;p可以从FLASHBACK_TRANSATION_QUERY中查看撤销表空间中存储的事务信息Oracle数据
15、库应用技术12.4.2闪回事务查询操作闪回事务查询操作p通常,将闪回事务查询与闪回版本查询相结合,先利用闪回版本查询获取事务ID及事务操作结果,然后利用事务ID查询事务的详细操作信息。 nSQLSELECT versions_xid,sal FROM scott.emp VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE WHERE empno=7844; nSQLSELECT operation,undo_sql FROM FLASHBACK_TRANSACTION_QUERY WHERE xid=HEXTORAW(04001E002E010000Oracl
16、e数据库应用技术12.5 闪回表闪回表p闪回表是将表及附属对象一起恢复到以前的某个时刻的状态。闪回表的操作实际上是对表进行DML操作。p要对表进行闪回操作,需要启动表的ROW MOVEMENT特性,其方法为:nALTER TABLE table ENABLE ROW MOVEMENT;p闪回表操作的基本语法为:nFLASHBACK TABLE schema.table TO SCN|TIMESTAMP expression ENABLE|DISABLE TRIGGERSOracle数据库应用技术12.6 闪回删除闪回删除p闪回删除的概念p闪回删除操作 Oracle数据库应用技术12.6.1闪回
17、删除的概念闪回删除的概念p闪回删除可恢复使用DROP TABLE语句删除的表,是一种对意外删除的表的恢复机制。p在Oracle 11g数据库中,当执行DROP TABLE操作时,并不立即回收表及其关联对象的空间,而是将它们重命名后放入一个称为“回收站”的逻辑容器中保存,直到用户决定永久删除它们或存储该表的表空间存储空间不足时,表才真正被删除。 p为了使用闪回删除技术,必须开启数据库的“回收站”。 Oracle数据库应用技术p启动“回收站” n要使用闪回删除功能,需要启动数据库的要使用闪回删除功能,需要启动数据库的“回收站回收站”,即将参数即将参数RECYCLEBIN设置为设置为ON。在默认情况
18、下。在默认情况下“回收站回收站”已启动。已启动。 nSQLSHOW PARAMETER RECYCLEBIN nSQLALTER SYSTEM SET RECYCLEBIN=ON;Oracle数据库应用技术p查看“回收站” n当执行当执行DROP TABLE操作时,表及其关联对象被命操作时,表及其关联对象被命名后保存在名后保存在“回收站回收站”中,可以通过查询中,可以通过查询USER_RECYCLEBIN,DBA_RECYCLEBIN视视图获得被删除的表及其关联对象信息。图获得被删除的表及其关联对象信息。nSQLDROP TABLE test;nSQLSELECT OBJECT_NAME,OR
19、IGINAL_NAME,TYPE FROM USER_RECYCLEBIN; Oracle数据库应用技术12.6.2闪回删除操作闪回删除操作p闪回删除的基本语法为nFLASHBACK TABLE schema.table TO BEFORE nDROP RENAME TO new_namep注意n只有采用本地管理的、非系统表空间中的表可以使用只有采用本地管理的、非系统表空间中的表可以使用闪回删除操作。闪回删除操作。 Oracle数据库应用技术p示例nSQLCREATE TABLE example( ID NUMBER PRIMARY KEY, NAME CHAR(20);nSQLINSERT
20、INTO example VALUES(1,BEFORE DROP);nSQLCOMMIT;nSQLDROP TABLE example;nSQLFLASHBACK TABLE example TO BEFORE DROP RENAME TO new_example;nSQLSELECT * FROM new_example;nID NAME - 1 BEFORE DROPOracle数据库应用技术12.7 闪回数据库闪回数据库p闪回数据库的概念p闪回数据库操作 Oracle数据库应用技术12.7.1闪回数据库的概念闪回数据库的概念闪回数据库技术是将数据库快速恢复到过去的某个时间点或SCN值时
21、的状态,以解决由于用户错误操作或逻辑数据损坏引起的问题。 闪回数据库操作不需要使用备份重建数据文件,而只需要应用闪回日志文件和归档日志文件。为了使用数据库闪回技术,需要预先设置数据库的闪回恢复区和闪回日志保留时间。闪回恢复区用于保存数据库运行过程中产生的闪回日志文件,而闪回日志保留时间是指闪回恢复区中的闪回日志文件保留的时间,即数据库可以恢复到过去的最大时间。Oracle数据库应用技术p闪回数据库操作的限制:n数据文件损坏或丢失等介质故障不能使用闪回数据库数据文件损坏或丢失等介质故障不能使用闪回数据库进行恢复。闪回数据库只能基于当前正常运行的数据进行恢复。闪回数据库只能基于当前正常运行的数据文
22、件;文件;n闪回数据库功能启动后,如果发生数据库控制文件重闪回数据库功能启动后,如果发生数据库控制文件重建或利用备份恢复控制文件,则不能使用闪回数据库;建或利用备份恢复控制文件,则不能使用闪回数据库;n不能使用闪回数据库进行数据文件收缩操作;不能使用闪回数据库进行数据文件收缩操作;n不能使用闪回数据库将数据库恢复到在闪回日志中可不能使用闪回数据库将数据库恢复到在闪回日志中可获得最早的获得最早的SCN之前的之前的SCN,因为闪回日志文件在一,因为闪回日志文件在一定条件下被删除,而不是始终保存在闪回恢复区中。定条件下被删除,而不是始终保存在闪回恢复区中。Oracle数据库应用技术p闪回数据库功能需
23、要满足的条件:n配置了数据库的快速恢复区。配置了数据库的快速恢复区。n数据库必须运行在归档模式。数据库必须运行在归档模式。n在数据库加载状态下启用数据库的在数据库加载状态下启用数据库的FLASHBACK特性。特性。n通过设置数据库参数通过设置数据库参数DB_FLASHBACK_RETENTION_TARGET,确,确定可以在多长时间内闪回数据库。定可以在多长时间内闪回数据库。Oracle数据库应用技术p设置数据库的归档模式 nSQL CONN SYS/TIGER AS SYSDBAnSQL ARCHIVE LOG LIST; nSQL SHUTDOWN IMMEDIATEnSQL STARTU
24、P MOUNTnSQL ALTER DATABASE ARCHIVELOG;nSQL ALTER DATABASE OPEN;nSQL ALTER SYSTEM ARCHIVE LOG START;nSQL ARCHIVE LOG LIST; Oracle数据库应用技术p设置数据库的闪回恢复区 n在在Oracle 11g数据库安装过程中,默认情况下已设数据库安装过程中,默认情况下已设置了数据库的闪回恢复区。置了数据库的闪回恢复区。n可以通过参数查询数据闪回恢复区及其空间大小。可以通过参数查询数据闪回恢复区及其空间大小。pSQL SHOW PARAMETER DB_RECOVERY_FILEOr
25、acle数据库应用技术p启动数据库FLASHBACK特性n为了使用闪回数据库,还需要启动数据库的为了使用闪回数据库,还需要启动数据库的FLASHBACK特性,生成闪回日志文件。在默认情况特性,生成闪回日志文件。在默认情况下,数据库的下,数据库的FLASHBACK特性是关闭的。特性是关闭的。n在数据库处于在数据库处于MOUNT状态时执行状态时执行ALTER DATABAE FLASHBACK ON命令,启动数据库的命令,启动数据库的FLASHBACK特性;特性;n需要通过参数需要通过参数DB_FLASHBACK_RETENTION_TARGET设置设置闪回日志保留时间,该参数默认值为闪回日志保留
26、时间,该参数默认值为1 440分钟,即分钟,即一天。一天。 Oracle数据库应用技术12.7.2闪回数据库操作闪回数据库操作闪回数据库基本语法为FLASHBACK STANDBY DATABASE database TOSCN|TIMESTAMP expression|BEFORE SCN|TIMESTAMPexpression参数说明STANDBY:指定执行闪回的数据库为备用数据库;:指定执行闪回的数据库为备用数据库;TO SCN:将数据库恢复到指定:将数据库恢复到指定SCN的状态;的状态;TO TIMESTAMP:将数据库恢复到指定的时间点;:将数据库恢复到指定的时间点;TO BEFOR
27、E SCN:将数据库恢复到指定:将数据库恢复到指定SCN的前一个的前一个SCN状态状态TO BEFORE TIMESTAMP:将数据库恢复到指定时间点:将数据库恢复到指定时间点前一秒的状态前一秒的状态。Oracle数据库应用技术p查询数据库系统当前时间和当前SCN。nSQLSELECT SYSDATE FROM DUAL;nSYSDATE - 2009-03-25 12:36:19 nSQLSELECT CURRENT_SCN FROM V$DATABASE;nCURRENT_SCN - 735884 Oracle数据库应用技术p查询数据库中当前最早的闪回SCN和时间。nSQLSELECT O
28、LDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME FROM V$FLASHBACK_DATABASE_LOG;nOLDEST_FLASHBACK_SCN LDEST_FLASHBACK_TI - - 730955 2009-03-25 10:26:50 Oracle数据库应用技术p改变数据库的当前状态。 nSQLSET TIME ONn12:37:38 SQLCREATE TABLE test_flashback( ID NUMBER,NAME CHAR(20);n12:37:45 SQLINSERT INTO test_flashback VALUES(1
29、,DATABASE);n12:37:52 SQLCOMMIT; Oracle数据库应用技术p进行闪回数据库恢复,将数据库恢复到创建表之前的状态。 n12:37:56 SQLSHUTDOWN IMMEDIATEn12:38:49 SQLSTARTUP MOUNT EXCLUSIVEn12:43:42 SQLFLASHBACK DATABASE TO TIMESTAMP(TO_TIMESTAMP(2009-3-25 11:00:00,YYYY-MM-DD HH24:MI:SS);n12:44:38 SQLALTER DATABASE OPEN RESETLOGS; Oracle数据库应用技术p验证数据库的状态(test_flashback表应该不存在)。n12:44:58 SQLSELECT * FROM test_flashback;nSELECT * FROM test_flashbackn *n第第 1 行出现错误行出现错误: nORA-00942: 表或视图不存在表或视图不存在 Oracle数据库应用技术总结总结p闪回查询操作p闪回版本查询操作p闪回事务查询操作p闪回表操作p闪回删除操作p闪回数据库操作