概要
■テーブル関数名:QSYS2.HISTORY_LOG_INFO
■カテゴリ:メッセージ処理サービス
■サポート:IBM i 7.2以降
■参照URL(IBM i 7.5):https://www.ibm.com/docs/ja/i/7.5?topic=services-history-log-info-table-function
IBM i OSやH/W,ファームウェアなどの重要なメッセージの出力先であるQHSTヒストリーログを検索するSQLサービスです。
従来の5250端末ではDSPLOG QHST コマンドでQHSTヒストリーログを検索できますが、現代的なインターフェースとは呼べないかもしれません。(機能的な支障はまったくありませんが)
・・・操作感に多少慣れが必要な方が最近の技術者にはハードルがあるかもしれませんね。
QSYS2.HISTORY_LOG_INFO 実行例
ACS 例から挿入 で生成されるサンプル がこちらです。
-- category: IBM i Services
-- description: History Log - Study job longevity
WITH JOB_START(start_time, from_user, sbs, from_job) AS (
SELECT message_timestamp as time,
from_user,
substr(message_tokens, 59, 10) as subsystem,
from_job
FROM TABLE(qsys2.history_log_info(START_TIME => CURRENT DATE,
END_TIME => CURRENT TIMESTAMP)) x
WHERE message_id = 'CPF1124'
ORDER BY ORDINAL_POSITION DESC
) SELECT TIMESTAMPDIFF(4, CAST(b.message_timestamp - a.start_time AS CHAR(22)))
AS execution_minutes, DAYNAME(b.message_timestamp) AS JOB_END_DAY,
a.from_user, a.from_job, a.sbs
FROM JOB_START A INNER JOIN
TABLE(qsys2.history_log_info(START_TIME => CURRENT DATE,
END_TIME => CURRENT TIMESTAMP)) b
ON b.from_job = a.from_job
WHERE b.message_id = 'CPF1164'
ORDER BY execution_minutes desc limit 20;
何やら長いですが、QHSTからCPF1124を出力したジョブをジョブ実行時間の長い順に20個まで出力する、というもののようです。
CPF1124のメッセージをDSPMSGDコマンドで確認すると、下記のようにでました。
ジョブが開始された時刻を識別できるメッセージのようです。
実行してみますと下記の結果になりました。
実行曜日が 土曜日 日本語表示でみやすいですね。
シンプルな実行例
SELECT * FROM TABLE(QSYS2.HISTORY_LOG_INFO())
QHSTのログを全部新しい方から並べて見えるようです。必要なカラムだけに絞り込む、ユーザーを絞り込む等すれば見やすいかもしれません。
シンプルな実行例にカラム選択を追加
メッセージID, 時刻、ジョブ名、メッセージテキストを表示
SELECT MESSAGE_ID, MESSAGE_TIMESTAMP, FROM_JOB, MESSAGE_TEXT FROM TABLE(QSYS2.HISTORY_LOG_INFO()) ;
このへんがミニマムでしょうか・・メッセージIDをセレクトするといい感じかもしれません。
過去24時間に、あるユーザーが出力したヒストリー・ログを検索する
サンプルはコチラです。ユーザー名の GOMA は任意のユーザープロフィールに置き換えてください。
SELECT * FROM TABLE(QSYS2.HISTORY_LOG_INFO(CURRENT TIMESTAMP - 1 DAY)) WHERE FROM_USER= ('GOMA') ;
実行結果例です。さらにメッセージタイプやメッセージID, 重大度SEVERITYでフィルターすると使えそうです。
重大度20以上でフィルターする
SELECT * FROM TABLE(QSYS2.HISTORY_LOG_INFO(CURRENT TIMESTAMP - 1 DAY)) WHERE FROM_USER= ('GOMA') and SEVERITY>='20' ;
なかなか、いいのではないでしょうか。