启动实例,必须启动的五个进程。
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进程时,会强制将脏数据写入数据文件
(3) 当脏数据在高速数据缓冲区中存放超过3秒
我在网上看了很多资料,说
值得一提的是在繁忙的生产环境中允许使用DBWR进程,可以通过修改参数DB_WRITE_PROCESSES来设置,但是这个进程的数量不应该超过CPU的核心数,否则多余的DBWR进程不但无法发挥作用,反而会耗费系统资源。
DBWR的触发条件有下面这项也没有时间超过3秒这项:当扫描LRU list达到一定数量还未找到free buffer 时,停止搜索free buffer,直接通知DBWn写脏数据
但我是在清华大学出版社出版的《Oracle从入门到精通》这本书中看到了有这个条件,如果有兴趣的朋友可以在下面留言我们可以讨论。
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来启动多个归档进程。这里启用了多个归档进程就可以把多个归档路径放在不同的文件夹或者磁盘上来保证归档的安全性,哪怕丢失来其中一个或多个归档只要有一个归档路径完好将能保证恢复的可能性。
7. 快照进程(SNPN)
首先要说的就是Oracle的快照最大的功能就是记录数据库性能生成AWR报告。快照进程可以分为手动启用和自动启用。
启用自动快照可以修改dbms_workload_repository.modify_snapshot_settings里面的参数interval表示修改成你想要获取快照的时间,retention表示保存的时间,这就是自动快照,Oracle根据你的设置来自动生成快照。
启用手动快照很简单,直接执行dbms_snapshot. create_snapshot这个包或者执行 @?/rdbms/admin/awrrpt.sql 这个脚本来运行,一般我都是用的脚本。执行成功之后按照提示输入你想要的文件类型、天数、时间段的快照ID和名称生成的AWR报告有html、txt格式,有一点要提一下快照默认保存7天而且中间要是关闭过数据库那么生成AWR报告时就不能跨过这个时间节点。
以上就是我总结的关于Oracle后台进程的一些资料,同时这也是我的第一篇博客,我希望和大家多多交流也欢迎大家指正我的错误。(๑¯◡¯๑)