数据库程序员面试分类真题22.docx
数据库程序员面试分类真题22茴答题1. 如何快速重建索引?正确答案:通过REBUI1.D语句可以快速重建或移动索引到其他表空间。REBUII.D有重建整个索引数的功能,可以在不删除原始索引的情况下改变(江南博哥)索引的存储参数。A1.TERINDEXINDEX_NAMEREBUI1.DTAB1.ESPACETS-NMESTORAGE():另外一个合并索引的语句是A1.TERINDEXINDEX_NAMECOA1.ESCE:这个语句仅仅是合异索引中同一级的叶了块(1.eafBIoCk),消耗不大,对于有些索引中存在大量空间浪费的情况下非常有用。考点性能诊断2. 如何快速复制表或插入数据?正确答案:快速复制表可以指定NO1.oGGlNG选项,如:CREATETAB1.ETlNO1.OGGINGSSE1.ECT*FROMT2;快速插入数据可以指定ApPEND提示,需要注意的是,在OARCHIVE1.OG模式下,默认用/APPEND就是No1.oGGING模式的。在ARCHIVE1.OG下,需要把表设置成No1.OGGING模式。如:1NSERT*+A1END*INTOTlSE1.ECT*EKOMT2;注意:若在环境中设置了FORCE1.OGGING,则以上操作是无效的,并不会加快插入的速度,当然,可以通过如下语句设置为NOFoRCE1.OGGING:A1.TERDATABASENOFORCE1.OGGING:是否开启了FoRCE1.OGGING,可以用如下语句查看:SQ1.>SE1.ECTFORCE1.OGGINGFROMV$DATABASE;考点性能诊断3. 什么是热块?正确答案:当一个会话需要访问一个数据块,而这个数据块正在被另一个用户从磁盘读取到内存中或者这个数据块正在被另一个会话修改时,当前的会话就需要等待,就会产生一个bufferbusywaits等待,也伴随着1.atCh争用。如果太多的会话去访问相同的数据块,那么会导致长时间的bufferbusywails等待,通常表现形式为CPU使用率很高,但吞吐量很低。造成热块的原因可能是数据库设置或者重熨执行的SQ1.语句频繁访问一些相同的数据块。热块产生的原因不尽相同,按照数据块的类型,可以分成表数据块、索引数据块、索引根数据块、文件头数据块和数据块自身的争用,不同热块类型处理的方式是不同的。考点性能诊断4. 数据库运行很慢,如何解决?正确答案:导致数据库运行很慢的原因非常多,例如,可能是开发人员SQ1.语句写得不好导致执行性能比较差。所以,碰到这类问题,不能给出一个非常精确的答案,但是可以按照如下的步腺去检测:Dtop或topas查看系统的CPU利用率是否正常,找到最耗费资源的OraCle进程,然后进入数据库查询相关的会话,找到SQ1.语句再进行具体分析。如果CPU正常,那么就很可能是由于开发人员写的SQ1.语句不好,导致SQ1.执行时间过长,因此,开发人员误认为是数据库运行缓慢。2)进入数据库查看等待事件是否正常,SQ1.语句如下:SE1.ECTA.INSTJD,.EVENT,COUNT(I)FROMGV$SESSIONAWHERE.USERNAMEISNOTNU1.1.ANDA.STATUS=*ACTIVE'ANDA.WAITC1.SS<>>Idle'GROUPBYA.INSTID,A.EVENTORDERBYA.INSTID,COUNT(1)DESC;结果如下:DSTJDE三ClXNI(I)1latch:gesTeSOUro?hashlist581gcbufferbusyacquire22kgfilesync1078S2gcbufferbusyrelease122gccurrentrequest62latchfree1那么,在这里就应该着重解决IOgfileSynC这个等待事件。考点性能诊断5. Undo的作用有哪些?正确答案:主要有4个作用:事务回滚(RoIIbaCkTranSaCt个n)、事务恢复(TranSaCtionRecovery)提供一致性读(ConSiStentRCad)和实现闪回功能。考点性能诊断6. 对于不同的DM1.语句而言,UndO段存储了哪些内容?正确答案:Red。中只会记录少量信息,这些信息足以重演事务;同样Undo中也只记录精简信息,这些信息足以撤销事务。具体来说:1)对于INSERT操作,回滚段只需要记录插入记录的RObD,如果回退,那么只需将该记录根据ROWID删除即可。2)对于UPDATE操作,回滚段只需要记录被更新字段的IH值即可(前镜像),回退时通过旧值覆盖新值即nJ完成回滚。3)对于DE1.ETE操作,OraCIe则必须记录整行的数据,在回滚时,Oracle通过一个反向操作恢复删除的数据。总结一下:对于相同数据量的数据操作,通常INSERT产生最少的Und。,UPDATE产生的UnCIO居中,而DE1.ETE操作产生的Undo最多。所以,当一个大的DE1.ETE操作失败或者回滚时,总是需要很长的时间,并且会有大量的Red。生成。所以通常在进行大规模数据删除操作时,推荐通过分批删除分次提交,以减少对于回滚段的占用和冲击。考点性能诊断7. 什么是ORA-OI555?正确答案:在告警日志中记录的ORA-Ol555(snapshottooOld,快照过旧)报错信息类似:0R.-01555:snapshottooold:rollbacksegmentnumber107withname*_SYSSMU107_1253191395$*toosmall疑认情况,ORA-OI555错误发生时不会自动生成跟踪日志文件,但是可以在系统里设置下面的事件,让它在错误发生的同时生成跟踪日志文件:altersystemsetevents,1555tracenameerrorstacklevel3'由于回滚段是循环使用的,当事务提交以后,该事务占用的回滚段事务会被标记为IE活动,此时的回滚段空间可以被覆盖重用。那么问题就出现了,如果一个查询需要使用被覆靛的回滚段构造前镜像(BCfOreImage)实现一致性读,那么此时就会出现OraCIe著名的ORA-OI555(snapshot100old,快照过旧)错误。需要注意的是,ORA01555错误是一个安全的错误,它不会造成数据丢失或者损坏,只是会让收到该错误的查询无法继续。0RA-01555错误的另外一个原因是延迟块清除(DeIayedBlockCleanout)o当一个查询触发延迟块清除时,OraCIe需要去查询回滚段获得该事务的提交SCN。如果事务的前镜像信息已经被覆盖,并且查询SCN也小于回滚段中记录的最小提交SCN,那么Oracle将无从判断查询SCN和事务提交SCN的大小,此时出现延迟块清除会导致ORA-Ol555错误。还有一种导致ORA-(H555错误的情况出现在使用SQ1.*1.oader直接方式加载(direct=true)数据时,由于不产生Redo和Undo信息,Oracle直接指定CACHEDCOMMITSCN进行加载数据,在访问这些数据时,有时会产生ORA-Ol555错误。知道了ORA-OI555错误产生的原因就可以总结出以下方法来解决ORA-01555错误问题:1)犷大回滚段。因为回滚段是循环使用的,如果回滚段足够大,那么被提交的数据信息就能保存足够长的时间,而那些大事务就可以完成一致性读取。2)增加1.NDORETENTlON时间。在UNDoRETENT0规定的时间内,任何其他事务都不能覆盖这些数据。3)优化相关查询语句,减少一致性读。减少查询语句的一致性读,也可以降低读取不到回滚段数据的风险。4)减少不必要的事务提交。提交的事务越少,产生的回滚段信息就越少。5)对大事务指定回滚段。通过以下语句可以指定事务的回滚段:SETTRANSACriONUSERO1.1.BACKSEGMENTOrUbaCk.segment;给大事务指定回滚段,即降低大事务回滚信息覆盖其他事务的回滚信息的概率,乂降低了它自身的回滚信息被覆盖的概率。大事务的存在,往往是ORA-01555错误产生的诱因。6)使用游标时尽量使用显式游标,并且只在需要的时候打开游标,同时将所有可以在游标外做的操作从游标循环中京出。当游标打开时,查询就开始了,直到游标关闭。减少游标的打开时间,就减少了ORA-OI555错误发生的概率。7)使用回滚表空间H动管理。回滚表空间自动管理是OraCle9i后的特性,OraeIe自动管理回滚段的创建和回收,并且OraCIeIog中,这一特性大大增强1.而在大型的数据仓库或者报表系统中,会有-些很大的查询作业存在,这时可以考虑使用手动管理,为某些大作业创建单独的回滚段。考点性能诊断8. 对于DUA1.需要注意哪些问题?正确答案:有关Oracle的DUA1.表,需要掌握以下儿点内容:D系统提供的一个DUMMY表,临时显示结果的表,里边的内容没有特定的意义,就是为了存在而存在。2)DUA1.是属于SYS用户的一个表,然后以公共同义词的方式供其他数据库用户使用,这一点可以由以下SQ1.验证:selectD.owner,dobjectkame,d.object。,D.ObjectjtypefromDBA一OBJECTSDWHERED.OBJESNAME='DUA1.'-OWNERIOBJECT.NAMEIOB)ECTDIoBCECTjnPE二issiTdual:yiitable2PUBUCWDUA1.117SYNONYM3)OracIe对DUA1.表的操作做了一些内部处理,尽量保证DUA1.表中只返回一条记录。当然这些内部操作是不可见的。4)若DUA1.表出现问题,则所有相关的基础操作都会受到影响:若DUA1.表被删除,则数据库将不能启动,报0RA-01775的错误。5) DUA1.在数据库OPEN状态下是一行一列的表,但是在MOUNT和NOMOUNT状态卜是一行四列的表。6)DUA1.的常用方式如卜丁查看当前连接用户SE1.ECTUSERFROMDUA1.;查看当前口期、时间SE1.ECTTOCHAR(SYSDATE,'YYYY-MM-DDHH24MISS,)FR0MDUA1.;当作计算器用SE1.ECT8*9FROMDUA1.;查看序列值SE1.ECTMYSEQ.NEXTVA1.FROMDUA1.;需要注意的是,如果DUA1.被删除,那么总体的恢复思路是在数据库。PEN的情况下重建DUA1.表,重建的语句如下:CREATETAB1.ESYS.DUA1.(DUMMYVARCHAR2(1)STORAGE(INITIA1.Dtablespacesystem;INSERTINTODUA1.VA1.UES('X');COMMIT;CREATEORREP1.ACEPUB1.ICSYNONYMDUA1.FORDUA1.;GRANTSE1.ECTONDUA1.TOPUB1.ICWITHGRANTOPTION:?/rdbmsadmin/u11rp.sql如果是DUA1.被删除后重启了数据库,那么就需要设置参数REP1.1CAT1ON_DEPENDENCYTRACKING为EA1.SE才能启动数据库。考点性能诊断9. SQ1.jrRACE是什么?正确答枭:SQkTRACE是Oracle提供的用于进行SQI.跟踪的手段,是强有力的辅助诊断工具。在日常的数据库问题诊断和解决中,SQ1.TRACE是非常常用的方法。可以设置SQ1.TRACE为TRUE,但是一般不推荐在全局指定为TRUE,只建议在会话级别指定。若在全局设定则对性能会造成较大影响。考点性能诊断10. 诊断事件是什么?正确答案:OraCle为数据库提供多种的诊断工具,诊断事件(EVent)是其中一种非常实用的方法,它能使DBA方便地转储数据库各科一结构及跟踪特定事件的发生过程。通过如下的脚本可以获取所有的诊断事件列表:DEC1.AREERR_MSGVARCHR2(32767);BEGINDBMSj)UTPUT.ENAB1.E);FORERRNUMIN1OOOO.109991.OOPERRMSG:=SQ1.ERRM(-ERRNUM);IFERR_MSGNOT1.IKE,%Message,ERR.NUMnotfound%>THENDBMSj)UTPUT.PUT_1.INE(ERl1.MSG);ENDIF;END1.OOP;END:/在1.inUX系统下诊断事件的消息文件放在目录:$0RAC1.E_HOME/rdbmsmcsgoraus.msg0oraus.msg文件属于文本文件,可以直接打开看看。诊断事件可以像普通的ORA错误一样采用oerr命令来查询。考点性能诊断11. 如何知道在系统中设置了哪些诊断事件(EVent)?正确答案:如果事件是在PfiIe文件中设置的,那么可以用“SHOWPARAMETEREVENT"来查看;如果是通过“A1.TERSYSTEMISESSION"来设置的,那么可以使用如下的SQ1.来查看:SETSERVEROUTPUTONSIZE1000000DEC1.AREEVENT_1.EVE1.NUMBER;BEGINFORIIN10000.999991.OOPSYS.DBMSSYSTEM.READEV(1,EVENT1.EVE1.);IF(EVENT1.EVE1.>0)THENDBMSJ)UTPUT.PUTJJNE('Event'IITO_CHAR(1)setatIeVel'11T(1.eHAR(EVENT_1.EVE1.):ENDIE;END1.OOR;END:/但是,10046和10053事件不能通过这种方式查询,只能通过。radcbug来查询,如下:SYSorclasm>oradebugsetmypidsvsorc1asm>oradebugeventdumpsystemSYSorc1asm>oradtugCVentdUmPsession考点性能诊断12. 常用的10046及10053诊断事件的区别是什么?正确答案:最为常用的诊断事件是10016和10053事件。10046事件是Oracle提供的内部事件,是对SQ1.jrRACE的增强。OraCle的10046事件,可以跟踪应用程序所执行的SQ1.语句,并且得到其解析次数、执行次数、CPU使用时间等信息。这对DBA来分析、定位数据库性能问题是非常有用的。10016事件可分成不同的级别(1.EYE1.),分别追踪记录不同程度的有用信息。对于这些不同的级别,应当注意的是向下旋容的,即高一级的TRACE信息包含低于此级的所有信息。10046事件可以设置以下级别:Dlevel0:禁用SQ1.TRACE,等价于SQ1.TRACE=FA1.SE02) levelI:启用标准的SQ1.TRACE功能跟踪SQ1.语句,包括解析、执行、提取、提交、回滚、响应时间、服务时间、处理的行数、物理读和写的数目、执行计划以及其他一些额外信息,等价于Sqljrace=TRUEo3) level4:1.evel1+包括绑定变量(BindVaIUeS)的详细信息。4) level8:1.evel1+包括等待事件。5) level12:包括绑定变量与等待事件,包含1.eveI1+1.evel4+1.evel8。10053事件是最常用的Oracle优化器跟踪Trace010053事件解析优化器为什么选择某个执行计划但并不记录这个执行计划到底运行得如何。10046事件并不解释优化器的工作,但它记录了在SQ1.解析阶段所遇到的等待事件和所消耗的CPU等资源,以及执行阶段的各项指标。需要注意的是,如果一个SQ1.语句已经被解析过,那么就不会生成10053的trace文件,但10016的trace文件可以重复生成。简而言之,10046事件记录SQ1.如何运行,而10053记录优化器为什么为这个SQ1.选择某个执行计划。考点性能诊断13. 在Oracle中,有哪几种方法可以跟踪会话执行语句?正确答案:可以使用的方法包括:SQ1.JrRACE参数设置;使用10046事件;DBMS.SESSION包,只能跟踪当前会话,不能指定会话;DBMS.SYSTEM包;DBMS_MONITOR包;OradebUg命令。考点性能诊断14. 对于一个比较熨杂的存储过程来说,如何快速定位到是什么语句什么原因导致的失败解析?正确答案:布解析SQ1.的过程中,若碰到SQ1.语法错误、访问的对象不存在或没有权限,则会导致目标SQ1.语句解析失败,所以,解析失败的SQ1.语句是不会生成执行计划的。可以通过如下几种方式找到解析失败的SQ1.:1)通过关联Xskglcursor和x$kglcursor_child_sqlid视图。2)通过使用10035事件。3)通过OraCIesystemdump。OraCIe提供了系列的跟踪事件来帮助定位各种问题,通过10035事件可以诊断解析失败的情况,如下:oraclerhel61oerrora1003510035,00000,*Writeparsefailurestoalertlogfile*首先通过"altersystemsetevents'10035tracenamecontextforever,Ieve5'"开启监控,然后使用tail观察告警日志,找到问题SQ1.之后,使用命令"altersystemsetevents,10035tracenamecontextoff;”关闭10035事件。考点性能诊断15. errorstack的作用是什么?正确答案:在使用OraCIe数据库的过程中,可能会遇到各种各样的错误或异常,而且这些错误或异常的提示并不具体,那么这个时候就可以使用OraCIC提供的一种对于错误堆栈进行跟踪的方法即CrrorSlack。通过设置跟踪可以将一些错误的后台信息详尽地转储出来,写入跟踪文件,对于错误的研究与诊断非常有.效。设置errorstack主要有4个级别:DO仅转储错误堆栈(0级已经被逐渐废弃),2) 1转储错误堆栈和函数调用堆栈。3)21.evell÷ProcessState4)31.evel2+Contextarea(显示所有游标,着重显示当前游标)。e-rorstack可以在实例级或会话级别设置,也可以在参数文件中设置,这个设置仅当某个特定的错误出现时才被触发,如设置ORA-OI438事件的跟踪:altersystemsetevents,1438tracenameerrorstaekforever,level3,;一启用.执行SQ1.语句.altersystemsetevents'1438tracenameerrorslackoff,;一关闭接下来在告警日志中找到相关的跟踪文件,对该文件进行分析即可。考点性能诊断16. 如何收集SyStemdUmp?如何收集hanganalyzc?正确答案:若SySdba可登录,则使用命令msqlplus"/asSySdba”登录系统:若不能登录,则使用msqlplus-prelim*asSySdba""登录系统,然后使用OradebUg收集SySteIndUmp,如下:SQ1.>oradebugSetmypidSQ1.>其中266表示dump的级别,不用调整,即把系统当前各个进程正在执行什么、正在等待什么全部抓下来:SQ1.>oradebugdumpsystemstate266SQ1.>一等上30秒到1分钟SQ1.>oradebugdumpsystemstate266SQ1.>oradebugtracefile_nameu02apporac1e/diagrdbms1hrdb1hrdbtraee1hrdbora46679.trc若要获得某个进程的状态,则SYS©1hrdb>oradebugTRACEFI1.ENAMEu02apporae1e/diag/rdbms/1hrdb/lhrclb/trace/1hrdb_ora_54008.trcSYSIhrdb>oradebugsetospid54008Oraclepid:37,Inixprocesspid:51008,image:orac1eorcIalhr(TNSVl-V3)SYS©1hrdb>oradebugdumpprocessstate10Statementprocessed.如果系统HANG住的时候,则systemstate基本等同于hanganalyze,可以用于诊断SYSTEMHNG住的问题。Oracle数据库可能因为HANG住而产生严重的性能问题,通过Hanganalyze功能产生的日志可以帮助DBA快速地诊断出数据库的问题,如下:SQ1.>altersessionsetevents,immediatetracenameHANGNA1.YZElevel3,;对于单实例而言,如下设置:SQ1.>ORDEBUGIianganalyze3对于RAC环境,如下设置:SQ1.>OKDEBUGSetmypidSQ1.>ORADEBUGsetinstallSQ1.>ORADEBUG-gdefhanganaIyzc3考点性能诊断17. 什么是分布式事务处理?正确答案:现代数据库系统往往伴随着复杂的结构和环境,其中,分布式数据库组成是一个重要方面。系统后台的数据库系统不再是由单个数据库构成,而是由多台独立数据库,甚至是多台异构数据库构成。分布式事务是指一个事务在本地和远程执行,本地需要等待确认远程的事务结束后,进行下一步本地的操作。如通过DB1.lNK更新远程数据库的一行记录,如果在执行过程中网络异常,或者其他事件导致本地数据库无法得知远程数据库的执行情况,那么就会发生N-Do1.BT的报错。此时需要DBA介入,且需要分多种情况进行处理。OraCIe会自动处理分布式事务,保证分布式事务的一致性,所有站点全部提交或全部回滚。一般情况下,处理过程在很短的时间内完成,根本无法察觉到。但是,如果在CoMMIT或Ro1.1.BACK的时候,出现了连接中断或某个数据库站点CraSh的情况,那么提交操作可能会无法继续,此时DBA_2PC_PENDING和DBA_2PC_NEIGHB0RS中会包含尚未解决的分布事务。对于绝大多数福况,当恢熨连接或CraSh的数据库重新启动后,会自动解决分布式事务,不需要人工干预。只有分布事务锁住的对象急需被访问,锁住的回滚段阻止了其他事务的使用,网络故障或CraSh的数据库的恢复需要很长的时间等情况出现时,才使用人工操作的方式来维护分布式事务。手工强制提交或回滚将失去二层提交的特性,OraCIe无法继续保证事务的一致性,事务的一致性应由手工操作者保证。使用“A1.TERSYSTEMDISAB1.EDISTRIBUTEDRECOVERY;,可以使OraCle不再自动解决分布事务,即使网络恢复连接或者CraSh的数据库重新启动。使用aA1.TERSYSTEMENAB1.EDISTRIBUTEDRECoVERY;"恢复自动解决分布事务。有关分布式事务有两个重要的视图,分别是DBA_2PC_PEND1NG和DBA_2PC_NEIGHB0RSoDBA_2PJPEW)ING视图列出所有而悬而未决的事务,此视图初未施入悬而未决的事为之帝是空的,解决之后也被清空。考点性能诊断18. 如何判断某一个数据块是否在内存中?正确答案:通过VSBH视图可以查询。VSBH视图保存着BUfferCaChe中每一个B1.OCK的信息,是一个重要视图。例如,Tl表在数据文件I中,第一个B1.OCK是103001,则通过如下的SQ1.可以查看这个B1.OCK有没有在BufferCache中,若返回的值大于0,则说明该块在BUfferCaChe中:SE1.ECTCOUNT(*)EROMV$BHDWHERED.FI1.Ett=IANDD.B1.OCK#=103001;考点性能诊断19. tkprof的作用是什么?正确答案:tkprof是一个调优工具,用于格式化10046事件和SQ1.jRACE生成的trace文件。需要注意的是,不能使用IkPrOf工具来处理10053事件产生的IraCe文件。在OS命令行中直接输入IkProf'就可以获得一个完整的参数列表。tkprof的格式如下:tkproftracefileoutputfileoptions考点性能诊断20. 如何找出当前有多少个用户登录到数据库?正确答案:有多种方式可以查询,其中,一种方式是查询丫$SESSlON视图,SQ1.命令为mSE1.ECTCOUNT(I)FROMV$SESSlONA;":另一种方式是查询V$SYSSTAT视图,SQ1.命令为“SE1.ECT*FROMV$SYSSTATAWHEREA.NAME=1logonscurrent'"。如果是UNIX系统,那么还可以通过命令"ps-efgreporacleIwc-,来查询用户数量。考点性能诊断21. 如何查询到数据库的增长情况?正确答案:可以通过视图DBAJnSTJrBSPJSPCEJJSAGE来获取数据库的增长情况。考点性能诊断22. 如何查询数据库闪回空间的使用情况?正确答案:通过视图V$RECOVERY_FI1.EJ)EST可以杏询闪回空间的使用情况。若想查询详细使用情况,可以联合V$F1.ASH_REC0VERY_AREAJJSAGE和V$RECOMERY_FI1.E_DEST进行查询。考点性能诊断23. 如何查询超过10小时无响应的会话?正确答案:Gvssession视图的last_call_et字段表示客户端无响应的时间,可以根据该字段来查询。考点性能诊断24. 如何监控TEMP和Undo表空间并将耗费TEMP和Undo空间常大的SQ1.语句记录下来?正确答案:总体思路是采用JOB定时将耗费TEMP和Und。的SQ1.语句记录在表中,这样日后查询将是非常方便的。考点性能诊断25. 若数据库发生写错误(非SYSTEM表空间文件),则Oracle是如何处理相关数据文件的?正确答案:在OraCIe11.2.0.2版本之前,如果数据库运行在归档模式下,并且写错误发生在非SYSTEM表空间文件,那么Oracle数据库会将发生错误的文件离线(OFF1.INE)»但是,从OraCle11.2.0.2开始,数据库会以CraSh实例替代相关数据文件的OFF1.lNE。需要注意的是,在非归档模式下或者SYSTEM文件遭受错误时,数据库会直接崩溃。从OraCIe11.2.0.2版本开始,一个新的隐含参数hdatafi1e_write_errors_crash_instance”被引入,该参数的钛认值为TRUE,表示石Oracle数据库发生疑据文件写错误时,OraCle会直接CraSh数据库实例。为什么要引入这个参数呢?因为在归档模式卜.,当发生数据文件(非SYSTEM文件)写错误时,如果OraCIe将数据文件离线,那么这会造成很多灾难,类似的错误口志可能是这样的:FriJan1319:32:212013KCF:write/openerrorblock=0xflfa6online=lfile=73/dev/rods_gm05error=27063txt:'IBM1XRISCSystem/6000Error:22:InvalidargumentAdditionalinformation:-1Additionalinformation:557056,AutoniriticdatafiIeofflineduetowriteerroronfile73clevrodsgn05鉴于很多用户遇到的困境,OraCIe做出了修正,这一修正在MOS上以BUG形式被提交,其内容为BUg7691270CrashtheDBincaseofwriteerrors(ratherthanjustofflinefiles)考点性能诊断