您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > oracle10g经典实战第9章 闪回操作和Undo
第9章闪回操作和Undo表空间9.1闪回操作闪回在Oracle9i就已经提出,在Oracle10g中,数据闪回功能更加完善,可以在不对数据库进行不完全恢复的情况下,对某一个指定的表进行恢复。9.1.1基本概念闪回操作使数据库中的实体显示或回到过去某一时间点,这样可以实现对历史数据的恢复。闪回数据库功能可以将Oracle数据库恢复到以前的时间点。传统方法是进行时间点恢复。然而,时间点恢复需要数小时甚至几天的时间。闪回数据库是进行时间点恢复的新方法。它能够快速将Oracle数据库恢复到以前的时间,以正确更正由于逻辑数据损坏或用户错误而引起的任何问题。当需要恢复时,可以将数据库恢复到错误前的时间点,并且只恢复改变的数据块。在Oracle10g中,闪回操作包括:(1)查询闪回(FlashbackQuery):查询过去某个指定时间、指定实体的数据,恢复错误的数据库更新、删除等。(2)表闪回(FlashbackTable):使表返回到过去某一时间的状态,可以恢复表、取消对表进行的修改。(3)删除闪回(FlashbackDrop):可以将删除的表重新恢复。(4)数据库闪回(FlashbackDatabase):可以将整个数据库回退到过去某个时间点。第9章闪回操作和Undo表空间9.1.2查询闪回Oracle查询闪回使管理员或用户能够查询过去某些时间点的任何数据,查看和重建因意外被删除或更改而丢失的数据。闪回查询管理简单,数据库可自动保存必要的信息,以在可配置时间内重新将数据恢复过去的状态。执行查询闪回操作时,需要使用两个时间函数:TIMESTAMP和TO_TIMESTAMP。其中,函数TO_TIMESTAMP的语法格式为:TO_TIMESTAMP(’timepoint’,’format’)其中:timepoint:表示某时间点。format:需要把timepoint格式化成何种格式。9.1.2查询闪回【例9.1】使用查询闪回恢复删除的数据。(1)查询表XS_JSJ中的数据:SQLSETTIMEON16:11:37SQLSELECT*FROMXS_JSJ;XHXMZYMXBCSSJZXFBZ061101王林计算机男1986-02-1050NULL061102程明计算机男1987-02-0150NULL061103王燕计算机女1985-10-0650NULL061104韦严平计算机男1986-08-2650NULL061106李方方计算机男1986-11-2050NULL061107李明计算机男1986-05-0154提前修完《数据结构》,并获学分061108林一帆计算机男1985-08-0552已提前修完一门课061109张强民计算机男1984-08-1150NULL061110张蔚计算机女1987-07-2250三好生061111赵琳计算机女1986-03-1850NULL061113严红计算机女1985-08-1148有一门功课不及格,待补考9.1.2查询闪回(2)删除表XS_JSJ中所有记录并提交。16:12:24SQLDELETEFROMXS_JSJ;16:13:15SQLCOMMIT;(3)进行查询回闪。16:14:12SQLSELECT*FROMXS_JSJASOFTIMESTAMPTO_TIMESTAMP('2006-5-3116:12:25','YYYY-MM-DDHH24:MI:SS');执行以上语句后,可以看到表中原来的数据。(4)将闪回中的数据重新插入XS_JSJ表中。16:16:21SQLINSERTINTOXS_JSJSELECT*FROMXS_JSJASOFTIMESTAMPTO_TIMESTAMP('2006-5-3116:12:25','YYYY-MM-DDHH24:MI:SS');9.1.3表闪回利用表闪回可以恢复表,取消对表所进行的修改。表闪回要求用户具有以下权限:(1)FLASHBACKANYTABLE权限或者是该表的Flashback对象权限。(2)有该表的SELECT、INSERT、DELETE、ALTER权限。(3)必须保证该表ROWMOVEMENT。Oracle10g的闪回表与Oracle9i的查询闪回功能类似,也是利用恢复信息(UndoInformations)对以前的一个时间点上的数据进行恢复。Oracle10g的表闪回有如下特性:(1)在线操作。(2)恢复到指定时间点或者SCN的任何数据。(3)自动恢复相关属性,如索引、触发器等。(4)满足分布式的一致性。(5)满足数据一致性,所有相关对象的一致性。9.1.3表闪回要实现表闪回,必须确保与撤销表空间有关的参数设置合理。撤销表空间相关参数为:UNDO_MANAGEMENT、UNDO_TABLESPACE和UNDO_RETENTION。在sql*plus中执行下面的语句显示撤销表空间的参数。SQLSHOWPARAMETERUNDONAMETYPEVALUEUndo_managementstringAUTOUndo_retentioninteger900Undo_tablespacestringUNDOTBS19.1.3表闪回在创建撤销表空间时,要考虑数据保存的时间长短、每秒产生的块数据量及块大小等。假如表空间大小用undo表示,那么:undo=UR×UPS×DB_BLOCK_SIZE+冗余量(1)UR:在undo中保持的最长时间数(秒),由数据库参数UNDO_RETENTION值决定。(2)UPS:在undo中每秒产生的数据块数量。表闪回的语法格式如下:FLASHBACKTABLE[schema.]table_nameTO{[BEFOREDROP[RENAMETOtable]]|[SCN|TIMESTAMP]expr[ENABLE|DISABLE]TRIGGERS}(1)schema:方案名称。(2)BEFOREDROP:表示恢复到删除之前。(3)RENAMETOtable:表示恢复时更换表名。(4)SCN:SCN是系统改变号,可以从flashback_transaction_query数据字典中查到。(5)TIMESTAMP:表示系统邮戳,包含年月日以及时分秒。(6)ENABLETRIGGERS:表示触发器恢复之后的状态为ENABLE。默认为DISABLE状态。9.1.3表闪回【例9.2】首先创建一个表,然后删除某些数据,再利用FlashbackTable命令恢复。(1)使用ADMIN登录sql*plus并创建表XS_KC1。SQLSETTIMEON20:26:59SQLCREATETABLEXS_KC1ASSELECT*FROMXS_KC;20:27:34SQLSELECT*FROMXS_KC1;查询的部分数据如图9.1所示。图9.1表XS_KC1中的部分数据9.1.3表闪回(2)删除学号为061113的学生选修课程的记录并提交。20:27:56SQLDELETEFROMXS_KC1WHEREXH=’061113’;20:28:11SQLCOMMIT;使用SELECT语句查询表XS_KC1,学号为061113的学生选修课程的记录已不存在。(3)使用表闪回进行恢复。20:28:13SQLALTERTABLEXS_KC1ENABLEROWMOVEMENT;20:28:59SQLFLASHBACKTABLEXS_KC1TOTIMESTAMPTO_TIMESTAMP(‘2006-5-3120:28:08’,’YYYY-MM-DDHH24:MI:SS’);上述例子中,我们采用TO_TIMESTAMP来指定恢复时间。我们还可以使用SCN,但是在操作中,时间比较容易掌握,而误操作时的SCN并不容易得知。Oracle使用TIMESTAMP_TO_SCN函数来实现将时间戳转换为SCN。注意:在每个系统中,返回的SCN是不一样的。9.1.4删除闪回1.删除闪回操作当用户对表进行DDL操作时,它是自动提交的。如果误删除了某个表,在Oracle10g版本之前只能使用日常的备份恢复数据了。现在,Oracle10g提供的删除闪回为数据库实体提供一个安全机制。与Windows文件删除功能相似,当用户删除一个表时,Oracle系统会将该表放到回收站中,直到用户决定永久删除它们,使用PURGE命令对回收站空间进行清除;或是出现表空间的空间不足时它们才会被删除。回收站是一个虚拟容器,用于存储所有被删除的对象。为了避免被删除的表与同类对象名称重复,被删除表(或者其他对象)放到回收站时,Oracle系统对被删除表(或对象名)进行了转换。转换后的名称格式如下:BIN$globalUID$SversionglobalUID是一个全局唯一的标识对象,长度为24个字符。它是Oracle内部使用的标识。$Sversion是数据库分配的版本号。9.1.4删除闪回数据字典USER_TABLES中的DROPPED列表示表是否被删除。使用SELECT语句查询。如图9.2所示,DRROPPED字段值为“YES”的TABLE_NAME均为转换后的名称。图9.2USER_TABLES获得的信息9.1.4删除闪回【例9.3】删除闪回的实现。(1)使用DELETE命令删除表XS_KC1SQLDELETETABLEXS_KC1;(2)查询数据字典信息。SQLSELECTOBJECT_NAME,ORIGINAL_NAME,TYPE,DROPTIMEFROMRECYCLEBIN;OBJECT_NAMEORIGINAL_NAMETYPEDROPTIMEBIN$IjiFX9AtQ5SpWpmM0UM5XQ==$0PK_XHINDEX2006-05-12:13:02:58BIN$zSYB+LfCTxSgq52R4siO9Q==$0XSTablePartition2006-05-12:13:02:58BIN$3TBJPuzeQQ+1hW7wZncMuQ==$0ATABLE2006-05-12:14:08:38BIN$rfkYjlyoRF6uK716UUwwBg==$0XS2TABLE2006-05-12:20:59:27BIN$BFGXZQMxRMmnIpJVT/mJ1w==$0XS_KC1TABLE2006-05-31:22:21:39(3)使用删除回闪从回收站恢复表XS_KC1。SQLFLASHBACKTABLEXS_KC1TOBEFOREDROP;如果不知道原表名,可以直接使用回收站中的名称进行闪回。9.1.4删除闪回2.回收站管理回收站可以提供误操作后进行恢复的必要信息,但是如果不经常对回收站的信息进行管理的话,磁盘空间会被长时间占用,因此要经常清除回收站中无用的东西。要清除回收站,可以使用PURGE命令。PURGE命令可以删除回收站中的表、表空间和索引,并释放表、表空间和索引所占用的空间。PURGE命令语法格式如下:PURGE{TABLESPACEtablespaceUSERuser|[TABLEtable|INDEXindex]|[RECYCLEBIN|DBA_RECYCLEBIN](1)TABLE指示清除回收站中的表。(2)INDEX指示清除回收站中的索引。(3)TABLESPACE指示清除回收站中的表空间。(4)RECYCLEBIN指的是当前用户需要清除的回收站。(5)RECYCLEBIN仅SYSDBA系统权限才能使用,此参数可使用户从Oracle系统回收站清除所有对象。9.1.4删除闪回【例9.4】查询当前用户回收站中的内容,再用PURGE清除。(1)查询回收站内容。SQLSELECTOBJECT_NAME,ORIGINAL_NAMEFROMUSER_RECYCLEBIN;OBJECT_NAMEORIGINAL_NAMEBIN$IjiFX9AtQ5SpWpmM0UM5XQ==$0PK_XHBIN$zSYB+LfCTxSgq52R4siO9Q==$0XSBIN$zSYB+LfCTxSgq52R4siO9Q==$0XSBIN$zSYB+LfCTxSgq52
本文标题:oracle10g经典实战第9章 闪回操作和Undo
链接地址:https://www.777doc.com/doc-3871163 .html