| この記事の要点 |
|
バックグラウンドプロセスとは
Oracle Database のインスタンスは、メモリ領域である SGA と複数のバックグラウンドプロセスの組み合わせで構成されます。バックグラウンドプロセスは、ユーザーが直接意識することなく、データの永続化・ログ出力・障害監視・チェックポイント処理などを並行して受け持つ常駐プロセス群です。アプリ側からの SQL を処理する「サーバープロセス」とは役割が分かれており、サーバープロセスが SGA 上で行った更新を、バックグラウンドプロセスが裏でディスクに反映していくイメージです。
主要なバックグラウンドプロセスの一覧
| プロセス | 正式名 | 役割 |
|---|---|---|
| DBWR (DBWn) | Database Writer | バッファキャッシュ上の更新済みブロックをデータファイルに書き出す |
| LGWR | Log Writer | REDO ログバッファの内容を REDO ログファイルに書き出す |
| SMON | System Monitor | インスタンス起動時のクラッシュリカバリ、未使用一時セグメントの解放 |
| PMON | Process Monitor | 異常終了したユーザープロセスのクリーンアップ、ロックや一時表のリリース |
| CKPT | Checkpoint | データファイルと制御ファイルのヘッダにチェックポイント情報を書き込む |
| ARCn | Archiver | 満杯になった REDO ログファイルをアーカイブログとして退避(アーカイブログモード時) |
| MMON / MMNL | Manageability Monitor | AWR スナップショット取得や統計情報の収集 |
| RECO | Recoverer | 分散トランザクションの未解決状態を解消 |
処理フローのイメージ
SQL UPDATE が来てから永続化されるまでの流れを追うと、各プロセスの役割が理解しやすくなります。
- サーバープロセスが SGA のバッファキャッシュ上でブロックを更新し、変更履歴を REDO ログバッファに書く
- COMMIT 時に LGWR が REDO ログバッファを REDO ログファイルへ書き出す(先に永続化)
- 条件が整うと DBWR が更新済みブロックをデータファイルに非同期で書き出す
- 定期的に CKPT がチェックポイントを進めて、データファイル/制御ファイルのヘッダを更新
- REDO ログが切り替わると ARCn がアーカイブログにコピー(アーカイブログモード時)
- インスタンス異常終了からの再起動時には SMON が REDO を適用してクラッシュリカバリを行う
プロセスの稼働状況を確認する
動的パフォーマンスビュー V$BGPROCESS を参照すると、起動中のバックグラウンドプロセスを一覧で確認できます。
-- 起動中のバックグラウンドプロセス一覧
SELECT name, description, paddr
FROM v$bgprocess
WHERE paddr <> '00';
-- 個別プロセスの状態(OS プロセス ID やステータス)
SELECT s.sid, s.serial#, p.spid, p.pname
FROM v$session s
JOIN v$process p ON s.paddr = p.addr
WHERE s.type = 'BACKGROUND';OS から見たプロセス
UNIX/Linux 系では、Oracle のバックグラウンドプロセスは ora_<プロセス名>_<SID> のような名前で常駐しています。
$ ps -ef | grep ora_ | grep -v grep
oracle 1234 1 0 09:00 ? 00:00:00 ora_pmon_ORCL
oracle 1236 1 0 09:00 ? 00:00:00 ora_smon_ORCL
oracle 1238 1 0 09:00 ? 00:00:00 ora_dbw0_ORCL
oracle 1240 1 0 09:00 ? 00:00:00 ora_lgwr_ORCL
oracle 1242 1 0 09:00 ? 00:00:00 ora_ckpt_ORCL
oracle 1244 1 0 09:00 ? 00:00:00 ora_arc0_ORCL覚えておきたいポイント
- LGWR は「コミットされた変更を必ず先に REDO に書く」という、いわゆる WAL(Write-Ahead Logging)を担保するプロセス
- DBWR は性能のために遅延書き込みするので、データファイルが常に最新とは限らない(差分は REDO とチェックポイントで担保)
- PMON が居ないと、異常切断したセッションが握っていたロックが解放されない
- SMON が止まるとクラッシュリカバリができないためインスタンスとして致命的
関連記事
- Oracle
- インスタンス
- SGA(システムグローバル領域)
- PGA
- LGWR
- SMON
- PMON (Process Monitor)
- CKPT
- ARC (Archiver Process / アーカイバ プロセス)
- REDOログファイル (物理構造 Oracle)
同階層のページ
- SGA(システムグローバル領域)
- PGA
- バックグラウンドプロセス
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09