Oracle数据库数据恢复方法的研究.doc_第1页
Oracle数据库数据恢复方法的研究.doc_第2页
Oracle数据库数据恢复方法的研究.doc_第3页
Oracle数据库数据恢复方法的研究.doc_第4页
Oracle数据库数据恢复方法的研究.doc_第5页
免费预览已结束,剩余10页可下载查看

下载本文档

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

文档简介

Oracle数据库数据恢复方法的研究第31卷VoL31第13期l3计算机工程ComputerEngineering2005年7月July2005?软件技术与舅【摈库?文章缡号:100o_3428(2oo5)13_o07503文献标识码;A中圈分类号:TP311Oracle数据库数据恢复方法的研究徐吉,龚正良,万锋,杨泽平(华东理工大学信息学院,上海200237)摘要:通过对Oracle数据库物理结构和逻辑结构的分析,给出了Oracle控制文件,数据文件和日志文件的文件格式,同时给出了一个文件级的Oracle数据库数据恢复方法.关健词:数据库;数据恢复;控制文件;数据文件;日志文件ResearchonDataRecoveryofOracleDatabaseXUji,GONGZhengliang,WANFeng,YANGZeping(SchoolofInformation,EastChinaUniversityofScience&Technology,Shanghai200237)AbstractThispaperpresentsnotonlyamethodtOrecoverdatafromdamagedOracledatabasebutalsodetailsanalysisofcontrolfile,datafileandlogfilethroughanalyzinglogicalandphysicalstructureofOracledatabase.Keywords|Database;Datarecovery;Controlfile;Datafile;Logfile1Oracle数据库结构分析Oracle数据库结构包括逻辑结构和物理结构.逻辑结构指整个DBMS的逻辑组织形式;而物理结构主要是指数据库物理文件的数据组织方式.1.1Oracle数据库的逻辑结构Oracle数据库逻辑结构主要涉及表空间,段,盘区(extent),Oracle数据块和模式对象等概念.一个数据库包含多个表空间,表空间物理地存储表空间中全部逻辑结构的数据.每个Oracle数据库包含一个名为System的表空间.此表空间包含了整个数据库的数据字典表,系统表和存储的PL/SQL程序单元(过程,函数,包和触发器)的全部存储数据,对于文件级的数据恢复至关重要,在本文后续内容中还会重点描述System表空间中对数据恢复有用的几个系统表的表结构.Oracle数据库中一个表空间对应一个或多个物理数据文件,但一个数据文件只可与一个表空间相联系.Oracle通过段,盘区和数据块这些数据结构更细地控制磁盘空间的使用.一个表空间通常由数据段,索引段,回滚段和临时段4个段构成,而一个段通常由多个盘区构成,一个盘区是数据库存储空间分配的一个逻辑单位,它由连续数据块所组成.Oracle数据块由一个或多个操作系统文件块组成,它是OracleI/O操作的最小数据单元.1.2Oracle数据库的物理结构Oracle数据库的控制文件,数据文件和日志文件对数据恢复是至关重要的,尽管Oracle数据库中还涉及到参数文件,跟踪文件等物理文件.控制文件记录了整个数据库的结构信息,称它为元数据库(MetaDatabase)信息.数据文件是存放数据的实体文件,它存放了数据库中的相关对象(如表,索引,簇等),用户的表数据就存放在数据文件中.日志文件则是用来记录用户操作事务的系统文件.1.2.1控制文件的分析控制文件记录数据库的框架信息,以Oracle特有的形式存放.控制文件包含以下数据库信息:数据库的名字,数据库创建时的时间戳,相关的数据文件以及联机日志文件的名字和位置,表空间的信息,数据文件脱机的范围(OffiineRange),归档日志文件的名字和位置,备份设置和备份信息,备份数据文件和重做日志文件信息,数据文件复制信息,检查点和日志序列等信息.虽然控制文件本身并不记录用户表数据,但是详细地了解控制文件的内容对于数据恢复是十分重要的.每个控制文件通常由一个文件头块和多个逻辑块组成.文件头块(控制文件的第一个逻辑块)仅仅记录了该控制文件的逻辑块大小以及该控制文件所包含的逻辑块数量.而逻辑块通常由块头,块中数据,块尾3部分构成.块头中包含的信息见表1.表1块头中包含信息字段名描述BlockType块类型,表示此逻辑块已用否RDBA逻辑块块号,也可称为块的相对地址SCN系统修改号,用来实现块的逻辑时钟Sequence块序列号Checksum块数据的校验和而块尾包含了块序列号和块类型等信息.Oracle将所有的数据库框架信息格式化成DATABASEENTRY,CHECKPOINTPROGRESS,RED0THREAD,L0GFILE,DATAFILE,DBFILE,1:ABLESPACE,L0GFILEHIST0RY,ARCHIVEDL0G,BACKUPSET,BACKUPPIECE,BAcKuPDATAFILE等2O余种结构记录存放在控制文件的逻辑块中.其中对于数据恢复重要的记录结构分析如下:DATABASEENTRY,I0GF1IE,DATAFILEDBFlLE基金项目:国家863计划基金资助项目(2002AA142060)作者筒介:徐吉(198l一),男,硕士生,主研方向:数据库,软件工程;龚正良,副教授;万锋,杨泽平,硕士定稿日期:20040626E-mail:jeexusina,corn和结构中包含信息分别见表2表5.衰2DATABASEENTRY鳍构信.I衰字段名描述SystemVersionOracle的版本号Creationimestamp记录的创建时间DatabaseName数据库名称Database数据库检查点,这是数据恢复是否完Checkpoint全的一个重要判断标准衰3LOGFILE鳍构中包含信.I字段名描述LogFileSize日志文件中块的总数目LogFileSequence日志文件序号LogBlksize日志文件数据块的大小LOWSCN日志文件的低SCNLowSCNTimestamp日志文件低SCN的时间戳衰4DATAFILE鳍构中包含信.I字段名描述DataFileBlksize数据块大小CreationCheckpointedAtSCN数据文件创建时的SCNCheckpointSCN数据文件检查点的SCNCheckpointSCNTimestamp数据文件检查点的时间戳StopSCN数据文件的结束SCNTablespace数据文件所属表空间衰5DBFILE鳍构中包含以下信.I字段名描述FileType文件类型FileNum文件号FileName文件名1.2.2数据文件的分析用户的所有数据,系统表以及数据字典都物理地存放在数据文件中,数据文件是数据恢复的关键.在文件内容的组织上,数据文件也采用了与控制文件类似的方式,即一个数据文件由一个文件头块和若干个数据块组成,每个数据块再由块头,块中数据和块尾组成.文件头块中记录了此数据文件的数据块大小和数据块数量等信息.数据块的块头所包含的信息与控制文件的情形非常相似,通常记录了块类型,数据块的相对地址,SCN,块序列号和块数据校验和等信息.存放数据库数据的块有两种:数据段段头块和普通数据块.数据段段头块是用来管理同一个对象的数据块;普通数据块存放具体数据.在数据段段头块中与数据恢复有关的信息见表6.衰6蒙据段段头块中与数据恢复有关的信.I字段名称描述ObjID对象IDExtents分区数量ExtentMap分区的具体分配信息,包括起始RDBA和分区跨越的数据块数量在普通数据块中紧接着块头的是事务头,事务头由定长的块控制信息和变长的ITL组成.块控制信息见表7.衰7块控I舅信.I字段名称描述Type数据块类型.ObjID对象IDCSCCleanoutSCN,最后一次做块清除操作的SCNITCITL的数量一76一ITL(InterestedTransactionList)是一个用来存放ITE(InterestedTransactionEntry)的列表.每一个ITE可以看成是一个块级的锁,Oracle用其记录用户某一次事务所影响的数据行记录的信息以及对应的回滚段信息.ITE是一个定长的数据结构,其内容见表8.衰8ITE定长的数据鳍构内容字段名称描述XID事务ID(TransactionID).包括回滚段号,事务表中的槽(slot)号和该事务表使用次数UBA重做块地址(UndoBlockAddress).包括重做块地址,块序列号和重做块中的记录号Flags事务状态Locks由于该事务而被锁住数据表中的记录数SCN/FSCSCN或释放空间.如果事务已经清除了,则是该事务提交时的SCN值;否则是该事务所释放的存储空间的大小在事务头之后就是数据存放区域,此区域包括:数据头信息和数据行.数据头信息由定长的通用头信息,表目录和行目录组成.簇数据允许把多个表存放在同一个数据块中,而通常情况下一个数据块只存放一个表的内容.数据行是从块尾插入的,并向前扩展.数据区域里的偏移量是从数据区域首地址算起的,而不是从块首算起的.数据头信息见表9.衰9蒙据头信.I字段名称描述NThb表的数量(一般为1,当ntab>1时,说明是簇块)NROW表记录总数FSBO空闲区起始地址FSEO空闲区结束地址,数据行开始的偏移AVSP空闲区字节数(fseofsbo)TOSP空闲字节总数(包括已删除行的空间)TableDirectory表目录,每条表目录记录了表在行目录中的起始位置,以及从属于该表的行目录数量RowDirectory行目录,每个行目录记录了一个数据行在数据区域中的偏移根据以上信息,就可以找到表中的每一条数据记录.在只有一张表的数据块中,每一条物理上的数据行也就对应着一条逻辑上的数据行.而在簇表中,把作为簇键的列单独作为一个表存储,其他表和该表还要有一个对应关系,因此存放要复杂一点.一个行结构包括一个行头,以及每一个列的具体数据.行头记录了行状态,ITL锁和该记录的列数量;每一列的具体数据不仅包括了该列的实际数据值,还包括了该列数据所占用的空间大小.值得注意的是,Oracle中各种数据类型的存储格式不同于常规,比如日期和浮点数的物理存储方式都是Oracle自定义的.1-2.3日志文件的分析Oracle系统中的日志文件负责记录所有用户对象或系统变更的信息.Oracle所作的一切操作都记录在日志文件中.日志文件是进行事务记录恢复的依据.与控制文件,数据文件稍有差异,Oracle的日志文件虽然也由文件头块和日志逻辑块组成,但是第1个日志逻辑块却同其余的逻辑块大不一样.在日志文件头中记录了日志文件的块大小以及块数量.第1个日志文件的逻辑块块头包含如表l0所示的信息.表lO第1个日考文件的逻辑块块头包含信息字段名描述RBA(RedoBye重做字节地址,包含了日志文件序列号,日Address)志文件块号和重做记录在块内的偏移量DBID数据库标识DBName数据库名Controlequence控制文件的序列号LOWSCN低系统修改号NextSCN高系统修改号,如果该日志文件为当前重做日志文件,该值为无穷大紧接着便存放重做记录.其余逻辑块在块头通常只记录了RBA和时间戳信息,然后就存放重做记录了.在Oracle中,一个事务对应日志文件中一条或多条重做记录.每个重做记录记录了一个数据块(数据文件中)从一个状态改变到另一个状态的必要信息.一个重做记录由一个重做记录头和多个更改向量组成.重做记录头包含重做记录的长度,SCN等信息.每一个更改向量记录了一次数据块(数据文件中)内容的改变情况,它由更改向量头和操作项偏移表组成.更改向量头包含如表ll的信息.表ll更改向量头包含信息字段名描述oP操作类型.AFN绝对文件号(AbsoluteFileNum)DBA数据块地址(DataBlockAddress)SCN系统修改号操作项偏移表紧跟在更改向量头后面,它记录所有操作项的有效长度和操作项内容.重做记录包含的操作项类型众多,主要包括-表数据操作项,回滚段数据操作项,索引数据操作项等.其中表数据的操作项是数据恢复中至关重要的部分.Update操作的表数据操作项包含以下信息-KTBRedo项,KDORedo项,操作更改的数据列以及更改数据.Insert操作的表数据操作项包含以下信息-KTBRedo项,KDORedo项以及插入数据.Delete操作的表数据操作项只包含KTBRedo项和KDORedo项信息.KTBRedo和KDORedo项存放了与数据更改有关的控制信息,对于不同的更改操作这两个数据结构包含的信息是不同的.KTBRedo项在KTBOP值为0x11时包括以下信息-操作码,XID(事务ID),UBA(回滚段地址),系统修改号.而KDORedo项在更改向量头OP=11.5时包括的信息如下:数据块地址,数据段段首地址,表在数据块中的序号,数据块中的行号,总列数,新列数.Oracle中,在事务提交或回滚前,所有的更改数据都只是放在内存中的,并且生成的log也是存放在内存中的,只有当事务提交或回滚后,Oracle才把内存中的log写入日志文件中.而Oracle修改数据文件只有在检查点才会发生,这时Oracle根据日志文件来改变数据文件的内容.2数据库文件级数据恢复方法在运行Oracle数据库管理系统时,由于意外的情况可能导致数据库文件遭到物理损坏,使得Oracle无法识另出受损文件,这时用常规恢复工具难以恢复数据库.在实践和研究中发现,大多数情况下受损文件中用户数据并未受到破坏,只不过由于文件头等结构信息数据损坏而导致Omcle无法识另这些文件.因此完全有必要通过非常规手段直接分析数据库物理文件而进行数据恢复.除了分析数据库文件的物理格式外,还需要对Oracle数据库的元数据有一定的了解才能顺利实施数据恢复.2.1Oracle数据库中重要元数据信息的分析数据恢复的主要目的是要恢复出用户表的数据.但是为了恢复用户数据,必须借助系统表SYS.TABS,SYS.OBJ$和SYS.COL$.表1214记录了用户数据的表结构,可以称数据库的元数据.表12SYS.TABS中的t要宇段字段名描述OBJ#对象IDDATAOBJ#实际数据文件中的数据对象ID,簇表成员具有相同的DATAOBJ#,表示存放在相同的与数据对象对应的块中FILE#所属文件IDBLOCK#数据段段头所在的块号TAB#该表在簇表中的序号COLS列总数CLUCOLS作为簇键的列数表13SYS.OBJ$的t要宇段表14SYS.COL$的t耍字段字段名描述OBJ#对象IDCOL#列号NAME列名TYPE#列的数据类型NULL$是否允许为空2.2文件援婚数据恢复方法基于文件级的Oracle数据恢复方法描述如下-(1)从控制文件中提取出所有数据文件,日志文件的检查点信息,SCN信息以及表空间信息建立数据库的框架.(2)根据(1)中得到的系统表空间信息分析出系统表SYS.TABS,SYS.OBJ$,SYS.COL$中所有与用户数据有关的信息,根据分析结果建立出用户的数据库模式便恢复出数据库的用户表结构.(3)结合(2)中得到的结果,根据SYS.TABS找到用户表数据所在数据文件和数据块,识别出每一条用户表记录,将其转换成相应的SQL语句保存到数据恢复脚本文件中.(4)执行(3)中生成的所有脚本文件,初步实现数据恢复.(5)结合(1)中所掌握数据文件和日志文件的SCN,比较日志文件中重做记录的SCN,提取出需要的重做记录,并将其转换成相应的SQL语句保存到数据恢复同步脚本文件中.(6)执行(5)中生成的数据恢复同步脚本文件进行某些事务的前滚和回滚,实现数据的完全恢复.上述步骤均可编程实现.但是如果系统表SYS.TAB$,SYS.OBJ$,SYS.coL$数据或相关物理文件的结构信息内容遭到破坏,就有必要人工实现数据库模式的校正和恢复.3结束语与Oracle数据库常规数据恢复方法相比,本文通过对Oracle数据库物理结构和逻辑结构的分析,给出了一个文件级的Oracle数据库非常规数据恢复方法.长期以来,国内对Oracle物理文件的文件格式研究不够深入,造成了数据恢复和其他应用开发上的困难.本文还给出了数据文件,控制文件和日志文件3种核心文件的分析.由于本文将恢复重点放在用户数据的恢复上而并非整个数据库的重建上,因此恢复的效果较好.在那些文件损坏严重的案例中,应用本文思想实现的恢复工具在数据恢复的效果上要明显优于Oracle的常规恢复工具.由于在实现中涉及到大量物理文件的I/O操作,因此如何提高数据恢复的效率将是下一步工作的重点.(下转第80页)使用的软件复用特点.该方案的缺点是在城市交通网络较庞大的情况下,需要大量的存储资源建立Oracle库表,交通网络变化的维护时间较长.随着存储资源价格的不断下调,中国城市交通网络建设逐渐趋于稳定,目前来看,它是为类似最短路径分析等大型空间分析计算结果,提供地图可视化网络服务的一种十分有效的解决方案.3实现3.1数据库中问件的表结构在Oracle中创建一个新的表SHORTESPAHT,定义表结构如下:IDNUMBERlOF_NODENUMBER4/道路起始点T_NODENUMBER4/道路终止点LENGTHNUMBER102/最短路径总长ROUTl1一IDVARCHAR250/每段道路的ID号ROUTENAMEVARCHAR250/每段道路名称3.2中闻件的实现在VB中我们通过ADO建立建于Oracle数据库的连接.ADO是基于OLEDB的技术,它提供了访问各种数据类型的连接机制,通过ADO连接,可以很方便地实现对数据库的存取操作.为了把求得的最短路径的信息写入Oracle,先把相关信息在MapObjects中的Recordset对象中,然后通过循环写入数据库.PrivateSubWriteToOracle(1Fori=lTOMaxNodeNumFori:lToMaxNodeNumrst.AddNewIfFindPath111en如果存在最短路径SetBestRoute=NothingCallExecutePathSearch(NodeReturnID1routesld=BestRoute.Fields(Id).Valuel得到最短路径信息routesNalTle=BestRoute.Fields(Dlmc1.ValueWhlieNotBestRoute.EOFIfInStr(routesName,Trim(BestRoute.Fields(Id).Value):0Thenroutesld=routesld+,+m(BestRoute.Fields(Id).Value)routesName=routesName+.+Trim(BestRoute.Fields(Dlmc1.Value1EndIfBestRoute.MoveNextWendBestRoute.MoveFirstrst!route_id=routesld写入数据库rst!routename=routesNameElserstlrouteid=两点间的道路未连通!rstIroutenalTle=两点间的道路未连通!EndIfrst.UpdateNextjNextiEndsub最后得到表1结构的数据库中间件.表1数据库中问件f_xle蠡象.lls栩-豳自函曩薯?j曩.l322896.0l2,2,19,23,42,光复路,光复路,西苏州路,52,64,80,92,新会路,光复路,西苏州路,96,102,109,光复路,西苏州路,西苏州118,123路,光复路,恒丰路,南苏州路,泰兴路,康定东路l332621.232,2,25,42,52,光复路,光复路,安远路,光64,80,92,96,复路,西苏州路,光复路,西l02,l09,1l8,苏州路,西苏州路,光复路,l23恒丰路,南苏州路,泰兴路,康定东路l34两点间的道路两点间的道路未连通未连通l35l275.262,2,38,42,63,光复路,光复路,汉

温馨提示

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

评论

0/150

提交评论