- この記事は、IBM Community Japanの主催する2026年ナレッジモール研究における、「WG ID: 2026-C-05 メインフレーム若手技術者の広場」の成果物です。
- 当記事の著作権はIBMに帰属します。詳細はこちらを参照ください。
1. はじめに
メインフレーム(z/OS)環境におけるデータベース管理システムとして、広く利用されているのが「IMS Db2 for z/OS」です。
本記事では、メインフレーム(z/OS)環境におけるDb2の位置づけ、実際のプログラムでの書き方、ならびにIMSなど他ミドルウェアとの比較やDb2のメリットなどについて解説します。
2. Db2とは
Db2の定義
DB2(正式名称:IBM Db2)は、 z/OS上で動作し、データベース管理機能をシステムに提供するミドルウェア(RDBMS) です。
データベース管理システム(DBMS)の役割
DB2は単なるデータの保存場所(ファイル)ではありません。
「アプリケーションからの要求を受け取り、データの検索・追加・更新・削除や安全管理を一括で行うソフトウェア」 です。
複数アプリケーションからの同時アクセスに対するデータ保護や、システム障害時の整合性維持を管理します。
【ファイルに直接アクセスする場合】
アプリ A ──┐
├── データの直接操作(同時更新による破壊リスクあり)
アプリ B ──┘
【DB2を経由する場合】
アプリ A ──┐
├── [ DB2 ] ── データの読み書き(順番・整合性を一括管理)
アプリ B ──┘
※1
3. なぜDb2を使うのか?(DBMSを利用するメリット)
従来のファイル管理(VSAM等)と比較した際、Db2(リレーショナルデータベース)を採用する大きなメリットは以下の3点です。
メリット1:データの取り出し・検索がとにかく自由
VSAMなどのファイル管理では、「キーを指定して1件読む」「先頭から順番に読む」といった限定的なアクセスしかできません。
一方、Db2ではデータが行と列の「表(テーブル)」で管理されており、SQL文を1行書くだけで「条件に合うデータだけ」「特定の列だけ」「複数の表をくっつけて」取得できます。
メリット2:プログラムとデータ構造が切り離されている
従来のファイル管理では、データセットのレイアウトに1項目(例えば「電話番号」)を追加するだけで、そのデータセットを読み込むすべてのCOBOLプログラムを修正・再コンパイルする必要がありました。
Db2の場合、テーブルに新しい列を追加しても、その列を使わない既存のCOBOLプログラムには影響しません。(修正・再コンパイルが不要)
メリット3:データ整合性と排他制御をDb2が自動でやってくれる
複数のプログラムが同時に同じデータを書き換えようとした際の「順番待ち(ロック)」や、プログラムが途中で異常終了した際の「データの元戻し(ロールバック)」を、プログラム側に複雑なロジックを書かなくてもDb2が自動で処理してくれます。
4. COBOLの中でSQLはどう書かれているのか?
メインフレームのCOBOLプログラムでは、「埋め込みSQL(Embedded SQL)」という仕組みを使い、COBOLコードの中に直接SQL文を記述します。
実際のCOBOLコード例(データ検索)
DATA DIVISION.
WORKING-STORAGE SECTION.
EXEC SQL BEGIN DECLARE SECTION END-EXEC.
01 HOST-CUST-ID PIC X(3).
01 HOST-CUST-NAME PIC N(10).
EXEC SQL END DECLARE SECTION END-EXEC.
PROCEDURE DIVISION.
MAIN-RTN.
MOVE '001' TO HOST-CUST-ID.
* --- COBOLの中に直接SQLを書き込む ---
EXEC SQL
SELECT NAME
INTO :HOST-CUST-NAME
FROM CUSTOMER
WHERE ID = :HOST-CUST-ID
END-EXEC.
* --- SQLの終了 ---
IF SQLCODE = 0
DISPLAY '顧客名: ' HOST-CUST-NAME
ELSE
DISPLAY 'エラーが発生しました SQLCODE: ' SQLCODE
END-IF.
※2
ポイント解説
-
EXEC SQL〜END-EXEC.で囲む
COBOLコンパイラに「ここはSQL文ですよ」と教えるための目印です。 -
ホスト変数(
:変数名)でデータをやり取りする
COBOL側で定義した変数名の頭にコロン(:)を付けることで、SQL文の中で使えます。 -
SQLCODEで結果を確認する
SQL実行後、Db2はSQLCODEという変数に実行結果のステータスコードを返します(成功なら0、データなしなら100など)。
5. DB2のデータはどこに保存されている?
Db2のテーブルに入っているデータは、最終的に z/OS上の VSAM LDS(Linear Data Set) という物理データセットの中に保存されています。
Db2サブシステム
└─ Database(管理上のグループ単位)
└─ Table(表データ)
└─ VSAM Linear Data Set (LDS) ※物理ファイル
※3
「Db2=VSAM」というわけではなく、「Db2という管理ミドルウェアが、データを保持する物理ファイルとしてVSAM LDSを利用している」 という関係性になります。
6. システム内での役割分担とコミット・ロック管理
オンライン処理システム(IMS DC + Db2など)では、以下のように役割が分担されています。
| コンポーネント | 代表例 | 役割 |
|---|---|---|
| DC(通信) | IMS DC, CICS | 画面や外部からのトランザクション受信・起動 |
| アプリケーション | COBOL等 | 業務ロジックの実行・SQLの発行 |
| DBMS | Db2 | SQLの実行、データの整合性・ロック管理 |
※4
IMSとDb2を併用した際のコミット・ロック管理
IMS DCがトランザクションを受け付け、COBOLプログラムがDb2へアクセスする構成では、排他制御(ロック) や更新の確定処理が重要になります。
アプリがSQLを発行した時点では、Db2は対象のデータにロックをかけて更新を行いますが、まだ確定(コミット)はしません。
2相コミット(Two-Phase Commit)による制御
IMS(指示役)とDb2(参加者)の間では、2相コミット処理 と呼ばれる2段階の同期制御機構が機能します。
-
フェーズ1(準備要求):
アプリケーションの処理が終わり、IMS側で同期点(CHKP呼び出しや画面応答など)に達すると、IMSはDB2に対して「更新を確定できる状態か?」と問い合わせます。DB2はログを書き込み、問題がなければOKを返します。 -
フェーズ2(一括確定):
関係するすべての処理で準備OKが確認されたら、IMSはDb2に「コミット実行」を指示します。これにより、IMSのメッセージとDb2のデータ更新が同一のタイミングで同期して確定されます。 -
異常終了(アベンド)時の動作:
処理途中でアベンドが発生した場合、IMSはDb2に対して「ロールバック(取り消し)」を指示します。Db2はデータを元の状態に戻し、保持していた行やページのロック(排他)を自動的に解除します。
この仕組みにより、DB2だけが勝手にコミットしてしまうことを防ぎ、システム全体の整合性が保たれています。
7. Db2・IMS DB・VSAMの比較
| 比較項目 | Db2 | IMS DB | VSAM(KSDS等) |
|---|---|---|---|
| 分類 | RDBMS | 階層型DB | アクセス法・ファイル管理 |
| データ構造 | テーブル(行・列) | 階層構造(セグメント) | レコード |
| アクセス方式 | SQL | DL/I | READ / WRITE文など |
| 構造変更の影響 | 低い(列追加等の影響が少ない) | 高い(階層構造変更の影響大) | 高い(レイアウト変更の影響大) |
※5
8. まとめ
- Db2はz/OS上で動作し、SQLによる柔軟なアクセスを提供するミドルウェアである
- データのアクセス自由度が高く、データ構造の変更に強いのが大きなメリットである
- COBOLプログラムからは
EXEC SQL ... END-EXEC.を使ってSQLを埋め込む - IMS DCと連携する場合でも、2相コミット機構により自動でロック解除やデータ整合性が維持される
9. 参考文献
-
IBM, "Db2 13 for z/OS Documentation"
https://www.ibm.com/docs/ja/db2-for-zos/13.0.0
(参照日:2026年7月23日) -
IBM, "Db2 for z/OS - Concepts"
https://www.ibm.com/docs/ja/db2-for-zos/13.0.0?topic=zos-db2-concepts
(参照日:2026年7月23日) -
IBM, "Db2 for z/OS - Two-phase commit process"
https://www.ibm.com/docs/ja/db2-for-zos/13.0.0?topic=consistency-two-phase-commit-process
(参照日:2026年7月23日) -
IBM, "Db2 for z/OS - Concurrency and locks defined"
https://www.ibm.com/docs/ja/db2-for-zos/13.0.0?topic=concurrency-locks
(参照日:2026年7月23日)
当資料に掲載の情報・図表に関する注釈
| 番号 | 対象 | 区分 | 出典・利用許諾状況など |
|---|---|---|---|
| *1 | 図 | 生成AI | 生成AI「Chat GPT」にて作成 |
| *2 | コード | 生成AI | 生成AI「Chat GPT」にて作成 |
| *3 | 図 | 生成AI | 生成AI「Chat GPT」にて作成 |
| *4 | 表 | 自作 | IBMが提供しているサイトを参考に作成 https://www.ibm.com/docs/ja/db2-for-zos/13.0.0 |
| *5 | 表 | 自作 | IBMが提供しているサイトを参考に作成https://www.ibm.com/docs/ja/db2-for-zos/13.0.0 |