在Oracle中有两类进程,分别是用户进程和Oracle进程
1.用户进程
在客户端创建
1)连接
连接时用户进程与服务器进程之间的一个通信通道。如果用户进程与服务器进程在同一台计算机上,
就通过IPC(内部进程间调用)的通信机制建立连接,否则通过网络硬件,网络协议建立连接
2)会话
会话是用户与实例之间的特定通信方式。一个会话是存在于实例中的逻辑实体。它是一个表示唯一会话的
内存数据结构的集合,用于执行SQL、提交事务并运行服务器中存储过程等。
2.Oracle进程:分为服务器进程和后台进程
1)服务器进程
用户进程必须通过服务器进程才能访问数据库。服务器进程又分为专用服务器进程和共享服务器进程。
服务器进程主要完成如下任务:
a)解析并提交用户提交的SQL语句。
b)搜索SGA区的数据库缓存,决定是否读取数据文件。
c)将查询或执行后的数据(或错误信息)返回给用户。
2)后台进程
主要的后台进程
进程名 | 简写 | 是否可选 |
system monitor(系统监视进程) | SMON | |
process monitor(进程监视进程) | PMON | |
database writer(数据库写进程) | DBWn | |
log writer(日志写进程) | LGWR | |
checkpoint(检查点进程) | CKPT | |
archiver(归档进程) | ARCn | 可选 |
recoverer(恢复进程) | RECO | 可选 |
lock(锁进程) | LCKn | 可选 |
recovery writer(恢复写进程) | RVWR | 可选 |
change tracking writer(变化跟踪写进程) | CTWR | 可选 |
job queue monitor(作业队列监视进程) | CJQn | 可选 |
job queue(作业队列进程) | Jnnn | 可选 |
dispatcher(调度进程) | Dnnn | 可选 |
Shared Server(共享服务进程) | Snnn | 可选 |
注意:简写的进程名(都是4个字母或数字的组合)中的n表示根据任务的多少,该进程金可以有多少个正在运行。如有四个数据库写进程正在运行,则进程名为DBW0,DBW1,DBW2,DBW3.
a)DBWn
该进程的作用是:
A)管理数据高速缓存区,保证服务器进程总能找到空闲缓存块,以便保存读取的数据块
B)在满足一定条件时,将DIRTY列表中的最近未被访问的脏缓存块成批的写入数据文件,以便获得更多的空闲缓存块
C)使用LRU算法将最近正在使用的缓存块继续保留在LRU列表中。
D)通过延迟写来优化磁盘IO性能。
启动DWRn进程的条件是:
A)当dirtry列表中的脏块达到DB_BLOCK_WRITE_BATCH指定值的一半时。启动进程将一部分脏块写入数据文件
B)当服务器进程在LRU列表中查找了DB_BLOCK_MAX_SCAN指定的数量的缓存块但还没有找到足够的空闲块时,
启动进程将部分脏块写入数据文件
C)DWRn进程出现超时,即大约3秒钟未启动时启动。
D)当出现检查点,LGWR进程通知DWRn进程进行写操作,可以使用DB_BLOCK_CHECKPOINT_BATCH来设置
每当出现检查点时,DBWR写入脏块的数量
E)一个表空间被置于备份模式,脱机状态或只读状态。
注意:Oracle系统启动的DBWn数量受DB_WRITE_PROCESSES的限制,默认为1,Oracle最多允许启动20个,
但不应超过系统CPU的数目,因为每个处理器同时只能运行一个DBWn 进程
b)LGWR
进程启动的条件是:
A)用户进程通过commit语句提交当前的事务。
B)重做日志缓存被写满1/3时,或含有1MB的重做信息时。
C)DBWn进程需要为检查点清除脏缓存块,即将脏缓存块写入数据文件。
D)LGWR进程出现超时,即大约3秒钟未启动LGWR进程。
c)CKPT
概述:检查点是一个事件,当该事件发生时,数据高速缓存中的脏缓存块被写入数据文件,同时Oracle将对控制文件
和数据文件的头部的同步序号,即SCN,进行修改,记录下当前数据库的结构和状态,以保证数据库中物理文件
之间的同步,通常情况下,检查点发生在重做日志文件切换时。
CKPT进程的作用就是执行检查点,即:
A)触发DBWn进程,使其将上一个检查点之后的全部脏缓存块写入数据文件。
B)用最新的检查点信息更新控制文件和数据文件的文件头,使其同步。
Oracle在不同时刻执行不同级别的检查点,oracle有如下几种检查点:
A)数据库检查点:在每一次重做日志切换时,执行数据库检查点。使用normal,transctional,immediate选项
关闭数据库时,会执行一个检查点。
B)表空间检查点:在将一个表空间设置为脱机状态或BACKUP模式时,执行一个表空间检查点。此时,DBWn只会
把与该表空间相关的脏缓存块写入数据文件。
C)手动检查点:可以使用alter system checkpoint语句来手工设置一个检查点。
D)时间检查点:即每个多长时间执行一次检查点。
与检查点相关的初始化参数如下:
A)log_checkpoint_timeout:用于指定检查点执行的最大时间间隔(以秒为单位)。如果将该参数设置为0,将
禁用基于时间的检查点。
B)log_checkpoint_interval:用于指定在出现检查点之前,必须写入重做日志文件中的操作系统块(不是数据库
块)的数量。
C)log_checkpoint_to_alert:用于设置是否将检查点信息记录到警告日志文件中。
d)SMON
该进程的作用:
A)在实例启动时负责对数据库进程恢复。如果上一次数据库是非正常关闭的,则下一次启动实例时,SMON进程会
自动读取重做日志文件对数据库进程恢复。
B)清除已经分配单不再使用的表空间中的临时段。基于数据字典管理的表空间,如果有大量盘区,那么清除临时段
将花费非常多的时间,这可能导致数据库启动时的性能问题。
C)合并基于数据字典管理的各个表空间中位置相邻的空闲盘区,使之更容易分配。如果某个表空间的存储参数
pctincrease被设置为0,SMON就不会对该表空间的空闲盘区进程合并操作。
SMON除了在实例启动时执行一次外,也会被Oracle定期唤醒,如果其他进程需要使用到SMON的功能,他们将随
时唤醒SMON进程。
e)PMON
该进程的作用是:
A)恢复中断或失败的用户进程,服务器进程。
B)清除非正常中断的进程留下的孤儿会话。
C)回退为提交的事务,重置活动事务表的状态,从系统活动进程表中删除用户进程标识号
D)释放进程所占用的各种资源,并通过自动回退事务来解决死锁,释放用户所拥有的表和行上的锁。
E)定期检查服务器进程和调度进程,如果他们因失败而被异常挂牵,则重新启动他们。
PMON也会被Oracle定期唤醒,如果其他进程需要使用到PMON的功能,他们将随时唤醒PMON进程。
f)ARCn
该进程负责在重做日志文件切换后将已经写满的重做日志文件复制到指定的归档日志文件中。
参数:
A)log_archive_start设置为true,数据库将具有自动归档功能。如果为false,即使运行在归档模式下ARCn也
不会被启动。这时当重做日志文件全部被写满后,数据库将被挂起,等待DBA进行手工归档。
B)log_archive_max_processes确定归档进程的最大数量,一个实例最多有10个归档进程。
C)log_archive_dest指定了归档日志文件的位置。
D)log_archive_format指定了归档日志文件的命名格式。
g)Dnnn
调度进程接受用户进程的请求,并将它们放入请求队列中,然后为请求队列中的用户进程分配一个共享的服务器进程
oracle使用的每一种网络协议,数据库实例都至少要为其建立一个调度进程。
例如,下面的设置要求数据库实例为TCP/IP建立5个调度进程,为SPX/IPX协议建立3个调度进程。
MTS_DISPATCHERS='(PROTOCOL=TCP) (DISPATCHERS=5)'
MTS_DISPATCHERS='(PROTOCOL=SPX) (DISPATCHERS=3)'
h)RECO
该进程的功能类似于PMON,只不过该进程用于分布式事务处理中。当某个分布式事务由于网络连接故障或其他
原因而失败时,RECO进程尝试与该事务相关的所有的数据库进行联系,以完成对失败的事务的处理工作。RECO
一般不需要DBA干预,它会自动完成任务。
初始化参数 distributed_transactions的值大于0,则RECO进程就会自动启动。如果设置为0,就不启动。
i)LCKn
在Oracle并行服务环境中,多个数据库实例可以同时操作相同的数据库对象。为了避免进程间在数据存取时发生
冲突,使用LCKn来管理资源。该进程最多可以有10个