Migaro. 技術Tips

                       

ミガロ. 製品の技術情報
IBMiの活用に役立つ情報を掲載!


IBMiの情報をSQL(DB2 for i)で取得する方法

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ビュー

◆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テーブル関数

■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情報のダッシュボードアプリ 例

例えば、IBMiのダッシュボードアプリなどが作成可能です。