Oracle实例的进程结构
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle 实例的进程结构
进程是操作系统中一个独立的可以调度的活动,用于完成指定的任务。进程与程序的区别在于前者是一个动态概念,后者是一个静态实体。程序仅仅是指令的有序集合,而进程则强调执行过程。进程可以动态地创建,当完成任务后即会消亡。
在Oracle 系统工作过程中,主要涉及到如下3类进程:
● 用户进程 在用户连接数据库时会创建一个用户进程。用户进程执行的是一个应用
程序或Oracle 工具程序的代码,以完成用户指定的任务。用户进程不是实例的组成部分。
● 服务器进程 这些进程根据客户的请求来完成工作。
● 后台进程 这些进程随数据库而启动,用于完成各种维护任务,如将数据块写至磁
盘进程DBWR 、维护在线重做日志进程LGWR 、清理异常中止的进程等。
图2-6显示了服务器进程、用户进程和后台进程之间的关系。 共享池数据缓冲区日志缓冲区
SGA
Data Data Data Data Data Data Data 数据文件日志文件组
DBWR
ARCH 磁盘或
磁带CKPT 服务器进程LGWR 用户进程PMON LCKn SMON RECO
图2-6 服务器进程、用户进程和后台进程之间的关系
1 用户进程
当用户执行一个Oracle 应用程序时,或者启动一个Oracle 工具时(如SQL*Plus ),Oracle 将创建一个用户进程来执行相应的用户任务。与用户进程相关的有两个概念:“连接”和“会话”。
连接是一个用户进程与数据库实例之间的一条通信路径,这条通信路径通过操作系统平台中的进程间通信机制或网络连接来实现。会话则是一个用户到数据库的指定连接。例如当一个用户启动SQL*Plus ,并输入正确的用户名和密码连接到一个数据库库后,就为该用户创建了一个会话。会话在用户连接到实例的过程中始终存在,直到用户断开连接或终止应用程序为止。
可以看出,会话是通过连接来建立的。同一个用户可以通过建立多个连接来创建到
Oracle数据库的多个会话。例如,一个用户可以使用同一个账户启动多个SQL*Plus程序来对数据库进行操作。可以在SQL*Plus中查询动态性能视图V$SESSION来查看实际的会话:SQL> connect system/admin
已连接。
SQL> select username,sid,serial#,server,status
2 from v$session
3 where username=USER;
USERNAME SID SERIAL# SERVER STA TUS
------------------------------ ---------- ---------- --------- --------
SYSTEM 130 66 DEDICATED ACTIVE
2 服务器进程
服务器进程就是代表用户会话完成工作的进程,应用向数据库发送的SQL语句就是由这些进程接收并执行。在Oracle数据库中可以同时存在两种类型的服务器进程:一种类型是专用服务器进程,一个专用服务进程只能为一个用户进程提供服务;另一种是共享服务进程,一个共享服务进程可以为多个用户进程提供服务。
专用服务器进程和共享服务器进程的任务是相同的:
●解析并执行用户所提交的SQL语句。
●在SGA区的数据缓存区中搜索用户进程所访问的数据;如果数据不在缓存中,则
需要从硬盘数据文件中读取所需的数据,再将其复制到缓存中。
●将数据返回给用户进程。
3 后台进程
Oracle实例包括两部分:SGA和一组后台进程。在任意一个刻,Oracle数据库可以处理多个并发用户请求,进行复杂的数据操作,与些同时还要维护数据库系统使其始终具有良好的性能。为了完成这些任务,Oracle具有一组后台进程保证数据库运行所需的实际维护任务。
可以使用一个V$BGPROCESS视图查看所有可能的Oracle后台进程,图2-7展示了有一个中心用途的Oracle后台进程。
PMON
SMON RBCO SGA
块缓存区重做日志缓存区
远程数据库
CKPT DBWn LGWR ARCn
LMDO
LCKn
LMSn
LMON
远程数据库
集群实例
数据文件
联机重做文件归档日志
图2-7 中心后台进程
启动实例时并不会全部看到所有这些进程,有一些进程只有在特殊情况下才会存在。例如,当数据库在归档模式下,则会启用归档进程ARCn;如果运行了Oracle RAC,这种Oracle 配置允许一个集群中不同机器上的多个实例装载并打开相同的物理数据库,这时就会启动LMD0、LCKn、LMON和LMSn等进程。只有DBWR、LGWR、CKPT、SMON和PMON 等进程是实例所必需的。本节将介绍Oracle实例中常见的一些后台进程。
1.DBWR(数据写进程)
数据写进程DBWR负表将缓存区中的数据写入到数据文件,它是管理缓存区的一个Oracle后台进程。当数据缓存区中某个缓冲块的数据被修改,它被标志为“弄脏”。DBWR 的主要任务是将“弄脏”的缓存块的数据写入磁盘,使缓冲区保持“干净”。需要注意,只有在满足一定的条件时,DBWR进程才开始成批地将脏缓存块写入数据文件,这样做能够尽量避免DBWR进程与其他进程之间发生I/O冲突,并且减少数据库执行物理I/O操作的次数。
另外,DBWR进程也不是将所有的脏缓存块写入数据文件,因为脏缓存块一旦被写入数据文件,它将被标记为空闲缓存块,其中保存的数据将丢失。如果随后立即有其他的用户进程需要访问脏缓存块中以前所保存的数据,Oracle需要重新到数据文件中去读取数据。为了避免这样的缓存失败,可以通过LRU算法能够解决这个问题。将那些经常被访问的脏缓存块继续保留的缓存中,而将最近未被访问过的缓存块标记为“冷缓存块”,DBWR进程只将那些同时被标记为“脏”和“冷”的缓存块写入数据文件。
只有发生下列情况时,DBWR进程才开始将脏缓存块写入数据文件:
●当用户进程执行INSERT和UPDA TE等操作时,会首先将插入的数据写入数据缓
存。在这个过程中,如果Oracle在数据缓存的LRU列表中搜索了一定数量的缓存
块后,仍然没有找到可用的空闲缓存块,DBWR进程被启动。由DBWR进程将脏
缓存块写入数据文件,以获得更多的空闲缓存块。
●当出现检查点时,LGWR将通知DBWR进行写操作。
●当将缓存区的脏数据块移入到脏列表时,如果脏列表达到临界长度时,将通知
DBWR将脏数据块写入到数据文件。该临界长度是为初始化参数