《数据库程序员面试分类真题11.docx》由会员分享,可在线阅读,更多相关《数据库程序员面试分类真题11.docx(33页珍藏版)》请在三一办公上搜索。
1、数据库程序员面试分类真题11筒答题1. 数据库和实例的区别是什么?正确答案:数据库(DatabaSe)是一个数据集合,Oracle数据库将其数据存放在数据文件中。在物理结构上,OraCle数据库必(江南博哥)需的3类文件分别是数据文件、控制文件和联机Redo志文件。在逻辑结构上,OraC控数据库由表空间、段、区和块组成。数据库名称由DBMAME来标识。实例(InStance)是操作Oracle数据库的一种手段。它是由OS分配的一块内存(包括SGA和PGA)和一些后台进程(PMoN、SMONx1.GWR.CKHDBWn等)组成的。一个数据库可以被个实例(SingIeInstance,单实例)或多
2、个实例访问或挂载(RAC,集群)。实例启动时读取初始化参数文件(SPFl1.E或PFl1.E)。实例名称由INSTANCENAME来标识。考点逻辑结构2. 在OraCIe中,数据块、RedO日志块及控制文件数据块的大小分别是多少?如何查询?正确答案:这3种数据块分别介绍如下:D数据块(DataBlock),是读写数据文件的母小单位,默认是8KB,可以通过SQ1.语句“SE1.ECTFI1.E#,NAME,B1.OCK_SIZEFROMV$DATAFl1.E句查询,单位为BYTE2) RedoR志数据块(Redo1.ogBlock),其大小一般等于操作系统的系统块的大小,一般为512B或4096
3、B,可以通过SQ1.语句“SE1.ECTB1.OCKSIZEHKOMV$1.OG:w或“SE1.ECT1.EBSZFROMXSKCC1.E;w查询,单位为BYTE。3)控制文件数据块(ControlFileBlock),默认为16KB,可以通过SQ1.语句“SE1.ECTB1.OCK_SIZEFROMV$C0NTRO1.FI1.E;”查询,单位为BYTE。考点逻辑结构3. 行链接和行迁移有什么区别?正确答案:当一行的数据过长而不能存储在单个数据块中时.,可能发生两种事情:行链接(ROWChaining)或行迁移(RoWVigration)。D行链接:当第一次插入行时,由于行太长而不能容纳在一个
4、数据块中时,就会发生行链接。在这种情况下,OraCle会使用与该块链接的一个或多个数据块来容纳该行的数据。行链接经常在插入比较大的行时才会发生,例如包含1.oNG、1.oNGROW、1.oB等类型的数据。在这些情况下,行链接是不可避免的。行链接通常由INSERT操作引起。2)行迁移:当一个行上的更新操作导致当前的数据增加以至于不能再容纳在当前块,这个时候就需要进行行迁移,在这种情况下,OraCle将会迁移整行数据到一个新的数据块中。一个行迁移意味着整行数据都将会移动,原始的数据块上仅仅保留的是指向新块的一个地址信息。发生行迁移的时候行的ROWID不会改变。行迁移的情况主要是由于表上的PCTFR
5、EE参数设置过小所致,所以必须设置一个合适的PCTFREE参数。可以使用exp/imp工具导入导出来处理行迁移。行迁移通常由UPDATE操作引起。考点逻辑结构4. Oracle数据库块由哪几部分组成?正确答窠:操作系统块是操作系统读写的最小操作单元,也是操作系统文件的属性之当创建一个Oracle数据库时,选择一个基于操作系统块的整数倍大小作为Oracle数据库块的大小。Oracle数据库读写操作则是以Oracle块为最小单位,而非操作系统块。数据库块也称逻辑块或OraCIe块,它对应磁盘上一个或多个物理块,它的大小由初始化参数DBB1.OCKSIZE决定,可以定义数据块为2KB、4KB、8KB
6、、16KB、32KB甚至更大,默认OraCIe块大小是8KB。若一旦设置了OraCle数据块的大小,则在整个数据库生命期间不能被更改。使用一个合适的OraCIe块大小对于数据库的调优是非常重要的。OS在每次执行I/O的时候是以OS的块为单位:Oracle在每次执行I/O的时候是以Oracle块为单位。Oracle块具有以下特点:1)最小的1/0单元。2)包含一个或多个OS块。3)大小由参数DB_B1.OCK_SIZE决定。4)数据库创建时曾置,双据库创建后不能更改。在OraCIe中,不论数据块中存储的是表CrAB1.E)、索引(INDEX)或簇表(C1.USTERTAB1.E),其内部结构都是
7、类似的。OraCle块的结构如下图所示。可用空间行数据数据块头(包括标濮内容和可变内容)表目录行目录由上图可以看出,-个OraCIe块大约由数据块头(BIoCkHeader,包括标准内容和可变内容,CommonndVariableHeader)表目录(TableDirectory)行目录(RowDirectory)可用空间(FreeSpace)和行数据(RowDala)这几部分组成。图中两个箭头表示一个数据块中的可用空间区的容量是可变的。D数据块头:主要包含有数据块地址的一些基本信息(块地址,BlockAddreSS)和段的类型(表段、索引段等)。块头自上而下进行增长。2)表目录:如果一个堆组
8、织表在此数据块中存储了数据行,那么该表的信息将被记录在数据块的表目录中。多个表可以将行存储在相同的块中。3)行目录:此区域包含数据块中存储的数据行的信息,即每个数据行片断(KowPieCe)在行数据中的地址。一个数据块中可能保存一个完整的数据行,也可能只保存数据行的一部分。当一个数据块(DataBloCk)的行目录空间被使用后,即使数据行被删除(DE1.ETE),行目录空间也不会被回收。举例来说,当一个曾经包含50条记录的数据块被清空后,其块头(Header)的行目录仍然占用100B的空间。仅在块中插入新行时,数据库才会重用此空间。4)可用空间:是指可以为以后的更新和插入操作分配的空间,大小受
9、PCTFREE和PCTuSED两个参数影响。可用空间位于块的中部,允许头和行数据空间在必要时进行增长。当插入新行或用更大的值更新现有行的列时,行数据会占用可用空间。导致块头增长的事件包括行目录需要更多的行条目和需要的事务处理插槽数多于最初配置的数目。块中的可用空间最初是相邻的。但是,删除和更新操作可能会使块中的可用空间变成碎片。5)行数据:数据块中行数据包含了表或索引的实际数据。一个数据行可以跨多个数据块。行数据空间自下而上进行增长。考点逻辑结构5. 什么是ASSM和MSSM?PCTFREE和PCTUSED的作用是什么?正确答案:段空间有两种管理方式,分别是手动段空间管理(ManUalSegm
10、entSpaceManagement,MSSM)和自动段空间管理(AUIoSegmentSpaceManagement,ASSM)0自动段空间管理(ASSM),它首次出现在OraCle9.2中。自由列表FREE1.lST被位图所取代,它是一个二进制的数组,能够迅速有效地管理存储扩展和剩余区块(FreeBlock),因此能够改善分段存储本质。ASSM会忽略PCTUSED参数而只使用PCTBREE参数。对于MSSM而言,可以设置EREE1.1ST,PCTUSED和PCTEKEE等参数来控制如何分配和使用段中的空间。1.FREE1.lST(自由列表)Oracle通过维护FREE1.IST列表来记录或
11、更新所有可用的数据块。当执行INSERT语句时,OraCIe首先在FREE1.lST列表上搜索可用的空闲数据块,搜索成功之后将数据插入那个空闲块。块在。FREE1.IST列表中的可用性由PCTFREE参数值来决定。起初一个空块在FREE1.lST列表上列出,并且会一直保留,直到空闲空间达到PCTFREE设定的值。当一个块被使用且达到PCTFREE设定的值之后,该块将从FREE1.lST列表移除,而当数据块的可用空间低于PCTUSED值的时候,该块又会回收,即重新回到FREE1.IST列表。Oraele使用FREE1.lST方式以提高数据库性能。因此,每一个INSERT操作,OraCIe仅仅需要
12、搜索FREE1.lST结构,而不是搜索所有数据块。从OraCIe9i开始,引入了ASSM,它让Oraele自动管理FREE1.IST。在ASSM里,OraCle使用位图方式来标记数据块是否可用,这种数据块的空间管理方式比用一个列表来管理效率更高。2. PCTFREE(空闲率)和PCTUSED(使用率)PCTFREE和PCTUSED这两个参数是面试中常问到的概念。它们用来优化数据块空间的使用,控制数据块是否出现在FREE1.lST中。当创建或者更改任何表和索引的时候,Oracle在空间控制方面使用这两个存储参数。1)PCTFREE:块中保留用于UPDATE操作的空间百分比,当数据占用的空间达到此
13、上限时,新的数据将不能再插入此块中。当数据块中的FREE空间小于PCTFREE设置的空间时,该数据块从FREE1.IST中去掉,当块由于DM1.操作FREE空间大于PCTUSED设置的空间时,该数据库块将被添加在FREE1.lST链表中。对于表和索引来说,该值默认为10%,通过查询DBAJAB1.ES或DBAINDEXES视图的PeT_FREE列可以获取到该属性的值。该值适用$MSSM和ASSMe2)PCTUSED:指定块中数据使用空间的最低百分比:用于为插入一新行数据的最小空间的百分比。这个值决定了块的可用状态。可用状态的块可以执行插入操作,不可用状态的块只能执行删除和修改,可用状态的块被放
14、在FREE1.lST中。该值只针对表有效,默认值为40%,通过雀询DBAJAB1.ES视图的PCTJJSED列可以获取到该属性的值。该值仅适用于MSSMo若要修改表的PCTFREE和PCTUSED的值,可以使用A1.TER语句修改。需要注意的是,修改之后只对新块起作用,若要对表中原有的块起作用,则可以使用MOVE重新组织表,SQ1.语句如下:A1.TERTAB1.ET_TEST_1.HRPCTFREE20;A1.TERTAB1.ETTEST1.HRMOVE;若要修改索引的PCTFREE的值,可以使用如卜的SQ1.语句:A1.TERINDEXPK_TEST_1.HRREBUI1.DPCTFREE
15、20:考点逻辑结构6. Oracle数据库在物理上是由哪些文件组成的?正确答窠:Oracle数据库物理结构如下图所示。Oracle数据库的物理结构由拄制文件(ContrOlFiles)数据文件(DataFiles)、联机Redo口志文件(OnIineRedo1.ogFiles)参数文件(ParameterFile)、归档日志文件(ArChiVe1.ogFiIeS)和密码文件(PaSSWOrdFiIe)组成。D控制文件:包含维护和验证数据库完整性的必要信息,其中记录r数据库的物理结构。例如,控制文件用于识别数据文件和Redo日志文件。每个Oracle数据库都有相应的控制文件,一个数据库至少需要一
16、个控制文件,控制文件属于二进制文件。控制文件的命名格式通常为ctr*Sl。2)数据文件:存储数据的文件。3)联机Redo日志文件:包含对数据库所做的更改记录,一个数据库至少需要两组联机Red。日志文件。联机Redo日志文件也叫在线重做日志文件或联机重做口志文件。4)参数文件:定义Oracle实例的特性,分为SPFI1.E和PFI1.E两种类型的参数文件。5)归档文件:归档文件是联机RedoH志文件的脱机副本,这些归档文件对于介质恢复很重要。6)密码文件:认证哪些用户有权限启动和关闭OraCIe实例。Oracle中逻辑结构包括表空间(TAB1.ESPACE)、段(SEGMENT).I(EXTEN
17、T)和块(B1.OCK)。数据库由表空间构成,而表空间乂由段构成,段乂由区构成,区又由Oracle块构成,即块一区T段表空间一数据库。考点物理结构7. 什么是专用服务器和共享服务器?正确答案:在连接到Oracle数据库的时候,可以有两种连接模式,一种叫作专用服务器连接(DediCatedServer),另外一种叫作共享服务器连接(SharedServer)下面分别讲解这两种连接方式的不同点。专用服务器:每次在对OraCIC进行访问的时候,Oraele服务器的1.istener会得到这个访问请求,然后会为这个访问创建一个新的进程来进行服务。所以说,对于每一个客户端的访问,都会生成一个新的进程进行
18、服务,是一种类似一对一的映射关系。这种连接模式的一个很重要的特点就是UGA(USerGlobalrea,用户全局区)是存储在PGA(PrOgralnGlobalArea,程序全局区)中的,这个特性也很好说明了当前用户的内存空间是按照进程来进行分配的。专用服务器连接模式是Oracle默认的连接模式。共享服务器:也叫多线程服务器(MUlti-ThreadedServer,MTS)若采用共享服务器模式,则在数据库初始化的时候就会创建-一批服务器连接的进程,然后把这些连接进程放入一个连接池来进行管理。初始化的池中的进程数量在数据库初始化建立的时候是可以手动设置的。在连接建立的时候,1.iStener首
19、先接收到客户端的建立连接的请求,然后1.iStener生成一个叫作调度器(DiSPalChCr)的进程与客户端进行连接。调度器把客户端的请求放在SGA(SystemGlobalArea,系统全局区)的一个请求队列中,然后在共享服务器连接池中杳找有无空闲的连接,然后让这个空闲的服务器进行处理。处理完毕以后再把处理结果放在SGA的相应队列中。调度器通过查询相应队列,得到返回结果,再返回给客户端。这种连接模式的优点在于服务器进程的数量可以得到控制,不大可能出现因为连接数过多而造成服务器内存崩溃。但是由于增加了复杂度以及请求相应队列,可能在性能上有所下降。如果在前端使用了WeblogiC的连接池,那么
20、在数据库级别就没有必要再使用共享服务器/,因为这时的用户连接已经在Weblogic层面上得到了控制。其实专用服务器和共享服务器是可以并存的,即使使用了共享服务器,某些管理操作也是必须在专用服务器模式下来做的,比如STARTUP或SHUTDOWN.考点物理结构8. 在OraCle中,什么是延迟段创建(DeferredSegmentCreation)?正确答案:在Oraele11.2,当创建一个空表或者空分区时,为了加快创建速度,OraCIe并不会立即分配初始段和空间,实际的表段(TabIeSCgmCnI)被延迟到第一行数据插入时创建。延迟段创建特性通过DEFERRH1.SEGMENT/REATI
21、0参数控制,默认为TRUE,表示开启该功能。延迟段创建可以节省空间,加快初始化过程,是面向性能和资源的一个优化。可以通过修改参数DEFERRED一SEGMENT_CREATION来关闭这个特性:A1.TERSYSTEMSETDEFERRED_SEGMENT_CREATI0N=F1.ASE:该参数为动态参数,不需要量启数据虚。可以通过如下的SQ1.语句找到所有的空衣(未分配任何区的表):SE1.ECTSEGMENTCREATED,TAB1.EJAME!-,ROMUSERJrAB1.ESWHERESEGMENT.CREATED=N0;延山段创建的限制条件有:1)延迟段创建不支持的表类型包括索引组织
22、表UndCX-OrganiZCdTables)簇表(ClUSteredTables),全局临时表(GlObaITemporaryTables)会话级临时表(SeSSion-SPeCifiCTemporaryTables)、内部表(InternalTables)、TyPed表(TyPedTabIes)、AQ表(AQTabIeS)和外部表(ExternalTables)o2)用户SYS、SYSTEM.PUB1.IC.OUT1.N和XDB下的表不支持延迟段创建。3)延迟段创建不支持位图连接索引(BitmaPJoinIndeXeS)和域索引(DomainIndexes)04)延迟段创建不支持字典管理表
23、空间(DiCtionary-ManagedTablespace,DMT)5)延迟段创建不支持SYSTEM发空间。6)延迟段创建从Oracle11.2.0.2版本开始才开始支持分区和子分区。考点物理结构9. 下列SQ1.语句共创建了多少个段?CREATETAB1.ETESTSEG1.HR(IDNUMBERPRIMARYKEY,NAMEVRCHR2(5),MESGC1.OB);正确答案:创建了0个或4个段。如果数据库环境是OraCIeIlg.且参数DEFERRED_SEGMENT_CREATIO、的值为TRUE(默认为TRUE,衣示开启了延迟段创建),那么这个时候E面的SQ1.语句不会创建任何段。
24、如果数据库环境是OraCleIOg或者数据库环境是OraClCUg且数据库参数DEFERRED_SEGVENT_CREATION设置为FA1.SE,那么题目中的SQI.语句将会创建4个段,分前为1个TAB1.E类型的段、1个索引段(有主键)、一个1.oB段(字段里包含C1.OB类型)、一个U)B索引段(C1.OB类型的字段会自动创建其对应的索引段)。考点物理结构10. Oracle内存结构主要由什么组成?试简单画出其内存结构图。正确答案:Oracle内存结构主要分为共享内存区与非共享内存区,共享内存区主要包含SG(SystemGlobal.rea,系统全局区),非共享内存区主要由PGA(PrO
25、gramGlobalArea,程序全局区)组成,如下图所示。SwEGI曲alAm(SGA)诞(SircamsPod):2,:皿*4数据字典缓存(DataDictionatyCache)保留池(ReservedPOol)和结果缓存(ReSUItCache)共享池的大小由参数SHAREDPOO1.SlZE决定。只要将初始化参数STATISTICS1.EVE1.设置为TYPlCA1.(默认值)或A1.1.,就能启动对共享池的建议功能,若设置为BASIC,则关闭建议功能。2)数据缓冲区(DatabaSeBufferCache):数据缓冲区也叫数据库缓冲区高速缓存,用于缓存从数据文件中检索出来的数据块,
26、可以大大提高查询和更新数据的性能,是数据库实例的重要组成部分。参数Di1.CACHE_SIZE可指定数据缓冲区的大小,需要在参数文件中静态修改。OraCle在处理某个查询时,服务器进程会在BUfferCaChe中查找它所需的所有数据块。如果未在BUfferCaChC中找到所需要的数据块,那么服务器进程会从数据文件中读取所需的数据块,并在BUffetCaChe中添加一个副本。3)RCdo日志缓冲区(Red。1.ogBuffer):对数据库进行修改的任何事务(TranSaCtion)在记录到Redo日志文件之前都必须首先放到Redo日志缓冲区中。Redo日志缓冲区中的内容将被后台进程1.GWR写入
27、联机Red。日志文件(OnlineRedo1.ogFiIeS)中。RedO日志缓冲区是一个循环缓存区,在使用时从顶端向底端写入数据,然后再返回到缓冲区的起始点循环写入。OraCle中所有的DM1.和DD1.操作都会记录志,即便没有提交的Dv1.操作也会记录口志,在指定了N01.0GG1NG时,也会记录一些日志。Red。日志缓冲区大小由参数1.O(1.BUFFER决定,需要在参数文件中静态修改。4)大池(1.argePool):SGA中一个可选的内存区域,大池用来分配大块的内存,处理比共享池更大的内存,用来缓解SharCdPool的负担。大池主要用在3种情况下:若是共享服务器模式时,则在1.ar
28、gePool中分配UGA,若1.argePool没有分配则在SharCdPool中分配。若是专用服务器(多线程服务器MTS,Multi-ThreadedSerVer)连接,则UGA在PGA中创建:语句的并行查询(ParalIelExecutionofStatements),允许进程间消息缓冲区的分配,用来协调并行查询服务器;恢复管理器RMA用于RMAN磁盘I/O缓冲区。大池的大小由参数1.ARGkPO01._SIZE决定,可以动态修改。大池也使用共享池的闩锁机制,但和共享池不同而是,大池并不使用1.RU机制,而是使用1.argeVemOiy1.atCh的保护,因此,大池中缓冲区内的数据不会被置
29、换出来。大池内的数据会利用用户的会话来控制分配和释放大池的空间。如果大池的空间不足,那么也会出现ORA-O4031错误。5) JaVa池(JaVaPool):JaVa池为JaVa命令的语法分析提供服务。Java池也是SGA中的一块可选内存块,其大小由参数JAvA_POO1._SIZE决定。在OracleIOg以后,提供/一个新的JaVa池的建议功能,以讪助调整JaVa池的大小,而建议的统计数据可以通过视图V$.|AVA_POO1._ADV1CE来台询。6)流池(StreamsPool):流池被OraCle流所使用,主要提供专门的SlreamS复制功能,流池是可选用内存块,它也属于SGA中的可变
30、区域。参数STREAMS_POO1._SIZE可以指定流池的大小。如果设置为0,那么当第一次使用Streams复制能时,OraCIe会自动建立此块区域,而自动建立的大小为共享池大小的10%。OraCIe也提供了一个流池的建议功能,来协助调整流池的大小,而建议的统计数据可以通过视图VSSTREAMSPOO1.ADVlCE来查询。2. PGA介绍PG(ProgramGlobalArea,程序全局区)是单个OraCIe进程使用的内存区域,为每个连接到OraCIe数据库的用户进程保留的内存,不属于实例的内存结构。它含有单个进程工作时需要的数据和控制信息。PGA是非共享的,只有服务进程本身才能够访问它自
31、己的PGA区。PGA在进程创建时分配,进程结束时释放。PGA的内容随服务器的模式(专用模式/共享服务器模式)不同而不同。PGA的大小由参数PGA_AGGREGATE_TARGET决定,可动态修改。PGA有如下几个组件:DPrivateSQ1.Area(私有SQ1.区):参考SharedPool部分的介绍。2)CursorandSQ1.ArCaS(游标和SQ1.区):OraclePro*C程序(Prx)*C是OraCle提供的应用程序专用开发工具,它以C语言为宿主语言,能在C程序中嵌入SQ1.语句,进行数据库操作)的应用程序开发人员或OraClC调用接口(OracleCallInterface,
32、OCD程序可以显式打开游标或处理私有SQ1.区。3)SeSSionMelnory(会话内存):保存会话的变量(例如,登录信息)及其他与会话相关的信息。在共享服务器模式下,SessionMemory是共享的。4) WorkArea(工作区):PGA的一*大部分被分配给WorkArea,用来执行如下操作:基于排序的操作,GROUPBY、ORDERBY、RO1.UJP和窗口函数。由于排序需要内存空间,OraCIe利用该内存排序数据,这部分空间称为排序区。排序区存在于请求排序的用户进程的内存中,该空间的大小为适应排序数据量的大小,可增长,但受参数SoRT_AREA_SIZE所限制。HASH连接,大小受
33、基数。HASF1.AREA_SIZE所限制。位图合并,大小受参数BITMAP(ERGE_AREA_SIZE所限制。位图创建,大小受参数CRENTEBITMAPAREASlZE所限制。批量装载操作使用的写缓存。PGA和SGA最明显的差别在于,PGA不是共享内存,是私有不共享的。用户对数据库发起的无论查询还是更新的任何操作,都是在PGA先预处理,然后接下来才进入实例区域,山SGA和系列后台进程共同完成用户发起的请求。PGA起到的具体作用主要有3点:第一,保存用户的连接信息,如会话属性、绑定变量等:第:,保存用户权限等重要信息,当用户进程与数据库建立会话时,系统会将这个用户的相关权限查询出来,然后保
34、存在这个会话区内;第三,当发起的指令需要排序的时候,PGA正是这个排序区,如果在内存中可以放下排序的尺寸,就在内存PGA区内完成,如果放不下,超出的部分就在临时表空间中完成排序,也就是在磁盘中完成排序。3. UGA介绍UGA(USerGIobalArea)保存了会话信息,会话总能访问这部分内存。UGA的位置取决于会话连接到OraCIe的方式。如果是专用服务器连接,那么UGA在PGA中创建:如果是共享服务器连接,那么UGA在SGA的1.argePoOl中创建,若1.argePool没有分配则在SharedPool中分配。PGA和UGA两者间的区别与一个进程和一个会话之间的区别是类似的。尽管说进程
35、和会话之间一殷都是一时一的关系,但实际上比这个更复杂。一个很明显的情况是MTS配置,会话往往会比进程多得多。在这种配置下,每一个进程会有一个PGA,每个会话会有一个UGAI)PGA所包含的信息与会话是无任何关联的,而UGA包含的信息是以特定的会话为基础的。考点内存结构11. 什么是自动PGA内存管理(AUIOmaliCPGAMemoryManagement)?正确答案:若设置参数PGA_AGGREGATE_TARGET为非0,则启用自动PGA内存管理,并忽略所有*_AREA_SIZE的设置,辅如,SoR1.AREA_SIZE、HASH_AREA_SIZE等。默认为启后PGA向自动管理,Orac
36、le根据SGA的20%来动态调整PGA中专用于WOrkArea部分的内存大小,最小为IOMB。如果设置参数M)RKAREASIZEPO1.lCY为MAUA1.(默认值是AUTO),就代表此数据库的PGA管理模式屈于手动管理模式,且在此模式下必须设置SOR1.AREA一SIZE、HASF1.AREA_SIZE等相关参数。考点内存结构12. SHOWSGA和VSSGA的结果有哪些区别?正确答案:SHOWSGA的结果比丫$SGA的结果多一行44TotalSystemGlobalAreao数据。其实,SHOWSGA的结果来源于VSSGA视图。运行命令vi$ORAC1.E_HOME/bin/sq!plu
37、s打开sqlplus文件,匹配SG可以发现这么一行代码:SE1.ECTDECODE(NU1.1./TotalSystemGlobalArea,)NAMECO1.P1.USSHOWSG,SUM(VA1.UE),DECODE(NU1.1.,bytes,)UNITS_CO1._P1.US_SHOW_SGAFROMVSSGAUNION1.1.SE1.ECTNAMENAME_CO1._P1.US_SHOW_SGA,VA1.UE,DECODE(NU1.1.,*,bytes,*)UNITS_CO1._P1.US_SHOW_SGAFROMV$SGA;该行代码的结果和执行ShoWSga可以得到一样的结果,如下:
38、SYSomflhrSHOWSGATotalSystemGlobal.Area1068937216bytesFixedSize2253216byteSVariableSize771755616bytesDatabaseBuffers289406976bytesRedoBuffers5521408bytes在以上结果中,各部分的含义如下:DTotalSystemGlobalArea:其显示目前此SGA的大小,包括FiXedSize、VariableSize、DatabaseBUfierS和RedOBUfferS的大小总和。2)FixedSize:这里存储了SGA各部分组件的相关信息,主要是作为引导
39、SGA创建的区域,OraCIC通过这个区找到SGA其他区,类似一个SGA各个组件的索引。这部分是OraeIe内部使用的一个区,包括了数据库与实例的控制信息、状态信息、字典信息等。当实例被打开时,此块区域就被固定住而不能做任何变动,此区域也可称为FiXCdSGA.不同平台和不同版本下这部分的大小可能不一样。3) VariableSize:它包括SharedPool.JavaPool%1.argePoolStreamsPool、游标区和其他结构。由于这些内存块都是可动态分配的,所以统称为VariabIeSizee4) DatabaseBuffers:其显示数据库高速缓冲区的大小,是SGA中最大的地
40、方,决定数据库性能。为DB_CACHE_S1ZE、DB_KEEP_CACHE_SIZE.DB_RECYC1.E_CACHE_SIZE.DB_NK_CACHE_SIZE的总大小,当然这是SG-TRGET为0的情况,也就亮手动SGA管理模式下,如果是自动SGA管理(SGAjrARGET0),那么这个值根据SGA的分配情况自动进行调整。5)RedoBuffers:其显示RedO日志缓冲区的大小,这部分是实际分配的Redo1.ogBUffer的大小,由初始化参数1.oG.BUFFER根据SGA的最小分配单位granule向上取整得到。考点内存结构13. 什么是ASMM和AMM?正确答案:SMM(Aut
41、omaticSharedMemoryManagement,i动共享内存管理)是OraCIeIOg引入的概念。通过使用ASMM,就不需要手工设理相关内存组件的大小,而只为SGA设置一个总的大小,OraCle的MMAN进程(MeInoryManagerProcess.内存管理进程)会随着时间推移,根据系统负载的变化和内存需要,自动调整SGA中各个组件的内存大小。ASMM的SGA中包含的组件及对应参数见下表。SGA组件如小。会物是否会被ASvM自初始化参数动调节共享池(SharecIPool)大池(1.argePool)JaVa池(JaVaPool)数据库缓冲区(DalabaSeBufferCach
42、e)流池(StreamSPOol,IogR2新增)SHARED_POo1._SIZE1.ARGE_POO1._S1ZEJAVA_POO1._SIZEDB_CACHE_SIZESTREAMS_POO1._SIZEFixedSGA和其他Oracle数据库实例所需要的内存其他的数据库BufferCacheDBnKCACHESIZE,wNDB_KEEP工ACHE_SIZE,DB_RECYC1.ECACHESIZERedo日志缓冲区(RedO1.ogBuffer)1.OGBUFFER结果缓存(ReSUltCache)RESU1.TCACHESIZE在OraCIeIOg,必须将STATlSTICS_1.E
43、VE1.参数设置为TYPlCA1.(默认值)或者A1.1.才能启用ASMM功能,如果将其值设置为BASIa那么会禁用很多新特性,比如AW如ASMM等。如果使用SQ1.*Plus来设置ASMM,那么必须先把SGA中包含的组件的值设置为0。通过设置SGATARGET参数为非零值来启用ASMV功能。在启用ASMM后,OraC在会自动调整SGA内部组件大小.若再手动指定某一组件值,则该值为该组件的最小值。例如,手动设置SGAARGET=8G,SHARED_POO1._SIZE=IG,则ASMM在自动调整SGA内部组件大小时,保证SharedPool不会低至1GB。当设置了SGAjrARGET参数后,O
44、raCle将会收集SGA相关的统计数据,并通过V$SGA_TARGET_ADVICE呈现出来,因此,可以根据这些指导SGAjARGET做相关的调薮以达到最佳情况。OraCIeIOg的ASVM实现了自动共享内存管理,但是具有一定的局限性。所以,在OraCIeIlg中,OraCIe引入了AMM(AUtOmatiCMemoryManageInent,自动内存管理)的概念,实现了全部内存的自动管理。DBA可以仅仅通过设置一个目标内存大小的初始化参数(VEMoRY.TARGET)和可选最大内存大小初始化参数(MEMORYMAXTARGET)就nJ以在大多数案台上实现AMM。AMMnJ以使实例总内存保持相
45、对稳定的状态,OraCIe基于MEMORYT.ARGET的值来自动调整SGA和PGA的大小。如果内存发生变化,实例会H动在SGA和PGA之间做调整。若启用了AMv功能,而SGAjrARGET和PGA_AGGREGATE_TARGET没有显式地被设置,则默认Sgajarget为VEMoRY.target的60%,pga_aggregate_tARGET为MEMoRYTARGET的40%。MEMORJTARGET是动态初始化参数,可以随时修改该参数的值而不用重启数据库。MEMORY_MAX_TARGET作为一个内存上限值,是一个静态参数,它是MEMORYJARGET句以被配置的最大值。当1.oCtSGA初始化参数的值设置为TRUE时,不能启用AMV,该参数的值默认为FA1.SE。由于AMM不支持HUgePage,而ASMM支持HUgePage,所以,在生产库上强烈推荐使用ASMM.考点内存结构14. 如何解决“0RA-00845:MEMORJTARGETnotsupportedonthissystem,错误?正确答案:使用AMM经常出现的一个错误是“ORA-00845