《数据库程序员面试分类真题10.docx》由会员分享,可在线阅读,更多相关《数据库程序员面试分类真题10.docx(11页珍藏版)》请在课桌文档上搜索。
1、数据库程序员面试分类真题10简答题1. P1./SQ1.中的%R0HTYPE和%TYPE的区别是什么?正确答案:%TYPE是定义一个变量,其数据类型与已经定义的某个数据变量的类型相同,或者与数据库表的(江南博哥)某个列的数据类型相同。解析关于ROHTYPE,需要了解以下内容:1)%ROWTYPE返回的是一个记录类型,其数据类型和数据库表的数据结构一致。2)声明的变量时应于数据库表或视图中列的集合。3)在与ROWTYPE之前加上数据库发名。4)记录内字段名和数据类型与参照点或视图中的列相同。具体而言,为ROWTYPE有如下优点:1)可以不必知道数据库中列的数量和类型。2)在运行期间,数据库中列的
2、数量和类型可能发生变化,但是却不用修改代码。3)在SE1.ECT语句中使用该属性可以有效地检索表中的行。2. 使用哪个数据字典可以查询序列的定义信息?正确答案:可以通过杳询数据字典视图DBA.SEQUENCES获取序列的定义信息,NEXTV1.返回序列中下一个有效的值,任何用户都可以引用CURRVA1.中存放的序列的当前值。当序列值不符合实际需求时,可以执行A1.TERSEQUENCE命令修改序列,需要注意的是,启动序列号不可以修改(STARTWITHN)修改序列的语法和序列的创建语法一样,只是将CREATE修改为A1.TER即可。3. 同义词的定义及其作用是什么?正确答案:同义词是其他对象(
3、例如表、实体、存储过程、函数、包、序列)的别名。同义词也可以是另一个同义词的别名。同义词的优点主要体现在以下几个方面:D当使用对象时,不需要指出对象的所有者。2)引用对象不需要指出它所在的数据库。创建同义词必须要有CREATEANYSYNONYM.CREATESYM)NYM系统权限。要创建全局的同义词,必须有CREATEPUB1.ICSYM)NYN系统权限。创建同义同的语法如下:createorreplacepublicsynonym同义词名称FOR用户名,表名称;4. 当DM1.语句中有一条数据报错时,如何让该DM1.语句继续执行?正确答案:当一个DV1.语句运行的时候,如果遇到了错误,那么
4、这条语句会进行回滚,就好像没有执行过。对于一个大的DM1.语句而言,如果个别数据错误而导致整个语句的回滚,那么会浪费很多的资源和运行时间。所以,从OraCIeIOg开始Oraele支持记录DM1.语句的错误,而允许语句自动继续执行。这个功能可以使用DBMSERR1.OG包实现。利用CREATEERROR1.OG来创建Tl表的DM1.错误记录表:SQ1.EXECDBMtERR1.OGcREAlE-ERRORUQTlT1.ERR1.OGV1.HRtP1.SQ1.ProCdUrcWtteSfilnycompletedUIRgwd三DESCTI.ERR1.OG;X三toll?TypeCfiA.,M三i
5、SU三&EK.ESGSV三Vi2(三)触皿RoSROIlDCAra_WKHW2CfiAJSKJAGSYAOs2(2000)AYAm2(砌BV三W2(三)1.H0rcl2snINSERTINTOTlSE1.ECTFROMT21.OGERRORSINTOT1.ERRWG(T1.ERR1.OGuR)REJKT1.IMfTUNUMnID;OrcwscratalSHECTtFROMT1.ERR1.OG;一,J5一671I-9)01uw.Maj-wj.MKJOMjW1.ftowiwow.gs.ym.tm.awj*IaUMhgtErtMAJlJ)岫-13而:ICW-OOOOl:UnqMCcretrirtWI
6、.T1J)Ud22CM)M01:IhqOettCStrMt(IHiWJ1J)Utd!ffR.Tl-u331 CRA-(W)Oj:UMMtOMtrjrtRt.n.A)n)btfd1BTl1.Hl441CRMK001:WMMWftStrort(bWK,11.A)nttj二:,I脚71J52 (XAl:UTXMCOMtrart(w.11.AJ11tedBW-Tl-IHl66!0u-oorumjjsCOWtrart(U*!.T1.A)bted、“飞【Htt-TI-1.HI771OflAK_T1_A)wtedIEWrTU8B3 CAi:2ConmrtIWJ1.A)med=-净ektuh99ICM-OOO
7、Ol:ungjeConflrirt(WRPKJl-A)mixedIO10可以看到,插入成功执行,但是插入记录为。条。对应的错误信息表中已经包含了插入的信息。而且从错误信息表中还可以看到对应的错误号和详细借误信息,ORA_ERR_OPTYP$为错误操作类型,I表示为INSERT。关于1.oGERRORS的语法为,INTo语句后面跟随的就是指定的错误记录表的表名。在INTO语句后面,可以跟随一个表达式“(T1.ERR1.OGJHR)”即ORA_ERRTAG$中存储的信息,用来设置本次语句执行的相误在错误记录表中对应的TAG。有了这个语句,就可以很径易地在错误记录表中找到某次操作所对应的所有的错误,
8、这对于错误记录表中包含了大量数据,且本次语句产生了多条借误信息的情况十分有帮助。只要这个表达式的值可以转化为字符串类型就可以。REJECT1.IVlT则限制语句出错的数量。1.HRorclasmINSERTINTOTlSE1.ECT*FROMT21.OGERRORSINTOT1.ERR1.OG(,T1-ERR1.OG,)REJECT1.IMIT1;INSERTINTOTlSE1.ECT*EROMT21.OGERRORSINTOti_errlog(ti_errlog)rejectlimiti*ERRORat1i11e1:ORA-OOOOl:uniqueconstraint(1.HR.PK_T1_
9、A)violated可以看到,当设置的REJEcTUMIT的宿小字出错记录数时,语句会报错,这时1.OGERRoRS语句没有起到应有的作用,插入语句仍然以报错结束。而如果将REJECT1.IMlT的限制设置大于等于出错的记录数,则插入语句就会执行成功,而所有出借的信息都会存储到1.OGERRoRS对应的表中。只要指定了1.OGERRORS语句,不管最终插入语句是否成功地执行完成,在错误记录表中都会记录语句执行过程中遇到的错误。比如第一个插入由于出错数目超过REJECT1.lMlT的限制,这时在记录表中会存在REJECT1.IMIT+1条记录数,因此这条记业错误导致了整个SQ1.语句的报错。如果
10、不管碰到多少错误,都希望语句能继续执行,那么可以设置REJEeT1.lMIT为UN1.nnTEDo需要注意的是,即使做了回滚操作,错误日志表中的记录并不会减少,因为OraCle是利用自治事务的方式插入错误记录表的。1.OGERRORS可以用在INSERT、UPDATE、DE1.ETE和MERGE后,但是,它有以卜.限制条件:1)违反延迟约束。2)直接路径的INSERT或MERGE语句违反了唯一约束或唯一索引(注意:从OracleUg开始,已经取消了该条限制)。3)更新操作违反了唯一约束或唯一索引。4)错误日志表的列不支持的数据类型包括1.oNG、1.ONGRAW,B1.OG.C1.OB.NC1
11、.OB.BFl1.E以及各种对象类型。OraCle不支持这些类型的原因也很简单,这些特殊的类型不是包含了大量的记录,就是需要通过特殊的方法来读取,因此Oracle没有办法在SQ1.处理的时候将对应列的信息写到错误记录表中。什么是临时表?正确答案:在创建藉表的时候,如果没有特殊的指明,那么创建的表是一个永久的关系型表,也就是说,这个表中对应的数据,除非是显式地删除,否则表中的数据是7k远都存在的。相对应的,在OraCIe数据库中,还有一种类型的表,叫作临时表。这个临时表与永久表最大的区别就是表中的数据不会永远地存在。当一个会话结束或者事务结束的时候,这个临时表中的数据,不用用户自J删除,数据库自
12、己会H动清除。Oracle的临时表创建之后基本不占用表空间,如果没有指定临时表(包括临时表的索引)存放的表空间,那么插入临时表的数据是存放在Oracle系统的默认临时表空间中(TEMP),-个系统可能有多个临时表空间。临时发的数据只能存放在临时表空间中。临时表的数据只是在事务期间存在,对于会话类型的临时表,数据在会话期间存在,会话的数据对于当前会话私有,每个会话只能看到并修改自己的数据。DM1.锁不会加到临时表的数据上。可以对临时表创建索引、视图、触发器,可以用exp和imp工具导入导出表的定义,但是不能导出数据。考点对象6. 临时表的特点有哪些?正确答案:临时表的特点有如下几点:D多用户操作
13、的独立性。对于使用同一张临时代的不同用户,OraCle都会分配一个独立的TEMPSEGMENT,这样避免了多个用户在对同-张临时表操作时发生交叉,从而保证了多个用户操作的并发性和独立性。2)数据的临时性。既然是临时表,顾名思义,存放在该表中的数据是临时性的。OraCIe根据创建临时表时指定的参数(ONCOMMITDE1.ETEROWS/ONCOMMITPRESERVEROWS),自动将数据TRUNCATE掉。考点对象7. OraCle有哪几种临时表?正确答案:Oracle数据库根据临时表的性质不同,可以分为事务临时表SNCOMMITDE1.ETERoWS)与会话临时表(ONCOMMITPRES
14、ERVEROWS)事务临时表是指数据只在当前事务内有效,该临时表与事务相关,当进行事务提交或者事务回滚的时候,临时衣中的数据将自动被清空,其他的内容和会话级的临时表的一致(包括退出SESSION的时候,事务级的临时表的数据也会被清空)。一般情况下,如果在创建数据表的时候,没有特殊指明表是会话临时表,那么该表默认为事务临时表。事务临时表中的数据被清空的情况包括提交事务(COMMlT)、回滚事务(RO1.1.BACK)以及退出SESSION。会话临时表,顾名思义,是指数据只在当前会话内是有效的临时表。关闭当前会话或者进行新的连接之后,数据表中的内容就会被清除。会话临时表与事务临时表主要的差异就在于
15、删除数据的时机不同。事务临时表是在事务提交或回滚的时候清除数据,而会话临时表则是在关闭当前会话的时候清除数据。只要当前会话没有关闭,即使事务完成了,会话临时表中的数据仍然存在,不会被清除。考点对象8. 如何判断某张表是否是临时表?正确答案:查看一-张表是否临时表,可以从DBAjAB1.ES视图的DURATION列来查询:SE1.ECTUTJAB1.EwNAhffi,UT.TAB1.ESPACE_NAMEIT.TEMPORARY:DEcoDHUh)URATxmsysssession松瀚1,iSysctraxSAcTIoN停务妫版t表先型fromDbajablesutwiereUnEMPoRARY
16、=YANDunABliNMEUKpiCGE:T三XUET三SPACE.三T三OGn皿EEuSVl三OTTjBS三JJBYSS考点对象9. 默认情况下,OraCIe是否会收集临时表的统计信息?正确答案:临时表默认是不收集统计信息的,但是可以使用DBMS_STATS.GATHER_SCHEMA_STATS在SCHEMA级别收集,需要设置GATHERjrEMP为TRUE(默认为FA1.SE);也司以和普通表一样使用GATHER_TAB1.E_STATS初表级别来收集。需要注意的是,只能收集会话临时表的统计信直,不金收集事务临时表的统计信息。会话临时表的统计信息是被所有的会话所共享的,所以,在一般情况
17、卜.,不建议收集临时表的统计信息,否则可能会导致很严重的数据库性能问题。临时表的统计信息在生成执行计划时一般是被动态采样的。考点对象10. 什么是OraCleDireetOry?正确答案:OracleDirectory可以让用户在Oracle数据库中灵活地对文件进行读写操作,极大地提高了Oracle的易用性和可扩展性。考点对象11. Oraele的DB1.NK是什么?正确答案:当用户靠党本地数据库访问另外一个数据库表中的数据时,本地数据库中必须创建了远程数据库的DB1.INK,通过DB1.INK可以像访问本地数据库一样访问远程数据库表中的数据。其实,DBUNK和数据库中的VIEW差不多,创建D
18、B1.INK的时候需要知道待读取数据库的IP地址、ORAC1.ESID以及数据库用户名和密码。在创建DB1.lNK之前,普通用户必须具有相关的权限才能创建DB1.lKK,以SYS用户登录到本地数据库可以看到相关的权限:SE1.ECT*FROMUSERSYSJjRIVSTWHERET.PRIVI1.EGE1.IKEUPPER(,%1.INK%,);USERNAMEIPRIVI1.EGEJadminoptionSYSDROPPUB1.ICDATABASE1.INKnoSYSCREATEDATABASE1.INKNOSYSCREATEPUB1.ICDATABASE1.INKHO可以看出,在数据库中D
19、B1.INK有3种权限:CREATEDATABASE1.lNK(所创建的DBUNK只能是创建者自己使用,其他用户不能使用)、CREATEPUB1.ICDATABASE1.INK(PUB1.IC表示所创建的DB1.lNK所有用户都可以使用)与DRoPPUB1.ICDATABASE1.lNK(删除公共的DBUNK)II可以使用如下授权语句给用户SCOTT授予CREATEPUB1.ICDATABASE1.INK和DROPPUB1.ICDATABASE1.INK两个权限:GRANTCREATEPUB1.ICDATABASE1.INK,DROPPUB1.ICDATABASE1.INKTOSCOTT;查询
20、数据库的DB1.lNK可以使用SQ1.语句:SE1.ECT*IROMDBDB1.INKS。考点对象12. Oracle的表可以分为哪几类?正确答案:从理论上来讲,不存在一种能够满足所有读取要求的数据存储方式,所以,Oraele设计了大约5种数据的存储格式,详见下表。分类怖然(HaPTable)例蹦分区表索弓凰织表(IOT)ft表的旗M,K胃会收故髓他方,m以耕版IWmMM表又分为灯会送的蝴酬表岭竹务的全般附表酬频行分瓯搦*上表例提-轶触福只鹏表中的WHEM1.t可稣州多个表空MMXH.吊Hfl爆It不至于每次尉摘密表,On*可口有大表稣引分好干个里卜更方三fift.wm-n&前的表脑分区表科舞
21、,Mt腼一”都M4处删t的蚓粒l-tff三ft*引鼬中的及它三m.蚓快般也表作嗔蜩帆Mmm-量麟骷渊蝴髀她m三.赫2Onde中一舸M存献髓的施.匿腿舸娘姬AKU曾访随表的麟所稣的稣刑I触D眦M掩2)鼬大Bmi)m蝴膜(自动*喇)2)产物少VIQi3)相的会ZHi.不产物IHi弦的分区的除(把金乱侬醐帕睚个邠)2)揖裁的前兄(可叫某憎区新TRUNCATE)3)Xftttem(分区嫌EXeHANG1.前表和分区黝京个分区2间H黑郴鬼交换)4)分区SM(SP1.IT)Mg合井(MERGE)im秋牍引H引戢比孤1令目表1)可姬夕朝物序2)渺岫W),渺了因期耕所赫的系*m3)节行34配M.H三W*f*.
22、曼轲嘱就的器雅力解列来的(续)分类隧域(HeapIW全剧恻表分区发*三O(IOT)隹衣缺点1)更却抑眼大2)DE1.ETE无法触州(麻虾懵)3)表巳求太X.4) 一引国麹5) 5Pft(三,电朝假MW,1)硒M2)励附D诵法妹2)分区过多对系维有一定NM3)断IWJNCATE、DROPit作胎微全琳引精I)麟妹2)殊腌以Dam2)表就开瞅黔球适合大需腌计频酷接口搬计龄H志表,林炀表某黜舶我期赚关额嫡多表字真IfiH(DBAlB1.ES)SHKTaFROMdba_tablesdWH.ERED.IOT_mvrAM)D.TEMPORARY=NANDdPAR-1111ONED=NOANDd.CU三R-
23、NAMEISNU1.1.;SE1.ECTUT.TAB1.E.NAME,DECODE(UrDuRATl0N,SY三SW会苗被:1SYSSTRANSAcnON;修圾,)财粉飕FROMDBAJAB1.ESUrWHEREUT.TEMPO-RARY=Y;SE1.ECTDPARrniONED.D.OWNERDTAB1.E_NAMEJ).TAB1.E_1.0Cla)JOTJTreId.temporaryfromdba_TAB1.ESD三REDfART.11NED=YES:SE1.ECTFROMDB.VUB1.ESDWHERED.10T.TY-PEexecSYS.DBMS_SYSTEM.KSDWKT(2,th
24、isisatest,);B1./SQ1.proceduresuccessfullycompleted.查看告警日志:SatMar1818:30:272017thisisatest考点系统包22. 在Oraele中,如何获取IP地址?正确答案:若是获取服务器IP地址,则使用UT1._INADDR.GETHOSTADDRESS若是获取客户端IP地址则使用SYSCONTEXTCUSERENV,IPADDRESS*).考点系统包23. 如何在存储过程中暂停指定时间?正确答案:DBMS_1.OCK包的S1.EEP过程。例如,uDB.MS_1.OCK.S1.EEP(5);”表示暂停5s。考点系统包24. DBMS.OUTPUT提示缓冲区不够,怎么增加?正确答案:采用命令DBMSOUTPUT.ENAB1.E(20000);,另外,如果DBVSOUTPI;T的信息不能显示,那么需要设置SETSERVEROUTPUTON0考点系统包25. 如何在OraeIe中写操作系统文件,如写口志?正确答案:可以利用UT1.JI1.E包,但是,在此之前,要注意设置好UTJFIuu)IR初始化参数。考点系统包