この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:guest
更新日時:2026-06-11 07:07:02

タイトル: バックグラウンドプロセス
SEOタイトル: Oracle のバックグラウンドプロセス一覧(DBWR/LGWR/SMON/PMON/CKPT/ARCn)の役割

この記事の要点
  • Oracle インスタンスは複数のバックグラウンドプロセスが並行動作してデータベースを支えている
  • 代表は DBWR(バッファ書き出し)・LGWR(REDO ログ書き出し)・SMON(システム監視)・PMON(プロセス監視)・CKPT(チェックポイント)・ARCn(アーカイブ)の 6 種
  • 各プロセスは SGA とディスク(データファイル/REDO ログファイル/制御ファイル)を仲介する
  • 障害発生時はプロセス起動状況とアラートログ・トレースファイルから原因を切り分ける

バックグラウンドプロセスとは

Oracle Database のインスタンスは、メモリ領域である SGA と複数のバックグラウンドプロセスの組み合わせで構成されます。バックグラウンドプロセスは、ユーザーが直接意識することなく、データの永続化・ログ出力・障害監視・チェックポイント処理などを並行して受け持つ常駐プロセス群です。アプリ側からの SQL を処理する「サーバープロセス」とは役割が分かれており、サーバープロセスが SGA 上で行った更新を、バックグラウンドプロセスが裏でディスクに反映していくイメージです。

主要なバックグラウンドプロセスの一覧

プロセス正式名役割
DBWR (DBWn)Database Writerバッファキャッシュ上の更新済みブロックをデータファイルに書き出す
LGWRLog WriterREDO ログバッファの内容を REDO ログファイルに書き出す
SMONSystem Monitorインスタンス起動時のクラッシュリカバリ、未使用一時セグメントの解放
PMONProcess Monitor異常終了したユーザープロセスのクリーンアップ、ロックや一時表のリリース
CKPTCheckpointデータファイルと制御ファイルのヘッダにチェックポイント情報を書き込む
ARCnArchiver満杯になった REDO ログファイルをアーカイブログとして退避(アーカイブログモード時)
MMON / MMNLManageability MonitorAWR スナップショット取得や統計情報の収集
RECORecoverer分散トランザクションの未解決状態を解消

処理フローのイメージ

SQL UPDATE が来てから永続化されるまでの流れを追うと、各プロセスの役割が理解しやすくなります。

  1. サーバープロセスが SGA のバッファキャッシュ上でブロックを更新し、変更履歴を REDO ログバッファに書く
  2. COMMIT 時に LGWR が REDO ログバッファを REDO ログファイルへ書き出す(先に永続化)
  3. 条件が整うと DBWR が更新済みブロックをデータファイルに非同期で書き出す
  4. 定期的に CKPT がチェックポイントを進めて、データファイル/制御ファイルのヘッダを更新
  5. REDO ログが切り替わると ARCn がアーカイブログにコピー(アーカイブログモード時)
  6. インスタンス異常終了からの再起動時には 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_<プロセス名>_ のような名前で常駐しています。

$ 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 が止まるとクラッシュリカバリができないためインスタンスとして致命的

関連記事