IBMiはバージョンアップ(テクノロジーリフレッシュ(TR))毎に様々な機能が追加されます。
DB2 for iでは、SQLを利用してIBMiの様々な情報が取得できるようになっています。
今回のTipsでは、SQLでIBMiの情報を取得する方法についてご紹介します。
SQLでPTF情報の取得
SQLでグループPTF情報を取得
グループPTFの情報はIBMiのコマンド「WRKPTFGRP」を使用して取得できます。
SQLでは、QSYS2のGROUP_PTF_INFOビューで確認ができます。
◆GROUP_PTF_INFO
https://www.ibm.com/docs/ja/i/7.4?topic=services-group-ptf-info-view
例えば、以下SQLでWRKPTFGRPコマンドと類似の情報が取得できます。
SELECT PTF_GROUP_NAME,PTF_GROUP_DESCRIPTION,PTF_GROUP_LEVEL FROM QSYS2.GROUP_PTF_INFO
SQLで個別PTF情報を取得
個別のPTFであれば、「GO PTF」を実行してプログラム一時修正メニューから OPT「5.プログラム一時修正の表示」を選択して一覧からPTFの適用状況を確認できます。
プロダクトとPTF番号が判明している場合はコマンドでアクセスすることも可能です。
DSPPTF LICPGM(プロダクト) SELECT(PTF番号)
例) DSPPTF LICPGM(5770999) SELECT(MF61161)
SQLでもPTFの情報にアクセスできます。
■PTF_INFO
https://www.ibm.com/docs/ja/i/7.4?topic=services-ptf-info-view
SQLでディスク使用状況の取得
IBMiのディスク使用率や、どのユーザープロファイルがどのくらいディスクを使用しているのかをSQLで取得することができます。
■USER_STORAGE
https://www.ibm.com/docs/ja/i/7.4?topic=services-user-storage-view
特定のユーザープロファイルが使用しているディスク容量
特定のユーザープロファイルが使用しているディスク容量を取得するには以下のSQLとなります。
例) ユーザープロファイル JOHNDOEが使用しているディスク容量の取得
SELECT USER_NAME,ASPGRP,STGUSED FROM QSYS2.USER_STORAGE WHERE USER_NAME = 'JOHNDOE'
ディスクを使用しているユーザープロファイルのトップ10を表示
IBMi上でディスク容量を使用しているトップ10のユーザープロファイルを取得するには以下になります。
WITH T1 AS (
SELECT
AUTHORIZATION_NAME,
STORAGE_USED
FROM QSYS2.USER_STORAGE AS F1
ORDER BY STORAGE_USED DESC FETCH FIRST 10 ROWS ONLY
)
SELECT
T1.AUTHORIZATION_NAME AS T2_AUTHORIZATION_NAME,
T1.STORAGE_USED AS T2_STORAGE_USED
FROM T1
SQLで実行中のジョブ情報の取得
IBMiで実行中のJOB情報を取得するには、ACTIVE_JOB_INFOテーブル関数を使用します。
■ACTIVE_JOB_INFO
https://www.ibm.com/docs/ja/i/7.4?topic=services-active-job-info-table-function
WRKACTJOBコマンドで取得できるような情報をSQLで取得することができます。
例えば、全てのジョブ内でSQL実行時、最もCPU使用率とディスクのIOが大きいジョブを順番に表示するには以下になります。
SELECT
JOB_NAME,
SUBSYSTEM,
AUTHORIZATION_NAME,
JOB_STATUS,
TRUNC(CPU_TIME / 1000, 2) AS VV4,
THREAD_COUNT,
ELAPSED_CPU_PERCENTAGE,
ELAPSED_TOTAL_DISK_IO_COUNT
FROM
TABLE(ACTIVE_JOB_INFO('NO', '', '', '')) AS ACT_JOBS
ORDER BY
ELAPSED_CPU_PERCENTAGE DESC,
ELAPSED_TOTAL_DISK_IO_COUNT DESC
SQLでネットワーク接続情報の取得
IBMiへネットワーク接続中のジョブ情報を取得することもできます。
■NETSTAT_JOB_INFO
https://www.ibm.com/docs/ja/i/7.4?topic=services-netstat-job-info-view
このビューを使用することでIBMiのNETSTATコマンドで取得できる情報と類似のデータが取得できます。
例えば、以下SQLではtelnetで接続しているジョブの情報を取得できます。
※エミュレータからSQLを実行する場合、実行前にCHGJOBコマンドでCCSIDを5035へ変更してください。
CHGJOB CCSID(5035)
SELECT * FROM QSYS2.NETSTAT_JOB_INFO WHERE LOCAL_PORT_NAME = 'telnet'
SQLでIBMi モデル、シリアル、パーティションを取得
IBMiのシステム値をSQLで取得することも可能です。
システム値はSYSTEM_VALUE_INFOビューで取得できます。
■SYSTEM_VALUE_INFO
https://www.ibm.com/docs/ja/i/7.4?topic=services-system-value-info-view
また、IBMiのパーティションID情報はSYSTEM_STATUS_INFOビューで取得ができます。
■SYSTEM_STATUS_INFO
https://www.ibm.com/docs/ja/i/7.4?topic=services-system-status-info-view
2つのビューを組み合わせて1つのSQLで、IBMiモデル、IBMiシリアル、パーティションの情報を取得できます。
※エミュレータからSQLを実行する場合、実行前にCHGJOBコマンドでCCSIDを5035へ変更してください。
CHGJOB CCSID(5035)
SELECT F2.SYSVALNAME as TITLE, F2.CURCHARVAL AS INFORMATION
FROM QSYS2.SYSTEM_VALUE_INFO F2
WHERE F2.SYSVALNAME = 'QSRLNBR' or F2.SYSVALNAME = 'QMODEL'
UNION ALL
SELECT 'Partition' ,CAST(F1.PARTITION_ID AS VARCHAR(10)) FROM QSYS2.SYSTEM_STATUS_INFO F1
終わりに
IBMiはバージョンアップ毎に、SQLの機能を拡張して、様々な情報が取得できるようになってきています。ValenceのApp Builderアプリでは、データソースをSQLで直接記述することが可能なため、IBMiに関する様々な情報をGridやチャートなどのウィジェットに出力することができます。
例えば、IBMiのダッシュボードアプリなどが作成可能です。