《Oracle Database 11g闪回技术概述》由会员分享,可在线阅读,更多相关《Oracle Database 11g闪回技术概述(30页珍藏版)》请在金锄头文库上搜索。
1、2 第16章OracleDatabase11g闪回技术 本章要点 了解闪回技术的意义 掌握闪回表的使用 理解闪回删除的原理 掌握闪回删除的使用 掌握闪回版本查询的使用 掌握闪回事务查询的使用 掌握闪回数据库的使用 了解闪回数据归档与其他闪回技术的区别 掌握闪回数据归档区的创建与管理 掌握闪回数据归档的使用 3 16 1闪回表 FlashbackTable 闪回表技术用于恢复表中的数据 可以在线进行闪回表操作 闪回表实质上是将表中的数据恢复到指定的时间点 TIMESTAMP 或系统改变号 SCN 上 并将自动恢复索引 触发器和约束等属性 同时数据库保持联机 从而增加整体的可用性 闪回表需要用到数
2、据库中的撤消表空间 可以通过SHOWPARAMETERundo语句查看与撤消表空间相关的信息 4 16 1闪回表 FlashbackTable 例16 1 查看当前数据库中与撤消表空间相关的设置 如下 SQL SHOWPARAMETERundo NAMETYPEVALUE undo managementstringAUTOundo retentioninteger1200undo tablespacestringUNDOTBS1 5 16 1闪回表 FlashbackTable 进行闪回表操作需要使用FLASHBACKTABLE语句 其语法如下 FLASHBACKTABLE schema ta
3、bleTO SCN TIMESTAMP expr ENABLE DISABLE TRIGGERS 语法说明如下 schema 模式名 table name 表名 SCN 系统改变号 相对时间点而言 系统改变号比较难以理解 用户很难知道应该闪回到哪个SCN 而时间则显得明了得多 可以使用SCN TO TIMESTAMP函数将SCN转变为对应的时间 TIMESTAMP 时间戳 包括年月日时分秒 可以使用TIMESTAMP TO SCN函数将时间转变为对应的SCN Expr 指定一个值或表达式 用于表示时间点或SCN ENABLETRIGGERS 与表相关的触发器恢复后 默认为启用状态 DISABL
4、ETRIGGERS 与表相关的触发器恢复后 默认为禁用状态 默认情况下为此选项 6 16 1闪回表 FlashbackTable 例16 2 下面举例介绍如何使用FLASHBACKTABLE语句执行闪回表操作 1 在system用户下创建表mytest 如下 SQL CREATETABLEmytest idNUMBER 表已创建 2 向mytest表中插入一条记录 并使用COMMIT命令提交 如下 SQL INSERTINTOmytestVALUES 1 已创建1行 SQL COMMIT 提交完成 7 16 1闪回表 FlashbackTable 3 查询系统当前时间 用于闪回时使用 如下 S
5、QL SELECTTO CHAR SYSDATE YYYY MM DDHH24 MI SS FROMdual TO CHAR SYSDATE YY 2009 10 0610 44 47 4 再次向mytest表中添加一条记录 并使用COMMIT命令提交 如下 SQL INSERTINTOmytestVALUES 2 已创建1行 SQL COMMIT 提交完成 5 启用mytest表的行移动功能 如下 SQL ALTERTABLEmytestENABLEROWMOVEMENT 表已更改 8 16 1闪回表 FlashbackTable 6 使用FLASHBACKTABLE命令 将mytest表中
6、的数据闪回到第3步查询出来的时间点上 如下 SQL FLASHBACKTABLEmytestTOTIMESTAMP2TO TIMESTAMP 2009 10 0610 44 47 YYYY MM DDHH24 MI SS 闪回完成 7 查询mytest表中的数据 观察其数据是否闪回到了时间点2009 10 0610 44 47上 如下 SQL SELECT FROMmytest ID 1 9 16 2闪回删除 FlashbackDrop 闪回删除技术用于恢复已经被用户删除 Drop 的数据库对象 这需要使用到Oracle数据库系统中的回收站机制 10 16 2 1回收站 RecycleBin
7、1 禁用与启用回收站Oracle系统中的回收站在默认情况下是启用状态的 可以通过设置初始化参数recyclebin的值来修改回收站的状态 这需要使用ALTERSESSION语句 其语法形式如下 ALTERSESSIONSETrecyclebin ON OFF 如果回收站处于禁用 OFF 状态 则被删除的数据库对象无法保存到回收站中 只能是被彻底删除 11 16 2 1回收站 RecycleBin 2 查看回收站中的信息查看回收站中的信息时 普通用户可以使用SHOWRECYCLEBIN命令 也可以使用user recyclebin数据字典 而数据库管理员则可以使用dba recyclebin数据
8、字典 下面使用DESC命令了解user recyclebin数据字典的结构 如下 参见教材P352 12 16 2 1回收站 RecycleBin 3 清除回收站中的对象清除回收站中的对象需要使用PURGE命令 其语法形式如下 PURGE TABLESPACEtablespace name USERuser name TABLEtable name INDEXindex name RECYCLEBIN DBA RECYCLEBIN 13 16 2 2使用闪回删除 闪回删除的语法形式如下 FLASHBACKTABLEtable nameTOBEFOREDROP RENAMETOnew table
9、 name 其中 table name可以使用表的原名 也可以使用表在回收站中的名称 如果表的原名相同 则在使用原名进行闪回删除操作时 默认还原最近一次删除的表 表被还原后 默认情况下使用其原名 而如果该名称已经存在 则需要在还原该表时对其重命名 这时需要使用RENAMETO子句 14 16 2 2使用闪回删除 例16 5 在scott用户下创建表mytest2并删除该表后 查询该表在回收站中的信息 如下 参见教材P354再使用FLASHBACK语句还原该表 并对其重命名 如下 SQL FLASHBACKTABLE BIN 4VMKTgAvRVG84DxR7n cFg 0 2TOBEFORED
10、ROP3RENAMETOmytest2 new 闪回完成 使用SELECT语句查询mytest2 new表 检查是否成功还原 如下 SQL SELECT FROMmytest2 new ID 1 15 16 3闪回版本查询 FlashbackVersionQuery 闪回版本查询技术用于查询某段时间内对表的操作记录 主要针对INSERT UPDATE和DELETE操作 闪回版本查询的语法形式如下 SELECTcolumn name FROMtable nameVERSIONS BETWEENSCN TIMESTAMPexpr MINVALUEANDexpr MAXVALUE ASOFSCN T
11、IMESTAMPexpr 16 16 3闪回版本查询 FlashbackVersionQuery 例16 6 在scott用户下创建表myversion 并对该表进行一系列增删改操作 如下 参见教材P355上述操作在每次DML操作后都使用COMMIT命令进行提交 接下来使用闪回版本查询获取myversion表上的所有操作记录 如下 参见教材P356在上述查询中使用了FlashbackVersionQuery的部分伪列 其中 versions operation表示对该行执行的操作 其值可为I U和D 分别对应INSERT UPDATE和DELETE versions starttime表示对该
12、行进行改动时的起始时间戳 versions startscn表示起始SCN versions endtime表示此次改动不再有效时的结束时间戳 versions endscn表示结束SCN 17 16 4闪回事务查询 FlashbackTransactionQuery 闪回事务查询是对闪回版本查询的扩充 通过它可以审计事务甚至撤消一个已提交的事务 在使用闪回版本查询时 闪回操作针对的是表 而使用闪回事务查询则针对flashback transaction query视图 该视图的结构如下 参见教材P356 18 16 4闪回事务查询 FlashbackTransactionQuery 例16
13、7 上一节介绍了闪回版本查询的使用 通过闪回版本查询可以了解表的操作记录 这些操作记录都是已提交的事务 如果需要撤消某个事务 可以使用如下步骤 1 使用闪回版本查询获取事务ID 这需要用到FlashbackVersionQuery的另外一个伪列 versions xid 例如获取myversion表上的事务ID 如下 参见教材P357 2 使用闪回事务查询需要用户具有SELECTANYTRANSACTION权限 下面使用system用户为scott用户授予该权限 参见教材P357 3 在scott用户下使用闪回事务查询获取010018003F050000对应的事务信息 如下 参见教材P357查
14、询结果中的undo sql字段很明确地给出了撤消事务的语句 也就是说如果想要撤消删除 记录3 的事务 只需要执行如下语句即可 insertinto SCOTT MYVERSION ID TEXT values 3 记录3 19 16 5闪回数据库 FlashbackDatabase 闪回数据库 实际上就是将数据库回退到过去的一个时间点或SCN上 从而实现整个数据库的恢复 这种恢复不需要通过备份 所以应用起来更方便 更快速 20 16 5 1闪回数据库设置 闪回数据库是依赖于闪回日志的 Oracle系统提供了一组闪回日志 记录了数据库的前滚操作 首先需要了解如下几个参数 db recovery
15、file dest 闪回日志的存放位置 db recovery file dest size 存放闪回日志的空间 即恢复区 的大小 db flashback retention target 闪回数据的保留时间 其单位为分 默认值为1440 即一天 21 16 5 1闪回数据库设置 启用闪回数据库功能需要使用如下语法形式 ALTERDATABSEFLASHBACKON OFF 启用闪回数据库功能的步骤如下 1 确定当前数据库的日志模式是否为归档模式 2 设置闪回数据库功能为启用状态 3 检查闪回数据库功能是否已经启用 如下 SQL SELECTflashback onFROMv databas
16、e FLASHBACK ON YES从查询结果可以看出 闪回数据库功能已经成功启用 22 16 5 2使用闪回数据库 启用闪回数据库功能后 就可以对数据库进行闪回操作了 使用闪回数据库 需要用户具有SYSDBA权限 闪回数据库的语法形式如下 FLASHBACK STANDBY DATABASE database name TO BEFORE SCN TIMESTAMPexpr 语法说明如下 STANDBY 表示恢复一个备用数据库 如果没有相应的备用数据库 则系统返回一个错误 如果不指定该选项 则所恢复的数据库可以是主数据库 也可以是备用数据库 database name 数据库名称 默认为当前数据库 SCN 指定一个SCN TIMESTAMP 指定一个时间戳 Expr 指定一个值或表达式 BEFORE 恢复到指定SCN或时间戳之前 23 16 5 2使用闪回数据库 例16 8 Oracle数据库闪回的示例如下 1 在scott用户下创建两个表student1与student2 并向这两个表添加数据 注意使用COMMIT命令进行提交 2 获取系统当前的时间 供闪回数据库时使用 3 删除s