Oracle10gFlashback的相关实践_第1页
Oracle10gFlashback的相关实践_第2页
免费预览已结束,剩余2页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Oracle10g Flashback实践2008-11-21 16:52、概述 环境: RHEL4.5,oracle10.2.0.1Flashback 是 ORACLE 自 9i 就开始提供的一项特性,在 9i 中利用 oracle 查询 多版本一致的特点, 实现从回滚段中读取表一定时刻内操作过的数据, 可用来进 行数据比对,或者修正意外提交造成的错误数据,该项特性也被称为 FlashbackQuery。在 10g 中 Flashback 又得到了相当大的增强,利用 Recycle Bin(回收站) 和Flash Recovery Area(闪回区)的特性实现快速恢复删除表(Flashbac

2、k Table) 或做数据库时刻点恢复 (Flashback Database) 的功能。要使用 flashback 的特性,必须启用自动撤销治理表空间,不仅是 flashback query, 也包括 flashback table 和 flashback database ,而关于后两项还会有 些其它的附加条件,比如 flashback table 需要启用了 recycle bin( 回收站), flashback database 还要求必须启用了 flashback area( 闪回区)。SQL show parameter undoNAMETYPEVALUEundo_managem

3、entstringAUTOundo_retentioninteger10800undo_tablespacestringUNDOTBS1在一种情况下, undo 表空间能够确保 undo 中的数据在 undo_retention 指定时 刻过期前一定有效,确实是为 undo 表空间指定 Retention Guarantee ,指定之 后, oracle 关于 undo 表空间中未过期的 undo 数据可不能 覆盖,例如:SQL Alter tablespace undotbs1 retention guarantee;假如想禁止 undo 表空间 retention guarantee ,如

4、例: SQL Alter tablespace undotbs1retention noguarantee;二、Flashback Query(闪回查询)Flashback Query 是利用多版本读一致性的特性从 UNDO 表空间读取操作前的记 录数据!1、As of timestamp 的示例SQL create table tab_test as select rownum id from dba_users;SQL delete from tab_test where id commit; 假设当前距离删除数据差不多有 3 分钟左右的话:SQL select count(*) from

5、 tab_test as of timestamp sysdate-3/1440 where id insert into tab_test select * from tab_test as of timestamp sysdate-3/1440 whereid commit;提示: as of timestamp|scn 的语法是自 9iR2 后才开始提供支持,假如是 9iR1 版本,需要使用 DBMS_FLASHBA 包来应用 flashback query的特性。2、As of scn 的示例假如需要对多个相互有主外键约束的表进行恢复时,假如使用 as of timestamp 的方式

6、,可能会由于时刻点不统一的缘故造成数据选择或插入失败, 通过 scn 方 式则能够确保记录的约束一致性。猎取当前 scn 的方式特不多,比如:SQL select current_scn from v$database;SQL select dbms_flashback.get_system_change_number from dual;GET_SYSTEM_CHANGE_NUMBER191460SQL delete tab_test where id5;SQL commit;SQL select * from tab_test as of scn 191460;SQL insert int

7、o tab_test select * from tab_test as of scn 191460 whereid not in (select id from tab_test);SQL commit;事实上,Oracle 在内部差不多上使用 sen,即使你指定的是 as of timestamp , oracle 也会将其转换成 sen,系统时刻标记与 sen 之间存在一张表,即 SYS 下 的SMON_SCN_TIMESQL select scn,to_char(time_dp,yyyy-mm-dd hh24:mi:ss) time_dp fromsys.smon_scn_time;3

8、、Versions between 版本查询功能更加强大,通过 versions between 能够查看指定时刻段内 undo 表空间中 记录的不同版本(注意只包括被提交的记录)。版本查询过程中提供了多个伪列如下:VERSIONS_STARTSCN/VERSIONS_STARTT 录操作时的 sen 或时刻,假如为 空,表示该行记录是在查询范围外创建的。VERSIONS_ENDSCN/VERSIONS_END 记录失效时的 sen 或时刻,假如为空,讲 明记录当前时刻在当前表内存在,或者差不多被删除了,能够配合着VERSIONS_OPERATIO来看,假如 VERSIONS_OPERATIO

9、NS 为 D,讲明该列已 被删除,假如该列为空,则讲明记录在这段时刻无操作。VERSIONS_XID 亥操作的事务 IDVERSIONS_OPERATI对该行执行的操作: I表示insert , D表示delete , U表 示update。提示:关于索引键的 update 操作,版本查询可能会将其识不成两个 操作 DELETE 和INSERTSQL update tab_test set id=id+100 where id5;SQL eommit;SQL delete tab_test where id eommit;SQL insert into tab_test values (888

10、);SQL eommit;SQL seleet dbms_flashbaek.get_system_ehange_number from dual;GET_SYSTEM_CHANGE_NUMBER191611SQL seleetid,VERSIONS_XID,versions_startsen,to_ehar(VERSIONS_STARTTIME,yyyy-mm -ddhh24:mi:ss)VERSIONS_STARTTIME,versions_endsen,to_ehar(VERSIONS_ENDTIME,yyyy-mm-dd hh24:mi:ss) VERSIONS_ENDTIME,ver

11、sions_operation from tab_test versionsbetween sen 191460 and 191611 order by 3;4、Transaetion query 事务查询SQL seleet dbms_flashbaek.get_system_ehange_number from dual;GET_SYSTEM_CHANGE_NUMBER192329SQL delete tab_test where id rollbaek;SQL delete tab_test where id=5;SQL eommit;SQL seleet dbms_flashbaek.

12、get_system_ehange_number from dual;GET_SYSTEM_CHANGE_NUMBER192377SQL seleet xid,eommit_sen,eommit_timestamp,operation,undo_sql fromflashbaek_transaetion_query q where q.xid in( seleet versions_xid from tab_testversions between sen 192329 and 192329);注: 由于事务 ID 是保存在版本查询中, 因此我们需要通过版本查询来关联出 flashback 的

13、事务信息,这也是前面操作前要通过 dbms_flashback 包取 scn 的 缘故。5、DDL 的阻碍修改并提交过数据之后, 对表做过 DDL 操作,包括: drop/modify 列, move 表, drop 分区(假如有的话), truncate table/partition,这些操作会另 undo 表空间中的撤销数据失效,关于执行过这些操作的表应用 flashback query 会触 发ORA-01466 错误。另外一些表结构修改语句尽管并可不能阻碍到undo 表空间中的撤销记录,但有可能因表结构修改导致 undo 中重做记录无法应用的情况, 比如关于增加了约束, 而 flas

14、hback query 查询出的 undo 记录差不多不符合新 建的约束条件,那个时候直接恢复显然不可能成功,你要么临时 disable 约束, 要么通过适当逻辑,对要恢复的数据进行处理之后,再执行恢复。另外,flashback query 对 v$tables,x$tables等动态性能视图无效,只是关于 dba_*,all_*,user_* 等数据字典是有效的。同时该特性也完全支持访问远端 数据库,比如:select * from tbldblink as of scn 360;的形式。三、 Flashback Table( 闪回表)1、从 RECYCLEBI 中恢复要恢复 recycle

15、bin 中的表,注意语句如下: Flashback table objName to before drop,那个 obj_name 即能够是表名,也能够是 recyclebin 中的对象表( 支持同时操作多个表,表名之间以逗号分隔即可, 要记住单个 flashback table 是在同一个事务中,因此这些表的恢复操作要么都成功要么都失败 ) ,由于该项 功能是恢复被删除表,因此官方对其还有另外一称谓:flashback drop。系统参数 recyclebin 默认是 on,即启用了回收站功能,能够在 session 或 system 级 不动态更改。每一个用户都会有一个自己的 recycle bin 。SQL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论