SMON是系统监视器(System Monitor)的缩写。如果Oracle实例失败,则在SGA中的任何没有写到磁盘中的数据都会丢失。
基本简介
有许多情况可能引起Oracle实例失败,例如,操作系统的崩溃就会引起Oracle实例的失败。当实例失败之后,如果重新打开该数据库,则背景进程SMON自动执行实例的复原操作。
DBWR是数据库书写器(Database Write)的缩写.该服务器进程在缓冲存储区中记录所有的变化和数据,DBWR把来自数据库的缓冲存储区中的
脏数据写到数据文件中,以便确保数据库缓冲存储区中有足够的空闲的缓冲存储区。
脏数据就是正在使用但是没有写到数据文件中的数据。
LGWR是日志书写器(Log Write)的缩写。LGWR负责把重做日志缓冲存储区中的数据写入到重做日志文件中。
CKPT进程是检查点(Checkpoint)的缩写。该进程可以用来同步化数据库的文件,它可以把
日志中的文件写入到数据库中。
PMON是进程监视器(Process Monitor)的缩写。当取消当前的
事务,或释放进程占用的锁以及释放其它资源之后,PMON进程清空那些失败的进程。
操作流程
Oracle数据库中值得我们学习的地方有很多,在这篇文章里我们主要讲述的是Oracle SMON进程,主要介绍的是归档进程ARCH等一些方面的知识。我们大家都知道在Oracle数据库中有两个进程非常的渺小,但是其作用却是非常的巨大。
由于其比较小而往往被
数据库管理员所忽视。笔者这次就给大家提醒提醒,不要忽视了这两个进程的作用。如果利用的好的话,会减少系统管理员不少的工作。
这个进程对于
Oracle数据库来说,可以利用一句话来概括,即人小鬼大。其负责的内容并不是很多,但是对于数据的安全与数据库的性能却有很关键的作用。如随着
表空间中的数据不断的建立、删除、更新等等,在表空间中难免会产生碎片。由于这些碎片的存在,数据库的性能会逐渐的降低。而现在
系统监视进程SMON的作用,就可以解决这些碎片。
Oracle SMON进程会将各个
表空间的空闲碎片合并在一起,让
数据库系统更加容易分配。从而提高数据库的性能。另外,在数据库运行的过程中,会因为断电或者其他的原因而发生故障。此时由于数据高速缓存中的脏缓存块还没有来得及写入到数据文件中,从而导致数据的丢失。
在数据库启动的时候,
系统监视进程SMON会在下一次启动例程的时候,自动读取重做日志文件并对数据库进行恢复。也就是说,进行将已提交的事物写入数据文件(已经写入到日志文件中而没有写入到数据文件中的数据)、回退未提交的
事务操作。可见,Oracle SMON进程是一个比较小但是却非常重要的角色。
在管理这个进程的时候,笔者认为主要需要注意两个问题。一是其启动的时机。一般情况下,例程重新启动的时候,会启动这个
系统监视进程。然后在这个例程运行期间,这个进程也会被系统定期的唤醒,然后其会检查是否有工作需要其完成。最重要的是,在有需要的时候,
数据库管理员可以通过其他进程来启动这个SMON系统
系统监视进程,来完成一些特定的工作。
SMON的作用还包括合并空闲区间(coalesces free extent)。早期Oracle采用DMT字典管理表空间,不同于今时今日的LMT本地管理方式,DMT下通过对FET$和UET$2张字典基表的递归操作来管理区间。SMON每5分钟(SMON wakes itself every 5 minutes and checks for tablespaces with default pctincrease != 0)会自发地去检查哪些默认存储参数pctincrease不等于0的字典管理表空间,注意这种清理工作是仅针对字典管理表空间的,而LMT本地管理表空间则无需,也不会合并。SMON对这些字典管理表空间上的连续相邻的空闲Extents实施合并(
coalesce)操作以合并成一个更大的空闲Extent,这同时也意味着SMON需要维护FET$字典基表。
二、归档进程ARCH
在重做
日志文件管理中有归档与非归档两种模式。在
日志进行切换时,如果不对原先的日志文件进行归档,而直接覆盖的话,就叫做非归档模式。相反,在写入下一个日志文件的时候,会先对目标日志文件进行归档,这就叫做归档模式。归档进程ARCH就是负责在重做日志文件切换后将已经写满的重做日志文件复制到归档日志文件中,以防止循环写入重做日志文件时将其覆盖。
所以说,只有数据库运行在归档模式时,这个ARCH进程才会被启动。在任何一种操作模式下,重做日志文件都会被循环使用。所以当LGWR进程在进行日志切换,需要用到下一个日志文件时,则数据库会被暂时的挂起,进行目标日志文件的归档工作。
直到这个目标重做日志文件归档完毕后,数据库才会恢复正常。所以说,
归档日志的操作,有时候也会影响数据库的性能,特别是当需要进行频繁的大批量数据更改的时候。
那么有什么方法可以提高归档作业的效率呢?笔者如下一些建议可供
数据库管理员参考。