您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > 第16章Oracle资料学习
2第16章OracleDatabase11g闪回技术本章要点:了解闪回技术的意义。掌握闪回表的使用。理解闪回删除的原理。掌握闪回删除的使用。掌握闪回版本查询的使用。掌握闪回事务查询的使用。掌握闪回数据库的使用。了解闪回数据归档与其他闪回技术的区别。掌握闪回数据归档区的创建与管理。掌握闪回数据归档的使用。316.1闪回表(FlashbackTable)闪回表技术用于恢复表中的数据,可以在线进行闪回表操作。闪回表实质上是将表中的数据恢复到指定的时间点(TIMESTAMP)或系统改变号(SCN)上,并将自动恢复索引、触发器和约束等属性,同时数据库保持联机,从而增加整体的可用性。闪回表需要用到数据库中的撤消表空间,可以通过SHOWPARAMETERundo语句查看与撤消表空间相关的信息。416.1闪回表(FlashbackTable)【例16.1】查看当前数据库中与撤消表空间相关的设置,如下:SQLSHOWPARAMETERundo;NAMETYPEVALUE-------------------------------------------------------undo_managementstringAUTOundo_retentioninteger1200undo_tablespacestringUNDOTBS1516.1闪回表(FlashbackTable)进行闪回表操作需要使用FLASHBACKTABLE语句,其语法如下:FLASHBACKTABLE[schema.]tableTO{{SCN|TIMESTAMP}expr[{ENABLE|DISABLE}TRIGGERS]};语法说明如下。schema:模式名。table_name:表名。SCN:系统改变号。相对时间点而言,系统改变号比较难以理解,用户很难知道应该闪回到哪个SCN,而时间则显得明了得多。可以使用SCN_TO_TIMESTAMP函数将SCN转变为对应的时间。TIMESTAMP:时间戳,包括年月日时分秒。可以使用TIMESTAMP_TO_SCN函数将时间转变为对应的SCN。Expr:指定一个值或表达式,用于表示时间点或SCN。ENABLETRIGGERS:与表相关的触发器恢复后,默认为启用状态。DISABLETRIGGERS:与表相关的触发器恢复后,默认为禁用状态。默认情况下为此选项。616.1闪回表(FlashbackTable)【例16.2】下面举例介绍如何使用FLASHBACKTABLE语句执行闪回表操作。(1)在system用户下创建表mytest,如下:SQLCREATETABLEmytest(idNUMBER);表已创建。(2)向mytest表中插入一条记录,并使用COMMIT命令提交,如下:SQLINSERTINTOmytestVALUES(1);已创建1行。SQLCOMMIT;提交完成。716.1闪回表(FlashbackTable)(3)查询系统当前时间,用于闪回时使用,如下:SQLSELECTTO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI:SS')FROMdual;TO_CHAR(SYSDATE,'YY-------------------2009-10-0610:44:47(4)再次向mytest表中添加一条记录,并使用COMMIT命令提交,如下:SQLINSERTINTOmytestVALUES(2);已创建1行。SQLCOMMIT;提交完成。(5)启用mytest表的行移动功能,如下:SQLALTERTABLEmytestENABLEROWMOVEMENT;表已更改。816.1闪回表(FlashbackTable)(6)使用FLASHBACKTABLE命令,将mytest表中的数据闪回到第3步查询出来的时间点上,如下:SQLFLASHBACKTABLEmytestTOTIMESTAMP2TO_TIMESTAMP('2009-10-0610:44:47','YYYY-MM-DDHH24:MI:SS');闪回完成。(7)查询mytest表中的数据,观察其数据是否闪回到了时间点2009-10-0610:44:47上,如下:SQLSELECT*FROMmytest;ID----------1916.2闪回删除(FlashbackDrop)闪回删除技术用于恢复已经被用户删除(Drop)的数据库对象,这需要使用到Oracle数据库系统中的回收站机制。1016.2.1回收站(RecycleBin)1.禁用与启用回收站Oracle系统中的回收站在默认情况下是启用状态的,可以通过设置初始化参数recyclebin的值来修改回收站的状态,这需要使用ALTERSESSION语句,其语法形式如下:ALTERSESSIONSETrecyclebin=ON|OFF;如果回收站处于禁用(OFF)状态,则被删除的数据库对象无法保存到回收站中,只能是被彻底删除。1116.2.1回收站(RecycleBin)2.查看回收站中的信息查看回收站中的信息时,普通用户可以使用SHOWRECYCLEBIN命令,也可以使用user_recyclebin数据字典,而数据库管理员则可以使用dba_recyclebin数据字典。下面使用DESC命令了解user_recyclebin数据字典的结构,如下:参见教材P3521216.2.1回收站(RecycleBin)3.清除回收站中的对象清除回收站中的对象需要使用PURGE命令,其语法形式如下:PURGE{[TABLESPACEtablespace_name[USERuser_name]]|[TABLEtable_name|INDEXindex_name]|[RECYCLEBIN|DBA_RECYCLEBIN]};1316.2.2使用闪回删除闪回删除的语法形式如下:FLASHBACKTABLEtable_nameTOBEFOREDROP[RENAMETOnew_table_name];其中,table_name可以使用表的原名,也可以使用表在回收站中的名称。如果表的原名相同,则在使用原名进行闪回删除操作时,默认还原最近一次删除的表。表被还原后,默认情况下使用其原名,而如果该名称已经存在,则需要在还原该表时对其重命名,这时需要使用RENAMETO子句。1416.2.2使用闪回删除【例16.5】在scott用户下创建表mytest2并删除该表后,查询该表在回收站中的信息,如下:参见教材P354再使用FLASHBACK语句还原该表,并对其重命名,如下:SQLFLASHBACKTABLEBIN$4VMKTgAvRVG84DxR7n+cFg==$02TOBEFOREDROP3RENAMETOmytest2_new;闪回完成。使用SELECT语句查询mytest2_new表,检查是否成功还原,如下:SQLSELECT*FROMmytest2_new;ID----------11516.3闪回版本查询(FlashbackVersionQuery)闪回版本查询技术用于查询某段时间内对表的操作记录,主要针对INSERT、UPDATE和DELETE操作。闪回版本查询的语法形式如下:SELECTcolumn_name[,...]FROMtable_nameVERSIONS{BETWEENSCN|TIMESTAMPexpr|MINVALUEANDexpr|MAXVALUE|ASOFSCN|TIMESTAMPexpr};1616.3闪回版本查询(FlashbackVersionQuery)【例16.6】在scott用户下创建表myversion,并对该表进行一系列增删改操作,如下:参见教材P355上述操作在每次DML操作后都使用COMMIT命令进行提交。接下来使用闪回版本查询获取myversion表上的所有操作记录。如下:参见教材P356在上述查询中使用了FlashbackVersionQuery的部分伪列,其中,versions_operation表示对该行执行的操作,其值可为I、U和D,分别对应INSERT、UPDATE和DELETE;versions_starttime表示对该行进行改动时的起始时间戳(versions_startscn表示起始SCN);versions_endtime表示此次改动不再有效时的结束时间戳(versions_endscn表示结束SCN)。1716.4闪回事务查询(FlashbackTransactionQuery)闪回事务查询是对闪回版本查询的扩充,通过它可以审计事务甚至撤消一个已提交的事务。在使用闪回版本查询时,闪回操作针对的是表,而使用闪回事务查询则针对flashback_transaction_query视图,该视图的结构如下:参见教材P3561816.4闪回事务查询(FlashbackTransactionQuery)【例16.7】上一节介绍了闪回版本查询的使用,通过闪回版本查询可以了解表的操作记录,这些操作记录都是已提交的事务。如果需要撤消某个事务,可以使用如下步骤。(1)使用闪回版本查询获取事务ID,这需要用到FlashbackVersionQuery的另外一个伪列——versions_xid,例如获取myversion表上的事务ID,如下:参见教材P357(2)使用闪回事务查询需要用户具有SELECTANYTRANSACTION权限,下面使用system用户为scott用户授予该权限:参见教材P357(3)在scott用户下使用闪回事务查询获取010018003F050000对应的事务信息,如下:参见教材P357查询结果中的undo_sql字段很明确地给出了撤消事务的语句,也就是说如果想要撤消删除“记录3”的事务,只需要执行如下语句即可:insertintoSCOTT.MYVERSION(ID,TEXT)values('3','记录3');1916.5闪回数据库(FlashbackDatabase)闪回数据库,实际上就是将数据库回退到过去的一个时间点或SCN上,从而实现整个数据库的恢复,这种恢复不需要通过备份,所以应用起来更方便、更快速。2016.5.1闪回数据库设置闪回数据库是依赖于闪回日志的,Oracle系统提供了一组闪回日志,记录了数据库的前滚操作。首先需要了解如下几个参数。db_recovery_file_dest:闪回日志的存放位置。db_recovery_file_dest_size:存放闪回日志的空间(即恢复区)的大小。db_flashback_retention_target:闪回数据的保留时间,其单位为分,默认值为1440,即一天。2116.5.1闪回数据库设置启用闪回数据库功能需要使用如下语法形式:ALTERDATABSEFLASHBACKON|OFF;启用闪回数据库功能的步骤如下。(1)确定当前数据库的日志模式是否为归档模式(2)设置闪回数据库功能为启用状态(3)检查闪回数据库功能是否已经启用,如下:SQLSELECTflashback_onFROMv$database;FLASHBACK_ON------------------YES从查询结果可以看出,闪回数据库功能已经成功启用。2216.5.2使用闪回数据库启用闪回数据库功能后,就可以对数据库进行闪回操作了。使用闪回数据库,需要用户具有SYSDBA权限。闪回数据库的语法形式如下:FLASHBACK[STANDBY]DATABASE[database_name][TO[BEFORE]SCN|TIMESTAMPexpr];语法说明如下。STANDBY:表示恢复一个备用数据库,如果没有相应的备用数据库,
本文标题:第16章Oracle资料学习
链接地址:https://www.777doc.com/doc-14291 .html