今天插播一条“小新闻”,主要是昨天看了一下组员的考核题,突然发现了有下面这样一道题,我当时也没有答上来,所以就特意去百度了一下,和大家分享。

考题:

ps -ef|grep smon”命令是为了查看服务上存放了哪些数据库(  )

这道题的正确答案是(错)

大家有没有考虑过ps -ef | grep smon 和 ps -ef | grep pmon 有什么区别?

可能大家都会说:第一个是找含smon的,第一个是找含pmon的。

那么它俩到底有什么不同呢?
PMON进程:该进程在用户进程出现故障时执行进程恢复,负责清理内存储区和释
放该进程所使用的资源。
SMON进程:该进程实例启动时执行实例恢复,还负责清理不再使用的临时段。

 

在这里给大家拓展一下下,哈哈,对于不是助攻数据库专业的朋友们,了解即可。

Oracle后台进程是服务于Oracle服务器端的后台程序,是Oracle实例重要的组成部分。其中SMON、PMON、DBWR、LGWR、CKPT这五个后台进程必须正常启动,否则会导致数据库崩溃,此外还有很多辅助进程用于实现特定的功能,如果这些辅助进程发生问题,只会使某些功能受到影响,一般不会导致数据库实例崩溃。
 

1.     数据写入进程(DBWR)

数据写入进程的主要任务是负责将内存中的脏数据写入数据文件中。脏数据指的是高速数据缓冲区(Database Buffer cache)中存放的数据,这些数据块和数据文件中的数据块内容不一致。高速数据缓冲区可以分为三个区域:

A.脏数据区:存放着已被修改过的数据,这些数据等待被写入到数据文件中。

B.空闲区:空闲区中的数据块不包含任何数据,这些数据块可以被写入数据,Oracle可以从数据文件中读取数据块,并将其存放到该区中

C.保留区:包含那些被用户访问的数据块和明确保留以作为将来使用的数据块。

其中最主要的是脏数据区,但是DBWR不是及时的把所有的脏数据都写入数据文件,只有在满足一定条件都时候才会自动把脏数据写入数据文件,这样都好处是显而易见的,尽量的减少I/O操作,提高Oracle服务器性能。

DBWR的触发条件:

(1)    当高速数据缓冲区没有足够大的空间来存放新数据

(2)    当触发CKPT进程时,会强制将脏数据写入数据文件

 

2.    日志写入进程(LGWR)


日志写入进程主要是将日志缓冲区的数据写入重做日志文件。Oracle系统首先会将用户所做的修改写入日志文件,然后在将修改结果写入数据文件。

Oracle实例在运行的过程中会产生大量的日志,这些信息首先会被记录在SGA的重做日志缓冲区(Redo logbuffer),然后也是在发生一定条件时才会写入重做日志,一个日志组写满时它会自动切换日志组当所有日志组都写过一遍之后将会重新转向第一个日志组覆盖掉第一个日志组,当日志组写满之后转向另一个日志组的这个动作我们称之为日志切换,这里的日志切换是自动完成的也可以使用命令alter system  switch logfile来手动切换。

LGWR触发条件:

(1)    当用户提交事务时

(2)    当重做日志缓冲区满1/3时

(3)    日志信息在日志缓冲区存放超过3秒

(4)    DBWR执行写入之前

3.    检查点进程(CKPT)

检查点进程可以把它看做一个事件,当检查点事件发生时检查点进程会要求DBWR将某些脏数据写入数据文件中,同时LGWR也会开始写入日志,同时这两个动作组成了这个检查点事件,从某种意义其实也可以把CKPT看做LGWR的触发条件但是因为这不是直接触发所以我在LGWR的触发条件中没有写。

说道这里还必须说下检查点的分类,同时也要引入一个概念SCN(system changenumber),每次发生完全检查点时进程会修改文件的头部信息也就是SCN号,这个SCN号是累积递增的,这个SCN号不光是存在于数据文件同时也存在于控制文件中,并且控制文件和数据文件的SCN号要正确匹配才能打开数据库,所以检查点在基于SCN号的基础上可以分为两类。

(1)    局部完全检查点:实例针对某个数据文件执行一个检查点操作

(2)    全局完全检查点:实例针对所有数据文件执行一个检查点操作

这一部分我看网上很多资料说还有什么增量检查点,不改变SCN号的情况下按照DML操作来执行。我总感觉这个检查点不像是CKPT进程会触发的,因为CKPT肯定会更新SCN号的,所以我就没写上去。

4.    系统监控进程(SMON)

这是Oracle非常重要的进程它的功能包括但不限于:

(1)    系统监控进程在数据库系统启动时执行恢复工作的强制进程。比如在共享服务器模式下,SMON可以恢复另一个处于失败的数据库,使系统切换到另外一台正常的服务器上。

(2)    回收空间。系统监控进程把表空间中空闲并且相邻的Extent合成一个较大的空闲扩展区,这需要表空间这pctincrease设置为非零值。

(3)    清理临时空间和临时段。系统监控进程在数据库启动时自动清理表空间中的临时段,或者一些异常操作遗留下来的临时段,例如当创建索引过程中,创建期间分配给索引的segment被标志为temporary,如果创建期间这些会话因某些原因异常终端,SMON负责清理这些临时段。

5.    进程监控进程(PMON)

这也是Oracle非常重要重要的进程它的功能包括但不限于:

(1)    监控后台进程的运行状态

(2)    如果某些用户进程异常中断,PMON会去释放会话所用资源

 

6.    归档进程(ARCH)

归档进程是一个可选择的进程,只有当数据库处于归档模式时该进程才会启动。这个进程主要的作用就是当每个日志组即将被覆盖之前,先由归档进程把日志文件中的日志信息读出,然后再把这些读出的日志信息写入到归档日志中。

这里可能产生的情况就是系统比较繁忙的时候LGWR进程会处于等待ARCH进程,这时可以修改参数LOG_ARCHIVE_MAX_PROCESSES来启动多个归档进程。这里启用了多个归档进程就可以把多个归档路径放在不同的文件夹或者磁盘上来保证归档的安全性,哪怕丢失来其中一个或多个归档只要有一个归档路径完好将能保证恢复的可能性。

 

更多推荐

Oracle小知识点之smon和pmon