还剩8页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
1.模式的概念模式是一系列逻辑数据结构或对象的__一个模式只能够被一个数据用户所拥有,并且模式的名称与这个用户的名称相同从数据库理论的角度看,模式是数据库中存储的数据的一个逻辑表示或描述,是一系列数据结构和数据对象的__(既可以是全局逻辑描述也可是局部逻辑描述)调度进程DDN它是位于用户进程和共享进程之间的关键进程,负责将请求队列中的用户进程分配给空闲的服务进程处理,并将处理后的结果返回给用户进程在一个实例中可以同时运行同时多个调度进程,但是至少要为Oracle数据库所用的每种网络协议建立一个调度进程在共享服务器操作模式下,由监听程序来接受用户端传来的用户进程请求,然后将用户进程请求交给合适的调度进程处理如果监听程序无法找到一个合适的调度进程,它将启动一个服务进程来为用户进程提供服务这个专用服务进程并不属于实例,而是oracle网络结构中的一个进程服务进程在共享服务器操作模式下,每个服务进程能够为任何一个用户进程提供服务,而不是固定地为一个用户进程提供服务共享服务器进程的PGA区并不包括任何与用户相关的数据,因为这些数据所有的服务进程都将使用到在共享服务进程的PGA区中,只包含与共享服务进程本身相关的私有SQL工作区部分,其他与会话相关的私有sql工作区部分都保存在SGA区中,这样所有的服务进程都可以访问任何一个会话的信息.共享服务器操作模式下处理用户进程的过程1用户通过使用Oracle工具或执行应用程序在客户端创建一个用户进程,该用户进程将尝试连接到一个数据库实例2客户端计算机通过网络与数据库服务器建立连接位于数据库中的Oracle监听程序探测到用户进程请求后,首先验证用户进程提供的用户和口令,验证通过后将该用户进程分配给一个调度进程3当某个共享服务进程空闲时,它从请求队列中取出一条处理后的SQL语句4共享服务器进程对这条SQL语句进行解析和执行,最后得到它所请求的数据5共享服务进程对这条SQL语句进行解析和执行,最后得到它所请求的数据6调度程序定期地检查返回队列,如果他发现在返回队列中有自己送出请求的处理结果,则将结果取出7调度程序将处理结果返回给用户进程创建实例时启动的共享服务进程数量由初始化参数SHARED_SERVERS在实例运行过程中,Oracle会根据请求队列长度自动调整共享服务器的数量实例中能创建的共享服务进程数量不能超出由初始化参数__X_SHARED_SERVERS指定的值共享服务器操作模式1共享服务器操作模式的概念实质是由少数服务进程为大量用户进程提供服务,使这些进程始终处于繁忙状态,这就是Oracle数据库的共享服务器操作模式2共享服务器操作模式的结构在创建实例时,每个调度进程将自己的监听地址告诉Oracle监听程序,监听程序将根据监听地址把用户进程的请求传递给相应的调度进程一个Oracle实例至少要为它所支持的每一个网络协议启动一个调度进程当用户进程请求连接时,监听程序首先检查该用户进程是否能够使用共享服务进程如果可以,监听程序将这个用户进程的请求传递给当前负荷最轻的调度进程共享服务器操作模式1共享服务器操作模式的概念实质是由少数服务进程为大量用户进程提供服务,使这些进程始终处于繁忙状态,这就是Oracle数据库的共享服务器操作模式数据库操作模式数据库为用户进程提供服务的方式叫做数据库操作模式
一、专用服务器操作模式1专用服务器操作模式的概念在专用服务器操作模式中,Oracle为每一个连接到实例的用户进程启动一个专门的服务进程一个专用服务器进程仅为一个用户进程提供服务各个专用服务进程之间是完全__的,它们不需要共享数据在用户进程连接到实例的整个过程中,专用服务器进程一直存在,直到用户进程断开连接它才被终止2专用服务器操作模式下处理用户进程1用户通过使用Oracle工具或执行应用程序在客户端创建一个用户进程,该用户进程将尝试连接到一个数据库实例2客户端计算机通过网络与数据库服务器建立连接,位于数据库服务器中的Oracle监听程序探测到用户进程请求后,首先验证用户进程提供的用户名和口令,通过后建立一个专用服务器进程为该用户进程提供服务3用户提交一条SQL语句4专用服务器进程首先判断在共享SQL工作区中是否存在类似的SQL语句若不存在,它将为这条SQL语句分配新的共享SQL工作区5解析完成后,服务进程开始在数据库缓存中寻找这条SQL语句对应的数据6开始执行SQL语句7将结构返回给用户Dnnn调的程序进程它实际上时多线程服务器的组成部分,它以后台进程的形式运行它接受用户进程的请求,将它们放入到请求队列中,然后为请求队列中的用户进程分配一个服务进程ARCn归档进程当数据库运行在归档模式下时,归档进程ARCn负责在日志切换后将已经写满的重做日志文件__到归档目标中,以防止写满的重做日志文件被覆盖只有数据库运行在归档模式下,ARCn才启动要启动它,初始化参数ARCHIVE_LOG_START必须设置为TRUERECO恢复进程负责在分布式数据库环境中自动恢复那些失败的分布事务如果在分布式事务处理下(初始化参数DISTRIBUTED_TRANSACTIONS的值设置为大于0,RECO进程会自动启动)当某个分布式事务由于网络连接故障或者其他原因而失败时,RECO进程将尝试与该事务相关的所有数据库进行__,以完成对失败事务的处理工作负责在分布式数据库环境中自动恢复那些失败的分布事务如果在分布式事务处理下(初始化参数DISTRIBUTED_TRANSACTIONS的值设置为大于0,RECO进程会自动启动)当某个分布式事务由于网络连接故障或者其他原因而失败时,RECO进程将尝试与该事务相关的所有数据库进行__,以完成对失败事务的处理工作PMON进程监视进程负责对失败的用户进程或服务进程进行恢复,并释放进程所占用的资源用户可能关闭客户端程序,但是却没有从数据库中退出,或者由于网络的突然中断而造成一个数据库连接的异常终止这时,Oracle将PMON进程来启动清除中断或失败的用户进程,包括清除非正常中断的用户进程留下的孤儿会话,回退未提交的事务,释放会话所占用的锁、SGA区、PGA区等资源此外,它还会定期的检查调度程序和服务程序进程的状态__ION相似,PMON也会定期的被唤醒__ON系统监视进程系统监视进程是在实例启动时负责对数据库进行恢复操作如果上一次数据库是非正常关闭的,当下一次启动实例时,它会自动读取重做日志文件,对数据库进行恢复此外,它还有两个任务*在临时段或临时表空间中回收不再使用的存储空间*将各个表空间中的空闲空间碎片合并在一起在实例运行期间,它也可以定期地被唤醒检查点的相关初始化参数3检查点的相关初始化参数*LOG_CHECKPOINT_TIMEOUT这个参数用于指定检查点执行的最大间隔时间*LOG_CHECKPOINT_INTERVAL这个参数用于指定在出现检查点之前必须写入重做日志文件中的操作系统块的数量*LOG_CHECKPOINT_TO_ALERT用于设置是否将检查点信息记录到警告日志中CKPT检查点进程CKPT检查点进程1检查点的概念“检查点”是一个__当该__发生时,数据库缓存中的脏缓存块被写入数据文件,同时Oracle将对数据库控制文件和数据文件进行更新,以记录下当前的数据库结构和状态在执行了一个检查点后,Oracle知道自己所有以提交事务对数据库所做的更改已经全部被写入到硬盘中了,此时数据库处于一个完整状态在发生数据库崩溃后,只要将数据库恢复到上一个检查点执行时刻即可2CKPT进程的工作*执行检查点和更新控制文家和数据文件*将脏缓存块写入数据文件的任务交给DBWR进程完成 快速提交和组提交2快速提交当用户提交一条COMMIT语句时,LGWR进程会立即将一条提交记录写入到重做日志文件中,然后再开始写入与该事务相关的重做信息这时事务产生的脏缓存块并不会立即被DBWR进程写入数据文件,这称为“快速提交”机制事务提交成功后,Oracle将为该事务生成一个系统变更码(SCN)事务的scn将同时记录在它的提交记录和重做记录中它还有个任务实例没有启动CKPT进程,则由LGWR进程来完成检查点执行任务3组提交数据库中同时存在许多事务,LGWR进程在写入重做日志文件时可以采取“组提交”的方式一个用户提交事务时,LGWR进程开始将该进程的重做记录写入硬盘如果在写入的过程中有其他多个用户也执行COMMIT语句提交事务,这时LGWR进程不能立即将这些事务的重做记录写入硬盘,而必须等待当前的写操作完成当第一个事务的重做记录都被写入到硬盘中后,LGWR进程将被重做日志缓存中的数据一次性全部写入重做日志文件LGWR日志写文件LGWR日志写文件日志写文件负责将重做日志缓存中的重做记录写入到联机重做日志文件前面已经提到,重做日志缓存是一个循环结构,在LGWR进程将缓存中的数据写入重做日志文件的同时,Oracle还能够继续向缓存中写入新的数据1将缓存数据写入重做日志文件的情况*用户通过COMMIT语句提交当前事务*重做日志缓存被写满1/3时*DBWR进程开始将脏数据块写入数据文件*每隔3秒,即发生一次超时,此时会启LGWR与DBWR进程相关的初始化参数2与DBWR进程相关的初始化参数*DB_WRITER_PRI__SSES这个参数用于设置创建实例时启动的DBWR后台进程的数量*DB_BLOCK_CHECKPOINT_BATCH这个参数用于设置每个检查点发生时,DBWR进程写入的脏缓存块的最大数目*DB_BLOCK_RLU_LATCHES这个参数用于设置数据库缓存区中LRU的数量在多处理器系统中,它通常设为处理器数目的一半BDWR(数据库写进程)BDWR(数据库写进程)数据库写进程DBWR负责将数据库缓存中的脏数据缓存块成批写入到数据文件中默认情况下,Oracle只在创建实例时启动一个DBWR进程(称为DBWR)如果数据库中的数据更改操作十分频繁,DBA可以启动等多的DBWR进程以提高写入能力Oracle最多允许启动9个额外的DBWR进程,但是进程数目不应超过系统CPU的数目,因为每个处理器同时只能运行一个DBWR进程在数据库缓存区中,如果某个缓存块的数据被修改,它将被标记为脏但是缓存块并不是一旦产生就立即被DBWR进程写入数据库文件另外,DBWR进程也不是将所有的脏缓存块写入数据文件因为脏缓存块一旦被写入数据文件,它将被标记为空闲缓存块,其中保存的数据将丢失通过LRU算法能够解决这个问题最近未被访问过的缓存块被标记为“冷缓存块”,DBWR进程只将那些同时被标记为“脏”和“冷”的缓存块写入数据文件,这样,那些经常被访问的脏缓存块将继续留在缓存中1将脏缓存块写入数据文件的情况*当用户执行Insert或Update等操作时,会首先将插入的数据写入数据库缓存*当检查点发生时,将启动DBWR进程*当数据库缓存的LRU列表的长度达到初始化DB_BLOCK_WRTCH_BATCH指定值的一半时DBAWR进程将被启动*若发生超时(大约3秒钟内未被启动),DBWR进程将被启动后台进程后台进程oracle进程oracle进程1服务进程它是由oracle自身创建,用于处理连接到实例中的用户进程所提出的请求oracle通过创建服务器进程为连接到数据库实例中的进程服务在9i中可以同时存在两种类型的服务进程*专用服务进程,一个专用服务进程只能为一个用户进程提供服务*共享服务进程,一个共享服务进程可以为多个用户进程提供服务服务进程的任务*解析并执行用户所提交的sql语句;*在sga区的数据库缓存中搜索用户进程所访问的数据,如不存在,则从硬盘中读取*将数据返回给用户进程2后台进程主要作用是以最有效的方式为并发建立的多个用户进程提供oracle的系统服务,这些系统服务包括进行i/o操作、监视各个进程的状态、维护系统的性能和可靠性等*数据库写进程(DBWn)*日志写进程(LGWR)*检查点进程(CKPT)*系统监视进程(__ON)*进程监视进程(PMON)*归档进程(ARCn)*恢复进程(RECO)调度程序进程(Dnnn)用户进程用户进程当用户执行一个oracle应用程序时,或者启动一个oracle工具时,oracle将创建一个用户进程来执行相应的用户任务“连接”和“会话”*连接是一个用户进程与数据库实例之间的一条通信路径*会话是一个用户到数据库的指定连接所以,会话是通过连接建立的同一个用户可以通过建立多个连接来创建到oracle数据库的多个会话实例进程结构实例进程结构它是操作系统中一个__的可以调度的活动,用于完成指定的任务进程与程序的区别在于前者是一个动态概念,后者是一个静态实体;程序仅仅是指令的有序__,而进程则强调执行过程进程可以动态地创建,完成任务后即会消亡1进程类型在oracle系统工作过程中,主要设计到如下两类进程*用户进程在用户连接数据库时会创建一个用户进程*oracle进程oracle进程在创建实例时由oracle本身产生,执行的是oracle自身的代码,用于完成特定的服务功能一个完整的oracle实例由sga区和一系列后台进程组成,如图查询pga区查询pga区*v$sysstat*v$sesstat*v$pgastat*v$sql_workarea*v$sql_workarea_activesql工作区内存分配sql工作区内存分配在oracle中,通过引入一个新的初始化参数pga_aggregate_target,解决了设置pga区中sql工作区大小的难题如果设置了初始化参数pga_aggregate_target,其他pga区相关的area_size参数就不需要再进行设置了设置sql工作区设置sql工作区1sql工作区的概念用户在执行一些包含特殊操作的sql语句时,需要在处理用户会话的服务进程的pga区中创建一些专用的内存结构,这些内存结构统称为sql工作区在执行比较复杂的查询时,常常需要在pga中创建一个比较大的动态缓存区,用户专门执行如下一些必须在内存中进行的操作*排序*连接*__运算这些缓存区称为“sql工作区”比如一条sql语句在执行过程中需要进行大量排序,会在pga中创建一个专用来缓存记录的排序区;如果一条查询语句在执行过程中需要进行散列连接操作,将在pga中创建一个专门用来缓存左连接数据的散列区2sql工作区的特点排序区是最常使用的一种sql工作区,下面将以它为例介绍sql工作区的一些工作特点dba可以调整用户使用的排序区的大小,使用更大的排序区能够显著地提高那些需要进行大量排序操作的sql语句的执行速度每个用户能够使用的最大排序区由初始化参数sort_area_size指定语句执行完毕后排序区保留的大小由初始化参数sort_area_retained_size指定会话内存区2会话内存区会话内存区由于保存用户会话的变量(登录信息)以及其他与会话相关的信息如果数据库处于共享服务器操作模式下,会话内存区将位于sga区中而不是pga区中,因为会话信息被所有的共享服务器进程所使用如果数据库处于专用服务器操作模式下,会话内存区将保存为这个会话提供服务的专用服务器进程的pga去中这时只有这个服务器进程需要使用该会话的会话信息游标游标在__oracle应用程序时(比如plsql或oci程序),将会使用到“游标(Cursors)”的概念一个游标可以看作是命名的数据库连接资源应用程序通过创建并打开一个游标在数据库中获取或更新数据对私有sql工作区的操作是由游标完成的,因此,一个用户能够使用的私有sql工作区数目取决与他能打开的游标数目通过设置初始化参数oper_cursors可以限制用户能够同时打开的游标数目,该参数的默认值为50私有sql工作区的静态区在游标打开时创建,直到游标被显式地关闭时才被释放,而动态区在游标执行完毕一项操作后立即被释放因此,在编写应用程序时,应尽量避免反复地打开和关闭同一项的游标,以提高静态区的利用率pga区pga区程序全局区pga是保存特有服务器进程的数据和控制信息的内存结构,它是非共享的,只有服务器进程本身才能够访问自己的pga区1pga区基础它是每个服务进程所拥有的一块非共享的内存区域,它不属于实例的内存结构,而应当看作是进程结构的一部分pga的内容和结构与数据库的操作模式有关1)私有sql区当一个用户连接数据库时,它将在实例中创建一个会话在私有sql区中包含有绑定变量以及sql语句运行时的内存结构等信息多条相同的sql语句只会建立一共享的sql工作区,当时可以对应于多个私有的sql工作区;如果多个用户执行一条相同的sql语句,每个用户都会为自己的会话创建一个私有的sql工作区,而使用同一个共享sql工作区来保存共享信息因此多个私有sql工作区可能关联到同一个共享sql工作区将一个私有sql工作区与对应的共享sql工作区合并在一起,就可以获得一条sql语句的完整存储数据每个会话的私有sql工作区可以分为两部分*静态区静态区中的内容在会话过程中始终保持不变,其中包含有绑定变量等在会话过程中需要一直使用的信息直到会话结束时,静态区才被释放*动态区动态区中的内容在会话过程中是不断变化的,一旦sql语句执行完毕,动态区就被释放通常oracle在开始执行sql语句时创建动态区,对于insert、uodata和delete语句来说,一旦语句执行完毕,动态区被立即释放对于select语句来说,oracle将等到所有的查询结果都被返回后才释放动态区。