AS400 / IBM i でSQLを実行した時に SQL7008 が出ると、テーブルやメンバーの状態、ジャーナル、コミットメント制御、権限、SQL実行環境のどこを見ればよいか迷いやすくなります。特に、RPGやCLでは動いていた処理をSQLや外部連携から実行した時に表面化することがあります。
この記事では、DB2 for i でSQL7008が出た時の確認順を、AS400保守現場の目線で整理します。エラー文だけで判断せず、対象ファイル、メンバー、ジャーナル、コミット、ジョブログを合わせて確認します。
最初に確認すること
- 対象が物理ファイルか、論理ファイルか、ビューか
- メンバーが存在するか、指定メンバーが正しいか
- SQL実行ユーザーに権限があるか
- ジャーナルとコミットメント制御が関係しているか
- RPG、CL、ODBC、ACS、外部APIのどこから実行しているか
DSPFFDとDSPPFMでファイル状態を見る
まず対象ファイルの定義をDSPFFDで確認し、必要ならDSPPFMでメンバーやデータの状態を確認します。SQLで参照している名前と、ライブラリリスト上の実体がずれていると、想定と違うファイルを見ていることがあります。
外部連携やWeb化の途中でSQL7008が出る場合は、対話型ジョブとサーバージョブでライブラリリスト、ユーザープロファイル、コミット属性が違うこともあります。5250画面からの実行結果だけでなく、実際の実行ジョブのジョブログを確認します。
コミットメント制御とジャーナルを疑う
更新系SQLでSQL7008が出る場合、コミットメント制御やジャーナル設定が関係することがあります。RPGやCLからは問題なく動く処理でも、SQL実行環境がコミットを要求している、または対象ファイルがジャーナルされていない、といった差で失敗することがあります。
この場合は、STRJRNPF、ENDJRNPF、DSPFD、DSPJRNなどをむやみに実行する前に、現行運用でジャーナルがどう使われているか確認します。会計、在庫、受注、出荷など本番データに関係する場合は、設定変更を急がず、影響範囲を整理してから対応します。
ジョブログで直前メッセージを見る
SQL7008だけを見ても原因が絞れない時は、ジョブログで直前のCPF、SQL、MCHメッセージを確認します。エラーの最後だけでなく、最初に失敗したオブジェクト名、ライブラリ名、メンバー名、SQL文、実行ユーザーを控えます。
メッセージIDから調べる場合は、AS400メッセージID・エラーコード索引、SQL Servicesの基本は IBM i SQL Services入門、Web/API化でSQLを使う場合は AS400のWeb化・API連携ガイド を合わせて確認してください。
対応前チェックリスト
- SQL7008が出たSQL文を保存したか
- 対象ライブラリ、ファイル、メンバーを確認したか
- 実行ユーザーとライブラリリストを確認したか
- コミット、ジャーナル、ロックの状態を確認したか
- 本番ファイルの設定変更前にバックアップと影響範囲を確認したか
SQL7008は、SQLだけの問題に見えて、AS400のファイル運用、ジャーナル、ジョブ環境、権限に関係していることがあります。外部連携やモダナイゼーションの途中で出た場合は、SQL文だけでなく実行環境ごと確認するのが近道です。
SQL7008で設定変更する前に止めること
SQL7008が出た時に、すぐジャーナル設定やファイル属性を変えると、本番運用へ影響することがあります。まずはSQL文、対象ファイル、ジョブ環境、ロック、コミット状態を確認し、調査用のSELECTで対象を絞ります。
| 止める状態 | 確認すること | 見る記事 |
|---|---|---|
| 本番ファイルの設定変更が必要に見える | ジャーナル、コミット、利用中ジョブ、影響業務 | ジャーナル・コミットメント制御 |
| SQLが重い・返ってこない | ロック、WRKACTJOB、実行計画、バッチ負荷 | AS400が遅い時の確認手順 |
| UPDATE前の件数が曖昧 | SELECT条件、キー、対象件数、除外条件 | Query・SQLでデータ確認する時の注意点 |
処理遅延やロックが疑わしい場合は AS400が遅い時の確認手順、本番データを触る前のSELECT確認は AS400 Query・SQLでデータ確認する時の注意点 も合わせて確認します。
SQL7008は理由コードから切り分ける
SQL7008は「ジャーナルがない」と決め打ちせず、メッセージ詳細に出る理由コードを確認します。IBM iのSQL7008には複数の理由があり、理由コードによって次の確認先が変わります。
| 理由コード | 主な意味 | 最初の確認 |
|---|---|---|
| 1 | 対象テーブルまたは物理ファイルにメンバーがない | DSPFDなどでメンバー数と作成手順を確認する |
| 2 | 記憶域解放の状態で保存されている | 復元元、保存世代、対象オブジェクトを確認する |
| 3 | 未ジャーナル、ジャーナル権限不足、*STANDBY、またはコミット制御上のジャーナル条件不一致 | 実行時のコミット分離レベル、ジャーナル、権限、関連ファイルを確認する |
| 4 / 5 | デバッグのUPDPROD(*NO)と本番ライブラリの組み合わせ | デバッグ状態と対象ライブラリを確認し、安易に設定を変えない |
| 15 | コミット定義と対象オブジェクトのASPが異なる | 現在のASPグループとトランザクション範囲を確認する |
| 16 | シーケンスがCLコマンドで不正に変更された | 対象シーケンスと直前の変更履歴を確認する |
| 17 | 部分トランザクションを含み、テーブルを使用できない | 直前のジョブログと回復処置を確認する |
たとえばODBC側がコミット制御を使い、対象ファイルがジャーナルされていない場合は理由コード3になり得ます。STRJRNPFやCHGDBGを先に実行せず、理由コード、対象、運用設計を確認してから対応します。
理由コードの全一覧と回復処置は、IBM DocsのSQLメッセージ一覧でSQL7008を確認してください。
関連するAS400確認ルート
SQL7008はDB2 for i、ジャーナル、コミット、メンバー、権限を順番に疑い、ジョブログとコマンドで裏取りします。
SQL7008対応を依頼する前に切り分けること
SQL7008は、対象ファイルの状態、ジャーナル、コミットメント制御、メンバー、権限が絡むことがあります。設定変更や本番データ修正を急ぐ前に、どこまで確認済みかを分けて残すと、外部へ相談する場合も原因調査が進めやすくなります。
| 切り分ける項目 | 次に確認する記事 |
|---|---|
| ジャーナルとコミットメント制御 | AS400ジャーナル確認手順 |
| SELECTで対象件数を確認する | ACS SQL / IBM i SQL Servicesの基本 |
| 本番データ修正が必要か判断する | 本番データ修正前の承認チェック |
| ファイル定義と実データを見直す | DSPFFD / DSPPFMの確認手順 |
SQL7008の原因が本番影響に直結し、ジャーナル設定や更新可否の判断に迷う場合は、エラー時刻、ジョブログ、対象ファイル、実行SQL、確認済みの切り分けをまとめてお問い合わせから相談できます。実データや個人情報は送らず、マスキングした情報で共有してください。
