
Oracle数据库的进程结构是其高可用性与性能的核心,由用户进程、服务器进程和后台进程三类组成。后台进程是实例稳定运行的关键,负责内存管理、I/O协调、故障恢复等任务。以下从核心进程功能、故障影响及排查命令三方面展开详解:
📊 一、核心后台进程功能与故障影响
1. PMON(进程监控进程)
- 功能:
- 监控用户进程与服务器进程,清理异常终止的进程(如回滚未提交事务、释放锁、SGA资源)。
- 向监听器动态注册实例信息,支持连接负载均衡。
- 故障影响:
- 会话资源无法释放 → 锁堆积 → 业务阻塞(如
enq: TX - row lock contention等待事件)。 - 示例:用户进程异常退出后,PMON未清理其持有的表锁,导致其他会话无法修改该表。
- 会话资源无法释放 → 锁堆积 → 业务阻塞(如
- 排查命令:
-- 检查PMON状态及阻塞会话 SELECT * FROM V$SESSION WHERE TYPE = 'BACKGROUND' AND PROGRAM LIKE '%PMON%'; SELECT * FROM V$LOCK WHERE BLOCK = 1;
2. SMON(系统监控进程)
- 功能:
- 实例崩溃后执行自动恢复(前滚重做日志 + 回滚未提交事务)。
- 清理临时段碎片,合并表空间空闲区。
- 故障影响:
- 实例启动失败或恢复时间过长 → 数据库不可用。
- 临时表空间持续膨胀 → 磁盘空间耗尽。
- 排查命令:
-- 检查SMON恢复进度及临时段状态 SELECT * FROM V$RECOVERY_PROGRESS; SELECT SEGMENT_NAME, TABLESPACE_NAME FROM DBA_SEGMENTS WHERE SEGMENT_TYPE = 'TEMPORARY';
3. DBWn(数据库写进程)
- 功能:
- 将SGA中脏缓冲区(被修改的数据块)写入数据文件。
- 多进程设计(
DBW0~DBWz),由DB_WRITER_PROCESSES控制数量。
- 触发条件:
检查点、脏缓冲区阈值(默认40%)、空闲缓冲区不足。 - 故障影响:
- I/O性能差 →
free buffer waits等待事件激增 → SQL响应变慢。 - 示例:
DBWn写速过慢导致事务被阻塞,出现log file sync等待。
- I/O性能差 →
- 排查命令:
-- 监控等待事件及I/O负载 SELECT EVENT, TOTAL_WAITS FROM V$SYSTEM_EVENT WHERE EVENT LIKE '%buffer%'; SELECT * FROM V$SYSSTAT WHERE NAME = 'physical writes';
4. LGWR(日志写进程)
- 功能:
- 将重做日志缓冲区内容顺序写入在线重做日志文件。
- 支持组提交(Group Commit)优化高并发事务。
- 触发条件:
事务提交、日志缓冲区1/3满、每3秒超时、DBWn写前需日志落盘(Write-Ahead Logging)。 - 故障影响:
- 重做日志无法写入 → 事务挂起 →
log file sync等待事件。 - 在线日志文件损坏 → 数据库崩溃。
- 重做日志无法写入 → 事务挂起 →
- 排查命令:
-- 检查LGWR状态及日志切换频率 SELECT GROUP#, STATUS FROM V$LOG; SELECT * FROM V$SYSSTAT WHERE NAME = 'redo writes';
5. CKPT(检查点进程)
- 功能:
- 更新控制文件与数据文件头部的检查点SCN,推进实例恢复起点。
- 触发DBWn写脏块,减少崩溃恢复时间。
- 故障影响:
- 检查点延迟 → 实例恢复耗时剧增(需重放大量重做日志)。
- 排查命令:
-- 检查检查点进度 SELECT NAME, VALUE FROM V$SYSSTAT WHERE NAME LIKE '%checkpoint%';
6. ARCn(归档进程)
- 功能:
- 在归档模式下,将写满的在线重做日志复制到归档日志。
- 进程数由
LOG_ARCHIVE_MAX_PROCESSES控制(最多36个)。
- 故障影响:
- 归档失败 → 在线日志无法重用 → 数据库挂起(
ORA-00257)。
- 归档失败 → 在线日志无法重用 → 数据库挂起(
- 排查命令:
-- 监控归档状态 SELECT DEST_ID, STATUS, ERROR FROM V$ARCHIVE_DEST; ARCHIVE LOG LIST; -- 查看当前归档模式
⚙️ 二、其他关键进程
| 进程 | 功能 | 故障影响示例 |
|---|---|---|
| MMON | 自动性能监控(AWR快照、ADDM分析) | AWR报告缺失 → 性能诊断困难 |
| LREG | 向监听器注册实例服务(12c+替代PMON部分功能) | 监听器无法识别实例 → 连接失败 |
| RECO | 解决分布式事务悬挂(如两阶段提交故障) | 分布式事务锁未释放 → 跨库数据不一致 |
| RBAL | 管理ASM磁盘组重平衡(仅ASM环境) | ASM磁盘扩容卡顿 → I/O中断 |
🔍 三、综合故障排查流程
场景:数据库响应缓慢且频繁报错 ORA-12518(无法分配服务进程)
-
检查进程资源瓶颈:
SELECT * FROM V$RESOURCE_LIMIT WHERE RESOURCE_NAME = 'processes'; -- 若CURRENT_UTILIZATION接近MAX_UTILIZATION,需调整processes参数 -
定位阻塞源:
-- 查找持有锁的会话 SELECT SID, SERIAL#, SQL_ID, BLOCKING_SESSION FROM V$SESSION WHERE STATUS = 'ACTIVE'; -
分析后台进程状态:
-- 查看异常退出的进程 SELECT NAME, DESCRIPTION FROM V$BGPROCESS WHERE ERROR <> 0; -
日志深度检查:
- 查看
alert_<SID>.log跟踪PMON/SMON错误。 - 使用
TRACE跟踪特定进程:ALTER SYSTEM SET EVENTS 'immediate trace name processstate level 12';
- 查看
优化建议:
- PMON/SMON阻塞:增加
CLEANUP_PROCESSES并行清理。 - DBWn/LGWR I/O瓶颈:
- 分离重做日志与数据文件到不同物理磁盘。
- 启用异步I/O(
DISK_ASYNCH_IO=TRUE)。
💎 总结
Oracle后台进程协同保障数据一致性与高可用性:
- 核心进程(PMON/SMON/DBWn/LGWR/CKPT)缺失将导致实例崩溃。
- 性能瓶颈多由I/O争用(如DBWn/LGWR不同步)或资源泄漏(PMON清理失败)引发。
- 排查需结合动态视图(
V$SESSION、V$SYSTEM_EVENT)与日志分析,针对性优化进程参数及存储配置。
欢迎关注我的公众号《IT小Chen》
面试必知:Oracle数据库常见进程
1923

被折叠的 条评论
为什么被折叠?



