数据库程序员面试分模拟题5.docx
数据库程序员面试分模拟题5倚答题1. 如何实时查看日志输出?正确答案:在1.inUX中,可以使用命令"tail-f”来实时查看日志的输出。在NindoWSF也有tail.exe工具,直接复制到目录(江南博哥)C:WindowsSystem32F,然后直接输入命令"tail-f文件名”即可。2. Oracle中哪个包可以获取环境变量的值?正确答案:可以通过DBvS_SYSTEM.GET_ENV来获取环境变量的当前生效值。考点系统包3. 控制文件包含哪些基本内容?正确答案:控制文件主要包含如卜.条目,可以通过dump控制文件内容看到,命令为“altersystemseteventsimmediatetracenamecontrolflevel3.1, 也可以通过视图V$C0NTRO1.FI1.E.RECORDSEcnON看到。4. 什么是降序索引和升序索引?正确答案:对于升序索引(ASCendingIndexes).数据库按升序排列的顺序存储数据。索引默认按照升序存储列值。默认情况下,字符数据按每个字节中包含的.进制值排序,数值数据按从小到大排序,H期数据从早到晚排序。降序索弓I(DCSCendingIndCXeS)将存储在一个特定的列或多列中的数据按降序排序。创建降序索引时使用DESC关键字,如下:CREATEINDEXIN()_DESCONTESTDESC(ADESC,BASC);需要注意的是,降京索引在DBAINDEXES的INDEXTYPE列表现为FUXCTION-BASED即函数索引,但是在DBANDEXPRESSIONS不能体现其升序或降序,只能通过视图DBAINDCo1.UMNS的DESCED列来查询。考点分类5. MySQ1.有哪几个默认数据库?正确答案:在MySQ1.中,数据库也可以称为SChenla。在安装MySQ1.后,默认有informationSChema、InySq1、Performance_schema和SyS这几个数据库,如下:m),sl>selectvc11ion;IeVerSionI5.7.19灯SqDsbo»databases::Database:info11Bticc.sch(a13PerfonancejchaiaIs)s1 .数据库informationschemainformalion_schema是信息数据库,是VySQ1.5.0新增的一个数据库,其中保存着关于MySQ1.服务器所维护的所有其他数据库的信息。information.schema提供了访问数据库元数据的方式。元数据是关于数据的数据,例如,数据库名或衣名、列的数据类型、访问权限等。information_schema是一个虚拟数据库,有数个只读表,它们实际上是视图,而不是基本质,因此,无法看到与之相关的任何文件。2 .数据库mysql这个是MySQ1.的核心数据库,主要存储着数据库的用户、权限设置、MySQ1.自己需要使用的控制和管理信息。它不可以被删除,如果时VySQ1.不是很了解,那么也不要轻易修改这个数据库里面的表信息。3 .数据库performanceschema这是从MySO1.5.5版本开始新增的一个数据库,主要用于收集数据库服务器性能数据,需要设置参数performance.SCheIna才可以启动该功能。这个功能从MySQ1.5.6.6开始,默认是开启的(在FySQ1.5.6.6版本以下默认是关闭的),其值为1或0表示启用,为0或。FT表示关闭。需要注意的是,该参数是静态参数,只能写在f中,不能动态修改。4 .数据库sysMySO1.5.7提供了sys系统数据库。SyS数据库结合了informationSChCma和performance_schenia的相关数据,里面包含了一系列的存储过程、百定义函数以及视图来帮MDBA快速地了解系统的元数据信息,为DBA解决性能瓶颈提供了巨大帮助。SyS数据库目前只包含一个表,表名为SySconfigo另外需要注意的一点是,在MySQ1.5.7以前还存在一个默认的test库,用于测试,而在MySQ1.5.7及其之后的版本中去掉了该库。6. Oracle删除数据库的方式有哪儿种?正确答案:有如下几种方式可以用来删除Oracle数据库:1)直接在OS级别调用dbca命令以静默的方式删除数据库,如卜所示,其中,mydb为数据库名:CIbCa-SiIen1.deIeteDatabaSe-SoUrCeDBmydb2)SQ1.窗口:A1.TERDATABASEC1.OSE:A1.TERSYSTEMENAB1.ERESTRICTEDSESSION;DROPDATABASE:或STARTUPFORCEMOUNTRESTRICT;DROPDATABASE;注意:强烈推荐第1种方式,对于第2种方式,若是在RAC环境中,数据库需要设置参数C1.USTERDATABASE为FA1.SE后才可以执行DROPDATABASE,设置的命令为A1.TERSYSTEMSETC1.USTERDATABASE=FA1.SESID=*,SCOPE=SPFI1.E;o考点建库与删库7. 数据的物理独立性和逻辑独立性分别指的是什么?正确答窠:数据独立性表示应用程序与数据库中存储的数据不存在依赖关系,包括数据的物理独立性和数据的逻辑独立性。数据库管理系统的模式结构和:级映像功能保证了数据库中的数据具有很高的物理独立性和逻辑独立性。物理独立性是指用户的应用程序与存储在磁盘上的数据库中数据是相互独立的。即:数据在磁盘上怎样存储由DBMS管理,用户程序不需要了解,应用程序要处理的只是数据的逻辑结构,这样当数据的物理存储改变了,应用程序不用改变。逻辑独立性是指用户的应用程序与数据库的逻辑结构是相互独立的,即:当数据的逻辑结构改变时,用户程序也可以不变。考点数据库系统的组成与结构8. 使用SC0TT/T1GER用户下的EMP表和DEPT表完成下列练习,表的结构说明如下:EMP员工表(EVPNo员工号/ENAME员工姓名/JOB工作/MGR上级编号miredate受雇日期/sal薪金/comm佣金deptno部门编号)DEPT部门表(DEPTNo部门编号/DNAME部门名称/1.OC地点)工资=薪金+佣金1)列出至少有一个员工的所有部门。2)列出薪金比“SMITH”多的所有员工。3)列出所有员工的姓名及其直接上级的姓名。4)列出受雇日期早于其直接上级的所有员工。5)列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。6)列出所有工作为“C1.ERK”办事员的姓名及其部门名称。7)列出或低薪金大于1500的各种工作。8)列出在部门“SA1.ES”销售部工作的员工的姓名,假定不知道销售部的部门编号。9)列出薪金高于公司平均薪金的所有员工。10)列出与员工mSCOTTw从事相同工作的所有员工。11)列出薪金等于部门编号为30的员工的薪金的所有员工的姓名和薪金。12)列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。13)列出在每个部门工作的员工数量、平均工资和平均服务期限。14)列出所有员工的姓名、部门名称和工资。15)列出所有部门的详细信息和部门人数。16)列出各种工作的最低工资。17)列出工作为“MANAGER”的员工的最低薪金。18)列出所有员工的年工资,按年薪从低到高排序。正确答案:本题考查编写SQ1.语句的能力,答案如下:1)考查两个表联合查询,及GROUPBY.HAVING的用法,最终的SQ1.如下:SE1.ECTDNAMEFROMSC011.DEPTTWHERET.DEPTNOIN(SE1.ECTT.DEPTNOFROMSCOTT.EMPGROUPBYT.DEPTNOHAVINGCOUNT(*)1)2)经典的自连接查询,最终的SQ1.如下:SE1.ECTENAMEFROMSCOTr.EMPTWHERESA1.(SE1.ECTSA1.FROMSCOTT.EMPWHEREENAME1.IKE=SMITH);3)多次对自己查询,为表取个别名,内部查询可以像对象一样引用外部的时象的字段,这里引用与编程中的作用域相似,即与类比,最终的SQ1.如下:SE1.ECTENANE,(SE1.ECTENAMEEROMSCO.EMPWHERESC011.EMPNOIN(A.MGR)FROMSCOTT.EMPA;4)日期可直接用来比较,最终的SQ1.如下:SE1.ECTENAMEFROMSC011.EMPAWHEREHIRE)ATE(SE1.ECTHIREDATEFROMSC011.EMPWHERESC011.EMPNOIN(A.MGR);5)以SCoTT.DEPT表为主,左连接查询,最终的SQ1.如下:SE1.ECTDNAME,B.*FROMSCOTT.DEPTA1.EFTJOINSCOTT.EMPBONA.DEPTNO=B.DEPTNO;6)最终的SQ1.如下:SE1.ECTENAME,(SE1.ECTDNAMEFROMSC011.DEPTWHERET.DEPTNOIN(.DEPTNO)SDNAMEFROMSCOTT.EMPWHEREJoB='C1.ERK'7)找出哪些工作的所有员工的薪金都大于1500,最终的SQ1.如下:SE1.ECTT.JOBFROMSCOK.SCOTT.EMPTGROUPBYT.JOBHAVINGMlN(SA1.)>1500:8)经典的两个表连接,最终的SQ1.如下:SE1.ECTENAMEEROMSCOTT.EVPWHERET.DENO=(SE1.ECTT.DEPTNOEROMSCOTT.DEPTWHEREDNAME='SA1.ES');9)反复查自己,最终的SQ1.如下:SE1.ECTENAMEFROMSeoTT.EVPWHERESAI>>(SE1.ECTAVG(SA1.)FROMSCOTT.EMP);10)排除自己,最终的SQ1.如下:SE1.ECTENAMEFROMSC011.EMPWHEREJOBIN(SE1.ECTJOBFROMSCOTT.EMPWHEREENAME='SCOTT)ANDENME!=,SCOTT;U)考查NY的用法,且排除自己,最终的SQ1.如下:SE1.ECTENAME,SA1.EROMSCOTT.EMPWHERESA1.=ANY(SE1.ECTS1.1ROMSCOTT.EMPWHERET.DEPTN0=30)ANDT.DEPTNO!=30;12)MAX的用法,最终的SQ1.如下:SE1.ECTSA1.,ENAMEFROMSCO.EMPWHERESA1.>(SE1.ECTMAX(SA1.)FROMSCOTT.EMPWHERET.DEPTN0=30):13)经典的GROUPBY用法,最终的SQ1.如下:SE1.ECTT.DEPTNO,COUNT(*),AVG(A.SAI.+COMM),VG(SYSDATE-HIREDATE)FROMSCOIT.EMPGROUPBYT.DEPTNO;14)经典的两个表的连接查询,用具体的名称替换一个表中的主健的ID(解决很多人在实际运用中会遇到的不能绑定多列的问题),也可用WHERE来查询,与题5)比较,最终的SQ1.如下:SE1.ECTENAME,S1.+COMM,(SE1.ECTDNMEFROMSCOTT.DEPTWHEREA.DEPTNO=B.DEBTNO)SDNAMEFROMSCOTT.EMPB;15)因为使用SE1.ECT*,将显示SCOTT.DEPT和后面临时表B的全部字段(注意:不只是SCOTT.DEPT的字段,注意*号),最终的SQ1.如下:SE1.ECT*FROMSC011.DEPTA1.EFTJOIN(SE1.ECTDEPTNO,COUNT(*)FROMSCOTT.EMPGROUPBYDEPTNO)BONA.f)EPTNO=B.DEPTNO;16)考查MIN的用法,最终的SQ1.如下:SE1.ECTJOB,MTN(SA1.)FROMSCOTT.EMPGROUPBYJOB;17)因为IAGER是值而不是字段,所以不能用小写,最终的SQ1.如下:SE1.ECTMIN(SA1.+COMM)FROMSCOTT.EMPWHEREJoB='MANAGER'18)NV1.:空转化函数。最终的SQ1.如下:SE1.ECTENAME,(S1.+NV1.(COMM,0)*12ASSA1.FROMSCOTT.EMPORDERBYSA1.;考点SQ1.编写9. 创建GBK字符集的数据库NEW1.HR,并查看已建库的完整语句。正确答案:mysql>CREATEDATABASENEW1.HRCHARACTERSETGBK;QUnyOK.IrowIfrawd(0.13«c)my5ql>SHOWCREATEDATABASENEW1.HR;IhlabaSeCreateCtitabase!»vlhrC三11DATA三'nclhr'/»!«1100DEFWClwwES11gbkIrwinsd(QOZsa)考点创建数据库10. 什么是ASSM和MSSM?PCTFREE和PCTUSED的作用是什么?正确答案:段空间有两种管理方式,分别是手动段空间管理(ManUalSegmentSpaceManagement,MSSM)和Fl动段空间管理(AUtoSegmentSpaceManagement,ASSM)0自动段空间管理(ASSM),它首次出现在OraCIe9.2中。自由列表FREE1.lST被位图所取代,它是一个二进制的数组,能够迅速有效地管理存储扩展和剩余区块(FreeBlock),因此能够改善分段存储本质。ASSM会忽略PCTUSED参数而只使用PCTFREE参数。对于MSSM而言,可以设置FREEiJST.PCTUSED和PCTFREE等参数来控制如何分配和使用段中的空间。1.FREE1.lST(自由列表)Oracle通过维护FREE1.IST列表来记录或更新所有可用的数据块。当执行INSERT语句时,OraCle首先在FREE1.IST列表上搜索可用的空闲数据块,搜索成功之后将数据插入那个空闲块。块在(IFREEUST列表中的可用性由PCTFREE参数值来决定。起初一个空块在FREE1.IST列表上列出,并且会一直保留,宜到空闲空间达到PCTFREE设定的值。当一个块被使用且达到PeTFREE设定的值之后,该块将从FREE1.lST列表移除,而当数据块的可用空间低于PCTUSED值的时候,该块又会回收,即重新回到FREE1.IST列表。OraCle使用FREE1.IST方式以提高数据库性能。因此,每一个INSERT操作,OraC数仅仅需要搜索FREE1.IST结构,而不是搜索所有数据块。从OraCIe9i开始,引入了ASSM,它让OraCle自动管理FREE1.IST。在ASSM里,OraCIC使用位图方式来标记数据块是否可用,这种数据块的空间管理方式比用一个列表来管理效率更高。2.PCTFREE(空闲率)和PCTUSED(使用率)PCrFREE和PCTUSED这两个参数是面试中常问到的概念。它们用来优化数据块空间的使用,控制数据块是否出现在FREE1.lST中。当创建或者更改任何表和索引的时候,Oracle在空间控制方面使用这两个存储参数。1)PCTFREE:块中保留用于UPDATE操作的空间百分比,当数据占用的空间达到此上限时,新的数据将不能再插入此块中。当数据块中的FREE空间小于PcTFREE设置的空间时,该数据块从FREE1.IST中去掉,当块由于DM1.操作FREE空间大于PCTUSED设置的空间时,该数据库块将被添加在FREE1.IST链表中。对于表和索引来说,该值默认为10%,通过查询DBAJrAB1.ES或DBAM)EXES视图的PC1.FREE列可以获取到该属性的值。该值适用于MSSM和ASSMo2)PCTUSED:指定块中数据使用空间的最低百分比;用于为插入一新行数据的最小空间的百分比。这个值决定了块的可用状态。可用状态的块可以执行插入操作,不可用状态的块只能执行删除和修改,可用状态的块被放在FREE1.lST中。该值只针对表有效,默认值为40%,通过查询DBATAB1.ES视图的PeTJJSED列可以获取到该属性的值。该值仅适用于MSSMo若要修改表的PCTFREE和PCTUSED的值,可以使用A1.TER语句修改。需要注意的是,修改之后只对新块起作用,若要对表中原有的块起作用,则可以使用MOVE重新组织表,SQ1.语句如下:A1.TERTAB1.ETjrEST_1.HRPeTFREE20;A1.TERTB1.ET_TEST_1.HRMOVE;若要修改索引的PcTFREE的值,可以使用如下的SQ1.语句:A1.TERINDEXPKjrESTjHRREBUI1.DPeTFREE20;考点逻辑结构11. 分区表常用数据字典视图有哪些?正确答案:Oracle分区表相关数据字典视图如下:D显示数据库所有分区表的信息:DBAPARTTAB1.ESo2)显示表分区信息,显示数据库所有分区表的详细分区信息:DBAjAB.PARTITIONS。3)盘示r分区信息,显示数据库所有复合分区表的子分区信息:DBA_TAB_SUBPARTITIONSo4)京示分区列,显示数据库所有分区表的分区列信息:DBAPARTKEYCO1.UMNS.5)显示子分区列,显示数据库所有分区表的子分区列信息:DBA_SUBPART_KEY_COUIMNS。考点分区袤12. 分布式数据库与并行数据库有哪些不同点?正确答案:分布式数据库与并行数据库的不同点如下:1)应用目标不同。并行数据库系统的目标是充分发挥并行计算机的优势,利用系统中的各个处理机节点并行完成数据库任务,提高数据库系统的整体性能。分布式数据库系统的主要目的在于实现场地自治和数据的全局透明共享,而不要求利用网络中的各个节点来提高系统处理性能。2)实现方式不同。在具体实现方法上,并行数据库系统与分布式数据库系统也有着较大的不同。在并行数据库系统中,为了充分利用各个节点的处理能力,各节点间可以采用高速网络连接。节点间的数据传输代价相对较低,当某些节点处于空闲状态时,可以将工作负载过大的节点上的部分任务通过高速网传送给空闲节点处理,从而实现系统的负载平衡,在分布式数据库系统中,为了适应应用的需要,各节点间一般采用局域网或广域网相连,网络带宽较低,点到点的通信开销较大。因此,在查询处理时一般应尽量减少节点间的数据传输量。3)各节点的地位不同。在并行数据库系统中,各节点是完全非独立的,不存在全局应用和局部应用的概念,在数据处理中只能发挥协同作用,而不能有局部应用。在分布式数据库系统中,各节点除/能通过网络协同完成全局事务外,各节点具有场地自治性,每个场地都是独立的数据库系统,每个场地都有自己的数据库、客户、CPU等资源,运行自己的DBvS,执行局部应用,具有高度的自治性。考点分布式数据库与并行数据库13. 什么是反连接(AntiJOin)?正确答案:反连接(AntiJoin)也是一种特殊的连接类型,通常用于从一个表中返回不在另一个数据源中的数据行。当做子查询展开时,OraCIe经常会把那些外部WHERE条件为W)TEXISTS.NOT或V>A1.1.的子查询转换成对应的反连接。反连接分为嵌套循环反连接(NESTED1.OOPSNT1.Hint为N1._AJ)、排序合并反连接(MERGEJOINANT1.Hint为MERGE_AJ)和哈希反连接(HASH反INANTl,Hint为HASH_AJ)。需要注意的是,NOTIN和VAA1.1.对NU1.1.值敏感,这意味着NoTIN后面的子查询或者常量集合一旦有NU1.1.值出现,则整个SQ1.的执行结果就会为NU1.1.,即此时的执行结果将不包含任何记录。但是,NOTEXlSTS对NU1.1.值不敏感,这意味着NU1.1.值对NOTEXlSTS的执行结果不会有什么影响。正是因为NOTlN和OA1.1.对NU1.1.值敏感,所以一旦相关的连接列上出现了NU1.1.值,此时Oracle如果还按照通常的反连接的处理逻辑来处理,得到的结果就不对了。为了解决NoT为和VAA1.1.对NU1.1.值敏感的问题,OraCIe推出了改良的反连接,这种反连接能够处理NU1.1.值,OraC这称其为NUll-AWareAntiJoin,如下例:SE1.ECT*FROMDEPTAWHEREDEPTNONOTIN(SE1.ECTDEPIWFROMEMP);IIdOperationXawSotsBytes:SSl(Wt)ITiKI0SE1.ECTSTATDEM1235(20):00:00:01,1l三JOINAXIIKA1235(20)100:00:01I2T三AC三FlUDEPTI4802(0)00:00:01I3三ACCESRU0PI12362(0),00:00:01执行步骤的列OPeratiOn的值为“HASHJOINANTINAw,关键字“NA”就是NUlI-AWare的缩写,表示这里采用的不是普通的哈希反连接,而是改良后的、能够处理NU1.1.值的哈希反连接。在OraCIeUgR2中,OraCIe是否启用NUu-AWareAntiJoin受隐含参数'OPTIMIZERMJ1.JAWARE_ANTIJOTN”控制,其默认值为TRUE,表示启用Null-AwareAntiJoino如果把该参数的值修改为FA1.S3那么表示OraCIe就不能再用NUU-AWareAnti不能了,而又因为NoTIN对Nu1.1.值敏感,所以Oracle此时也不能用普通的反连接。考点SQ1.优化14. 数据库设计过程的输入和输出有哪些内容?正确答案:数据库设计过程的输入包括四部分内容:总体信息需求;处理需求:DBMS的特征;硬件和0S(操作系统)特征。数据库设计过程的输出包括两部分:1)完整的数据库结构,包括逻辑结构和物理结构。2)基于数据库结构和处理需求的应用程序的设计原则。这些输出一般以说明书的形式出现。考点数据库系统的组成与结构15. SQ1.语句的执行过程有哪些?正确答案:Oracle数据库里SQ1.语句的执行过程可以如下图所示。在上图中,可以看到SQ1.语句的执行过程大致分为以下几个步骤:1)当用户提交待执行的目标SQ1.后,Oracle首先会对目标SQ1.进行解析。在这个过程中,OraCle会先执行对目标SQ1.的语法、语义和权限的检查:语法检查(SynIaXCheCk)是检查目标SQ1.的拼写是否正确,例如,错将关键字“FROM”写成“FORM”,将“SE1.ECT”写成“SE1.ET”等。语义检查(SemantiCCheCk)是检查SQ1.语句中的访问对象是否存在及该用户是否具备相应的权限。2)如果目标SQ1.不能通过上述语法、语义和权限的检查,那么该目标SQ1.将解析失败。如果目标SQ1.能通过上述检查,那么接下来OraCIe就会去SGA的共享池中的库缓存中查找是否存在匹配的共享游标。如果找到了匹配的共享游标,那么Oracle就会把存储于该共享游标中的解析树和执行计划直接拿过来重用,这相当于跳过了后续的“查询转换”和“查询优化”这两个步骤,直接进入“实际执行”阶段。3)如果找不到匹配的共享游标,就意味着此时没有可以被重用的解析树和执行计划,那么接下来整个执行过程就进入查询转换这一步。在查询转换过程中,OraCIe会根据一些规则来决定是否对目标SQ1.执行查询转换,这些规则在OraCIe不同的版本里不尽相同。Oracle9i中,查询转换是独立于优化器的,它与优化器的类型无关,但是从OraCleIOg开始,Oracle会对某些类型的查询转换(比如子查询展开、复杂视图合并等)分别计算经过查询转换后的等价改写SQ1.的成本和原始SQ1.的成本。只有当等价改写后SQ1.的成本值小于未经过查询转换的原始SQ1.的成本值时,OraCIe才会对目标SQ1.执行查询转换。在执行完查询转换后,原目标SQ1.可能就被OraCIe改写了,当然也有可能没有改写。4)接下来,OraCle就正式进入了查询优化这个步骤。在这个步骤里,OraCle会根据不同的优化器类型(CBO或RBo)采用不同的判断原则,从执行完查询转换后得到的目标SQ1.的诸多可能的执行路径中选择一条效率最高的路径来作为其执行计划,即查询优化的输入就是执行完查询转换后得到的等价改写SQ1.,其输出就是该目标SQ1.的最终执行计划。5)在得到了目标SQ1.的执行计划后,接下来Oracle就会根据执行计划去实际执行该SQ1.,并将执行结果返回给用户。考点游标16. MVCC的含义是什么?正确答案:在多用户的系统里,假设有多个用户同时读写数据库里的一行记录,那么怎么保证数据的一致性呢?一种基本的解决方法是对这一行记录加上一把锁,将不同用户对同一行记录的读写操作完全串行化执行,由于同一时刻只有一个用户在操作,因此一致性不存在问题。但是,它存在明显的性能问题:读会阻塞写,写也会阻塞读,整个数据库系统的并发性能将大打折扣。MVCC(MUItJ-VersionConcurrent.Control»多版本并发控制)的目标是在保证数据一致性的前提下,提供一种高并发的访问性能。在VVCC协议中,每个用户在连接数据库时看到的是一个具有一致性状态的镜像,每个事务在提交到数据库之前对其他用户均是不可见的。当事务需要更新数据时,不会直接覆盗以前的数据,而是生成一个新的版本的数据,因此一条数据会有多个版本存储,但是同一时刻只有最新的版本号是有效的。因此,读的时候就可以保证总是以当前时刻的版本的数据可以被读到,不论这条数据后来是否被修改或删除。大多数的MySQ1.事务型存储引擎,例如InnoDB、FaICOn以及PBXT都不使用简单的行锁机制,它们都和MVCe机制来一-起使用。MVCC不只使用在MySQ1.中,OraCle、PoStgreSQ1.以及其他一些数据库系统也同样使用它。可以将VVeC看成行级锁的种妥协,它在许多情况下避免了使用锁,同时可以提供更小的开销。根据实现的不同,它可以允许非阻塞读,在写操作进行时,只锁定需要的记录。MVCC会保存某个时间点上的数据快照,这意味着事务可以看到一个一致的数据视图,而不管它们需要运行多久。这同时也意味着不同的事务在同一个时间点看到的同一个表的数据可能是不同的。使用MvCC多版本并发控制相比锁定模型的主要优点是,在MVeC里,对检索(读)数据的锁要求与写数据的锁要求不冲突,所以,读不会阻塞写,而写也从不阻塞读。在数据库里也有表和行级别的锁定机制,用于给那些无法轻松接受MvCC行为的应用.不过,恰当地使用VVCC总会提供比锁更好的性能。17. 如何查找最近Imin内,最消耗Qt的SQ1.语句及会话信息?正确答案:最消耗CPU的SQ1.语句可以根据VSAcnVE_SESSlONJlSTORY视图来获取,取uSESSION-STATE=ONCPU'",若查询最消耗I/OSQ1.语句则可以取"WAITC1.ASS='USERI/O'"。考点性能诊断18. Oracle的异常可以分为哪儿类?正确答案:OraCle将异常分为预定义异常、非预定义异常和自定义异常三种。1 .预定义异常(Predefined)当P1./SQ1.应用程序违反了Oracle规定的限制时,就会隐含地触发一个内部异常,这就是预定义异常。预定义异常用于处理常见的OraCIe错误,对这种异常情况的处理,无须在程序中定义,由OraCIeFl动将其触发。它们全部放在P1./SQ1.自带的标准包中,这样程序员就无须再次定义了。预定义异常大约有20多个,下表是些常见的预定义异常。错误号异常错误信息名称说明ORA-01403N(1.DATA_FOUNDSE1.ECTINTO没有找到数据ORA-01422TOO_MANY_ROWSSE1.ECTINTO返回多行ORA-06501PROGRAMERROR内部错误,需重新安装数据字典视图和P1./SQ1.包ORA-06511CURSORA1.READYOPEN试图打开一个已存在的游标ORA-06530ACCESSINTONU1.1.试图为NU1.1.对象的属性赋值OKA-01012NOT1.oGGEDON没有连接到OracleOKA-OlOOlINVA1.IDCURSOR试图使用一个无效的游标OKA-00061TRANSACTIONBACKEDOUT由于发生死锁事务被撤销ORA-00051TIMEOUTONRESOURCE在等待资源时发生超时ORA-00001DUP_VA1._ONNDEX试图破坏一个唯一性限制ORA-010171.OGIN_DENIED无效的用户名/口令ORA-01476ZEROj)IVIDE试图被零除ORA01722invl11lnumber转换一个数字失败ORA-06500SToRAGEERROR内存不够或内存被破坏触发的内部错误ORA-06502VA1.UE_ERROR赋值操作,变量长度不足,触发该异常ORA-RoWTYPE一VISMATCH宿主游标变量与P1./SQ1.变量有不兼容行类06504型ORA-CO1.1.ECTION_IS_NU1.1.试图给没有初始化的嵌套表变量或者VARRY.f-lJ,>.06531变量赋值SUBSCRIPJ)UTSIDE,IVlT对嵌套或VARRAY索引使用了负数ORA-06532OKA-06533SUBSCRIPTBEYONDCoUNTTAfBVARRAY索引的引用大于集合中兀-素的个数2 .非预定义异常(NonPredefined)非预定义异常用于处理预定义异常不能处理的异常,即其他标准的Oracle错误。使用预定义异常只能处理系统预定义的20多个OraCle错误,而当使用P1./SQ1.开发应用程序时,可能会遇到其他的一些OraeIe错误。例如,在P1./SQ1.块中执行Dv1.语句时违反了约束规定等。在这样的情况下,就可以使用非预定义异常来处理。Oracle提供了2个函数SQ1.CODE和SQ1.ERRM用于返回错误信息。1)SQ1.CODE:返回错误代码。2)SQ1.ERRV:返回与错误代码关联的消息。这样就可以在错误日志表中记录程序在执行过程中发生的错误信息了。3 .自定义异常(USerdefine)自定义异常用于处理与Oracle错误无关的其他情况。对这种异常情况的处理,需要用户在程序中定义,然后显式地在程序中将其触发。预定义异常和自定义异常都是与OraCIe错误相关的,并且出现的OraCIe错误会隐含地触发相应的异常;而自定义异常与OraCIe错误没有任何关联,它是由开发人员为特定情况所定义的异常。当与个异常相关的错误出现时,就会隐含触发该异常。用户定义异常是通过显式使用RAISE语句来触发。当触发一个异常时,控制程序就转到异常块部分,执行错误处理代码。考点程序处理19. 什么叫数据抽象?试举例说明。正确答案:数据抽象是对实际的人、物、事和概念进行人为处理,抽取所关心的共同特性,忽略小本质的细节,并把这些特性用各种概念精确地加以描述,这些概念组成了某种模型。例如,在学校环境中,李英是老师,表示李英是教师类型中的一员,则教师是实体型,李英是教师实体型中的一个实体值,具有教师共同的特性和行为,在某个系某个专业教学,讲授某些课程,从事某个方向的科研。考点数据库系统的组成与结构