一、数据库的进程
<提示>在Windows中如何查看进程
(10g)
:
打开【配置和移植工具】- Administrator Assistant for Windows
找到数据库后点击右键 - 选择【进程信息】,即可查看。
数据写进程DBWR
1、将修改过的数据缓冲区的数据写入对应数据文件
2、维护系统内的空缓冲区
这里指出几个容易错误的概念:
1.当一个更新提交后,DBWR把数据写到磁盘并返回给用户提交完成×
2.DBWR会触发CKPT后台进程×
3.DBWR不会触发LGWR进程×
DBWR是一个很底层的工作进程,他批量的把缓冲区的数据写入磁盘。和任何前台用户的进程几乎没有什么关系,也不受他们的控制。
DBWR在一下情况下会被触发开始工作:
1.服务器进程将脏数据块移入DIRTY列表到达其临界值长度(该长度为DB-BLOCK-WRITE-BATCH的一半)
2.服务器进程搜索一定数量缓存块后仍未找到可用空闲缓存
3.出现超时(约3s内未被启动)
4.CKPT进程会通过LGWR通知DBWR进行写操作
DBWR进程若启动太多频繁,则将降低系统I/O性能;若太久启动一次,则对数据库恢复造成一定影响。
日志写进程LGWR
将重做日志缓冲区的数据写入重做日志文件。
LGWR是一个必须和前台用户进程通信的进程,当数据被修改的时候,系统会产生一个重做日志并记录在重做日志缓冲区内。这个重做日志可以类似的认为是以下的一个结构:
SCN=000000001000
数据块ID
对象ID=0801
数据行=02
修改后的数据=0011
提交的时候,LGWR必须将被修改的数据的重做日志缓冲区内数据写入日志数据文件,然后再通知前台进程提交成功,并由前台进程通知用户。从这点可以看出LGWR承担了维护系统数据完整性的任务。
LGWR在以下情况下触发工作:
1.用户提交当前事务
2.重做日志缓冲区被写满1/3
3.有大于1M 重做日志缓冲区未被写入磁盘
4.每隔3s发生一次超时,启动LGWR
5.DBWR需要写入的数据的SCN号大于LGWR记录的SCN号,DBWR触发LGWR写入
一个LGWR进程可以对多个日志文件组成员操作,以避免某个日志文件损坏的情况下发生错误。
LGWR切换日志时生成一个检查点,通知DBWR写入数据。因为即将覆盖日志文件可能是一个事务修改数据留下的日志。
归档进程
ARCH
当数据库以归档方式运行的时候,Oracle会启动ARCH进程,当重做日志文件被写满时,日志文件进行切换,旧的重做日志文件就被ARCH进程复制到一个或多个特定的目录/ 远程机器。这些被复制的重做日志文件被叫做归档日志文件。
要启动
ARCH
进程,除了数据库要运行在归档模式下外,还需要设置初始化参数
ARCHIVE_LOG_START
为
TRUE
,否则当日志写满之后,数据库会被挂起,等待管理员手动归档之后重新工作。
一个数据库实例可以有多个归档进程,其数量由归档进程参数
LOG_ARCHIVE_MAX_PROCESSES
决定。当归档进程对日志归档时,任何进程无法访问日志文件,直到归档完毕,因此为了加快归档速度,可以启动多个归档进程。
检查点进程CKPT
检查点进程
CKPT
负责执行检查点,并更新控制文件,启用
DBWR
进程将脏缓存块中的数据写入数据文件(该任务一般由
LGWR
执行)。
CKPT
对于许多应用情况的都不是必须的,只有当数据库数据文件很多,
LGWR
在检查点时明显降低性能的星狂下才使用
CKPT
。
CKPT
的作用主要就是:同步数据文件、日志文件和控制文件。由于DBWR/LGWR的工作原理,造成了数据文件,日志文件,控制文件的不一至,这就需要CKPT进程来同步。CKPT会更新数据文件/控制文件的头信息。
检查点的执行间隔如果设置过短,则增加磁盘的
I/O
操作,过长则数据库恢复将消耗太多时间。可以根据以下参数来设置检查点的间隔时间:
LOG_CHECKPOINT_TIMEOUT
:决定执行检查点的时间间隔
LOG_CHECKPOINT_INTERVAL
:设置每产生多少个日志文件数据,系统产生一个检查点
CKPT工作的主要条件如下
1.
在日志切换的时候
2.
数据库用
immediate、transaction、normal
选项
shutdown 数据库时
3.
根据LOG_CHECKPOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT、FAST_START_IO_TARGET 的设置值执行
4.
用户触发
系统监控SMON
系统监控进程
SMON
在市局哭实例启动时,负责对数据库进行回复操作。如数据库非正常关闭,则下次启动时
SMON
将根据重做日志文件对数据库进行恢复。
SMON
在实例启动时执行一次,其他时候则在其他进程需要时重新启动。
SMON
的工作主要包含:
1.
在系统启动时,完成系统实例恢复
2.
清除临时空间
3.
聚结空闲空间
4.
从不可用的文件中恢复事务的活动
5.
OPS中失败节点的实例恢复
6.
清除OBJ$表
7.
缩减回滚段
8.
使回滚段脱机
进程监控PMON
进程监控进程
PMON
在用户进程出现故障时执行进程恢复,并负责清理内存区、释放该进程所使用的资源。例如用户未从数据库退出的情况下直接关闭客户端程序,或由于网络中断而使数据库连接非正常中断,均会由
PMON
清除失效的用户进程,释放用户进程所用的资源。
此外
PMON
进程还会周期性地检查调度程序和服务进程的状态,如果它们失败,
PMON
将尝试重启它们,并释放资源。例如:PMON将回滚未提交的工作,释放锁,释放分配给失败进程的SGA资源。
分布式恢复RECO
RECO
负责解决分布事物中的故障。
在分布式数据库系统中包含了多个数据库实例,他们像一个数据库一样运行,其中任何一个实例都可以修改其他数据库的数据。当由于网络问题,有些远程修改过程处于悬而未决的状态。RECO进程会试图建立与远程服务器的通信,当故障消除后,RECO进程自动解决所有悬而未决的会话。
用户进程User Process
在客户端,负责将用户的SQL语句传递给服务进程,并从服务器段拿回查询数据。
服务进程Server Process
服务进程的分类:
1
、专用服务进程(Dedicated Server Process)
此时各个服务进程是完全独立的,一个服务进程对应一个用户进程,直到用户断开与实例间的连接才会终止。
2
、共享服务进程(MultiTreaded Server Process)
一个服务进程对应多个用户进程,轮流为用户进程服务。可以用少量服务进程通过调度进程为任意数量的用户进程服务。
调度进程
Dnnn
调度进程
Dnnn
是位于用户进程与共享服务进程之间的关键进程。它负责将用户进程分配给空闲的服务进程,并将处理后的结果返回给用户进程。
管理员可根据情况配置多个调度程序,其名称依次为:
D000
、
D111
、
D222
、……、
Dnnn
-The End-