《数据库程序员面试分类真题22.docx》由会员分享,可在线阅读,更多相关《数据库程序员面试分类真题22.docx(11页珍藏版)》请在优知文库上搜索。
1、数据库程序员面试分类真题22茴答题1. 如何快速重建索引?正确答案:通过REBUI1.D语句可以快速重建或移动索引到其他表空间。REBUII.D有重建整个索引数的功能,可以在不删除原始索引的情况下改变(江南博哥)索引的存储参数。A1.TERINDEXINDEX_NAMEREBUI1.DTAB1.ESPACETS-NMESTORAGE():另外一个合并索引的语句是A1.TERINDEXINDEX_NAMECOA1.ESCE:这个语句仅仅是合异索引中同一级的叶了块(1.eafBIoCk),消耗不大,对于有些索引中存在大量空间浪费的情况下非常有用。考点性能诊断2. 如何快速复制表或插入数据?正确答案
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.TERDATABASENOFOR
3、CE1.OGGING:是否开启了FoRCE1.OGGING,可以用如下语句查看:SQ1.SE1.ECTFORCE1.OGGINGFROMV$DATABASE;考点性能诊断3. 什么是热块?正确答案:当一个会话需要访问一个数据块,而这个数据块正在被另一个用户从磁盘读取到内存中或者这个数据块正在被另一个会话修改时,当前的会话就需要等待,就会产生一个bufferbusywaits等待,也伴随着1.atCh争用。如果太多的会话去访问相同的数据块,那么会导致长时间的bufferbusywails等待,通常表现形式为CPU使用率很高,但吞吐量很低。造成热块的原因可能是数据库设置或者重熨执行的SQ1.语句频
4、繁访问一些相同的数据块。热块产生的原因不尽相同,按照数据块的类型,可以分成表数据块、索引数据块、索引根数据块、文件头数据块和数据块自身的争用,不同热块类型处理的方式是不同的。考点性能诊断4. 数据库运行很慢,如何解决?正确答案:导致数据库运行很慢的原因非常多,例如,可能是开发人员SQ1.语句写得不好导致执行性能比较差。所以,碰到这类问题,不能给出一个非常精确的答案,但是可以按照如下的步腺去检测:Dtop或topas查看系统的CPU利用率是否正常,找到最耗费资源的OraCle进程,然后进入数据库查询相关的会话,找到SQ1.语句再进行具体分析。如果CPU正常,那么就很可能是由于开发人员写的SQ1.
5、语句不好,导致SQ1.执行时间过长,因此,开发人员误认为是数据库运行缓慢。2)进入数据库查看等待事件是否正常,SQ1.语句如下:SE1.ECTA.INSTJD,.EVENT,COUNT(I)FROMGV$SESSIONAWHERE.USERNAMEISNOTNU1.1.ANDA.STATUS=*ACTIVEANDA.WAITC1.SSIdleGROUPBYA.INSTID,A.EVENTORDERBYA.INSTID,COUNT(1)DESC;结果如下:DSTJDE三ClXNI(I)1latch:gesTeSOUro?hashlist581gcbufferbusyacquire22kgfile
6、sync1078S2gcbufferbusyrelease122gccurrentrequest62latchfree1那么,在这里就应该着重解决IOgfileSynC这个等待事件。考点性能诊断5. Undo的作用有哪些?正确答案:主要有4个作用:事务回滚(RoIIbaCkTranSaCt个n)、事务恢复(TranSaCtionRecovery)提供一致性读(ConSiStentRCad)和实现闪回功能。考点性能诊断6. 对于不同的DM1.语句而言,UndO段存储了哪些内容?正确答案:Red。中只会记录少量信息,这些信息足以重演事务;同样Undo中也只记录精简信息,这些信息足以撤销事务。具体来
7、说:1)对于INSERT操作,回滚段只需要记录插入记录的RObD,如果回退,那么只需将该记录根据ROWID删除即可。2)对于UPDATE操作,回滚段只需要记录被更新字段的IH值即可(前镜像),回退时通过旧值覆盖新值即nJ完成回滚。3)对于DE1.ETE操作,OraCIe则必须记录整行的数据,在回滚时,Oracle通过一个反向操作恢复删除的数据。总结一下:对于相同数据量的数据操作,通常INSERT产生最少的Und。,UPDATE产生的UnCIO居中,而DE1.ETE操作产生的Undo最多。所以,当一个大的DE1.ETE操作失败或者回滚时,总是需要很长的时间,并且会有大量的Red。生成。所以通常在
8、进行大规模数据删除操作时,推荐通过分批删除分次提交,以减少对于回滚段的占用和冲击。考点性能诊断7. 什么是ORA-OI555?正确答案:在告警日志中记录的ORA-Ol555(snapshottooOld,快照过旧)报错信息类似:0R.-01555:snapshottooold:rollbacksegmentnumber107withname*_SYSSMU107_1253191395$*toosmall疑认情况,ORA-OI555错误发生时不会自动生成跟踪日志文件,但是可以在系统里设置下面的事件,让它在错误发生的同时生成跟踪日志文件:altersystemsetevents,1555trace
9、nameerrorstacklevel3;由于回滚段是循环使用的,当事务提交以后,该事务占用的回滚段事务会被标记为IE活动,此时的回滚段空间可以被覆盖重用。那么问题就出现了,如果一个查询需要使用被覆靛的回滚段构造前镜像(BCfOreImage)实现一致性读,那么此时就会出现OraCIe著名的ORA-OI555(snapshot100old,快照过旧)错误。需要注意的是,ORA01555错误是一个安全的错误,它不会造成数据丢失或者损坏,只是会让收到该错误的查询无法继续。0RA-01555错误的另外一个原因是延迟块清除(DeIayedBlockCleanout)o当一个查询触发延迟块清除时,Ora
10、CIe需要去查询回滚段获得该事务的提交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
11、)犷大回滚段。因为回滚段是循环使用的,如果回滚段足够大,那么被提交的数据信息就能保存足够长的时间,而那些大事务就可以完成一致性读取。2)增加1.NDORETENTlON时间。在UNDoRETENT0规定的时间内,任何其他事务都不能覆盖这些数据。3)优化相关查询语句,减少一致性读。减少查询语句的一致性读,也可以降低读取不到回滚段数据的风险。4)减少不必要的事务提交。提交的事务越少,产生的回滚段信息就越少。5)对大事务指定回滚段。通过以下语句可以指定事务的回滚段:SETTRANSACriONUSERO1.1.BACKSEGMENTOrUbaCk.segment;给大事务指定回滚段,即降低大事务回滚
12、信息覆盖其他事务的回滚信息的概率,乂降低了它自身的回滚信息被覆盖的概率。大事务的存在,往往是ORA-01555错误产生的诱因。6)使用游标时尽量使用显式游标,并且只在需要的时候打开游标,同时将所有可以在游标外做的操作从游标循环中京出。当游标打开时,查询就开始了,直到游标关闭。减少游标的打开时间,就减少了ORA-OI555错误发生的概率。7)使用回滚表空间H动管理。回滚表空间自动管理是OraCle9i后的特性,OraeIe自动管理回滚段的创建和回收,并且OraCIeIog中,这一特性大大增强1.而在大型的数据仓库或者报表系统中,会有-些很大的查询作业存在,这时可以考虑使用手动管理,为某些大作业创
13、建单独的回滚段。考点性能诊断8. 对于DUA1.需要注意哪些问题?正确答案:有关Oracle的DUA1.表,需要掌握以下儿点内容:D系统提供的一个DUMMY表,临时显示结果的表,里边的内容没有特定的意义,就是为了存在而存在。2)DUA1.是属于SYS用户的一个表,然后以公共同义词的方式供其他数据库用户使用,这一点可以由以下SQ1.验证:selectD.owner,dobjectkame,d.object。,D.ObjectjtypefromDBA一OBJECTSDWHERED.OBJESNAME=DUA1.;-OWNERIOBJECT.NAMEIOB)ECTDIoBCECTjnPE二issiT
14、dual:yiitable2PUBUCWDUA1.117SYNONYM3)OracIe对DUA1.表的操作做了一些内部处理,尽量保证DUA1.表中只返回一条记录。当然这些内部操作是不可见的。4)若DUA1.表出现问题,则所有相关的基础操作都会受到影响:若DUA1.表被删除,则数据库将不能启动,报0RA-01775的错误。5) DUA1.在数据库OPEN状态下是一行一列的表,但是在MOUNT和NOMOUNT状态卜是一行四列的表。6)DUA1.的常用方式如卜丁查看当前连接用户SE1.ECTUSERFROMDUA1.;查看当前口期、时间SE1.ECTTOCHAR(SYSDATE,YYYY-MM-DD
15、HH24MISS,)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