AS400 SQL7008の確認ポイント|DB2 for i・ジャーナル・コミット・メンバーを疑う

AS400 / IBM i でSQLを実行した時に SQL7008 が出ると、テーブルやメンバーの状態、ジャーナル、コミットメント制御、権限、SQL実行環境のどこを見ればよいか迷いやすくなります。特に、RPGやCLでは動いていた処理をSQLや外部連携から実行した時に表面化することがあります。

この記事では、DB2 for i でSQL7008が出た時の確認順を、AS400保守現場の目線で整理します。エラー文だけで判断せず、対象ファイル、メンバー、ジャーナル、コミット、ジョブログを合わせて確認します。

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を確認してください。

最初に確認すること

  • 対象が物理ファイルか、論理ファイルか、ビューか
  • メンバーが存在するか、指定メンバーが正しいか
  • 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で設定変更する前に止めること

SQL7008が出た時に、すぐジャーナル設定やファイル属性を変えると、本番運用へ影響することがあります。まずはSQL文、対象ファイル、ジョブ環境、ロック、コミット状態を確認し、調査用のSELECTで対象を絞ります。

止める状態 確認すること 見る記事
本番ファイルの設定変更が必要に見える ジャーナル、コミット、利用中ジョブ、影響業務 ジャーナル・コミットメント制御
SQLが重い・返ってこない ロック、WRKACTJOB、実行計画、バッチ負荷 AS400が遅い時の確認手順
UPDATE前の件数が曖昧 SELECT条件、キー、対象件数、除外条件 Query・SQLでデータ確認する時の注意点

処理遅延やロックが疑わしい場合は AS400が遅い時の確認手順、本番データを触る前のSELECT確認は ACS SQLとは?AS400 / IBM iで安全にデータ確認する基本 も合わせて確認します。

SQL文だけで判断しない

SQL9010は、RUNSQLSTMまたはRUNSQLコマンドが失敗したことを示します。この番号だけでは原因を特定できません。同じジョブの直前のSQL・CPFメッセージと、RUNSQLSTMの出力があれば該当SQL文を確認してください。IBM公式のRUNSQLSTMのエラー一覧に記載されています。

DB2 for iをSQLで確認する基本は IBM i SQL Services入門、ODBC/JDBCは AS400 ODBC/JDBC接続の確認ポイント を確認してください。

SQL7008対応を依頼する前に切り分けること

SQL7008は、対象ファイルの状態、ジャーナル、コミットメント制御、メンバー、権限が絡むことがあります。設定変更や本番データ修正を急ぐ前に、どこまで確認済みかを分けて残すと、外部へ相談する場合も原因調査が進めやすくなります。

切り分ける項目 次に確認する記事
ジャーナルとコミットメント制御 AS400ジャーナル確認手順
SELECTで対象件数を確認する ACS SQL / IBM i SQL Servicesの基本
本番データ修正が必要か判断する 本番データ修正前の承認・確認チェックリスト
ファイル定義と実データを見直す DSPFFD / DSPPFMの確認手順