| この記事の要点 |
|
バックグラウンドプロセスとは
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 / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- JP1/FTS(File Transmission Server/FTP)とは|伝送カードとftstranの使い方 NEW 2026-10-02 22:03:11
- 日立 JP1 (Job Management Partner 1) 完全ガイド (AJS3 / IM / Base / PFM) 2026-10-02 22:03:11
- JP1/Baseとは|ユーザー認証・ユーザーマッピング・イベントサービスの仕組みと主要コマンド NEW 2026-10-02 22:03:10
- JP1/IM(JP1/IM2・IM3)とは|JP1イベントによる統合監視の仕組みとJP1/Baseとの関係 NEW 2026-10-02 22:03:10
- JP1/AJS3 コマンド一覧|ajsentry・ajsshow・ajsrerunなど主要コマンドの使い方とオプション NEW 2026-10-02 22:03:09
- JP1/AJS3とは?ジョブネット・スケジュール・Manager/Agent/Viewの構成を初心者向けに解説 NEW 2026-10-02 22:03:09
- クラウドネットワークの記事一覧 2026-10-02 16:08:51
- ルーティングとスイッチング完全ガイド — 静的/動的ルーティング/RIP/OSPF/BGP/VLAN/STP 2026-10-02 16:08:51
- ネットワークのアドレッシング完全ガイド — IP/MAC/ポート/サブネット/CIDR/IPv6/NAT 2026-10-02 16:08:51
- 本番環境のdll内で参照しているdllファイルの置き場所 2026-10-02 16:08:50
- 【Visual Studio】 C#のForm自動生成時に「値が有効な範囲にありません」エラー 2026-10-02 16:08:50
- 【Laravelエラー】does not comply with psr-4 autoloading standard. Skipping. 2026-10-02 16:08:50
- 【Laravelエラー】could not find driver(Windows, MySQL編) 2026-10-02 16:08:49
- The following channel memory did not pass cpu memory test. 2026-10-02 16:08:49
- 【pycharm】connecting to console が終わらない 2026-10-02 16:08:49