Db2 for i サービスの機能拡張
Db2 for i サービスも継続的に機能拡張されている。その目的は大多数のユーザーで必要となる機能やプログラムサンプルを標準提供し、生産性向上や属人性を排除することにある。
Db2 for i サービスはすべてSQLを介した操作を前提としており、IBM i に精通していないオープン系ユーザーがIBM i を操作するためのツールでもある。
IBM i 7.4 TR3、および7.3 TR9レベルでのDb2 for iサービス一覧は図表1のとおりである。
以下に、Db2 for i サービスの特徴的な機能を紹介する。
QSYS2.PARSE_STATEMENT UDTF
Db2 for i サービスとして提供されるUDTF(ユーザー定義表関数)の1つ。
指定したライブラリー内のIBM i オブジェクトについて、DDL、DML、DCLなど何らかのSQL操作が行われるオブジェクトとカラム名のリストを返す。
一例として、以下のステートメントを実行すると、指定ライブラリー内にてSQLで使用される(SQL文で使われている)テーブル名とステートメントの一覧を入手できる。
IBM i 7.4 SF99704 Level1でDROPステートメントのサポート、CREATE TABLE、ALTER TABLEでの参照制約のサポート等が追加された。
参考URL:https://supportcontent.ibm.com/support/pages/node/1116561 (参照にはIBM ID登録が必要)
RELATED_OBJECTS
IBM i 7.4 TR3、および7.3 TR9で拡張された、SYSTOOLSで提供される表関数。DSPDBRコマンドと似ている。指定した物理ファイルに関連するオブジェクトを一覧表示で返す。
【使用例】下記コマンドを実行すると図表2の結果を返す。
ANALYZE_CATALOG
同じくIBM i 7.4 TR3および7.3 TR9で拡張された、SYSTOOLSで提供される表関数。RCLDBXREF *CHKコマンドを拡張したような機能である。
【使用例1】すべてのライブラリーについて、クロスリファレンステーブルのエラーを表示する。
特定ライブラリーについて検査したい場合は、library_nameにライブラリー名を指定する。
【使用例2】データベース相互参照サーバーの実行状態を返す。DESCRIPTION列とDETAIL列に処理待機しているキュー内のエントリの数を示す。
IBM i サービスの機能拡張
以上はデータベース機能そのものの拡張であるが、OS機能についても従来のCLコマンドやAPIを代替するIBM i サービスが拡充中である。その目的はDb2 for iサービスと同様に、IBM i 固有のコマンドやAPIを排し、最も普及している業界標準の(開発者人口が最も多い)SQLで代替することである(図表3)。
IBM i サービスは現在、合計14のカテゴリに分類され提供されている。今回はIBM i 7.4 TR3、および7.3 TR9で拡張された機能を中心に紹介する。
IBM i 7.4 TR3、および7.3 TR9レベルでのIBM i (SQL)サービス一覧は、図表4のとおりである。
PTFサービス
systools.group_ptf_currency
IBM i に導入済みのPTFレベルとIBM PSPサイトの最新PTF情報を比較して、導入可能な更新PTFグループを表示する。
ちなみにグループPTFの最新情報は下記から参照できる。
IBM Support:IBM i Group PTFs with level
http://www.ibm.com/support/docview.wss?uid=nas4PSPbyNum&aid=1
区画にインストール済みのグループPTFバージョンとPSPサイトの最新バージョンを比較して、結果をリスト表示する(図表5)。
サンプルはPSPサイトに接続できない環境のため、PTF_GROUP_CURRENCYカラムに‘PSP INFORMATION NOT AVAILABLE’と表示されている。
インストール可能な更新バージョンがある場合は‘UPDATE AVAILABLE’など、比較結果がリストされる。
以下は、更新バージョンがある行だけを抽出するサンプルである。
結果例は、図表6のようになる。
スプールサービス
SYSTOOLS.DELETE_OLD_SPOOLED_FILES プロシージャー
読んで字のごとく、古いスプールファイルを検索して削除するプロシージャーサンプルである。
【使用例】PRT01 OUTQについて、30日以上前のスプールのリストを表示する。PREVIEW YESを指定しているので、削除はしない。OUTQ名を指定しないと、全OUTQが対象となる。
上記の例からPREVIEWをNOに変更すると、合致するスプールを削除する。
このプロシージャーは日数、OUTQ、ライブラリー、ユーザーで対象をフィルタできる(図表7)。
ジャーナルサービス
QSYS2.DISPLAY_JOURNAL ユーザー定義表関数
DSPJRNコマンドと同様の検索を実行する。DSPJRNコマンドでは、たとえばIBM i外部のプログラムからジャーナルの項目を検索するには、簡単なプログラミングが必要であった。
DISPLAY_JOURNAL を利用すれば、プログラミングレスでSQLにより直接ジャーナルを処理できる。また、ジャーナル項目の検索速度が速いこともメリットである。
通常のデータベースジャーナルのほか、監査ジャーナル(QSYS/QAUDJRN)も検索できる。
【使用例1】監査ジャーナルからパスワード失敗に関する監査情報を取得する(図表8)
以下のサンプルコードは、IBM i Information Centerからの転載である。同センターには、これ以外のIBM iサービス、Db2 for i サービスについても同様のサンプルが多数掲載されている。
【使用例2】ジャーナル TESTLIB/QSQJRN の *CURRENT レシーバーからすべての項目を表示する
【使用例3】PRODDATA/SALES テーブルに対して 、SUPERUSER により実行されたすべての変更を表示する
【使用例4】MYCO ライブラリー内の REQUESTS ファイルの監査ジャーナル項目を確認する
【使用例5】ジャーナル ID (JID) が異なるものも含め、MYCO ライブラリー内の REQUESTS ファイルにおける過去 1 時間のすべての変更を確認する
IFSサービス
QSYS2.IFS_READ ユーザー定義表関数
IFSのファイルをREADして、結果を表示する。ファイル内の行の区切りはCR、CRLF、LF、LFCRまたはANYで指定できる。キャラクタまたはUTF-8で読み取る。
【使用例1】/annotate.logを読み取り、表示する(図表9)
【使用例2】/usr/file2を読み取り、表示する。ファイルサイズ2GBで改行表示する
IFSサービス
QSYS2.IFS_WRITE ユーザー定義表関数
IFSストリームファイルにデータを書き込む。追加・置換・作成を実行できる。文字はキャラクタ、UTF-8、バイナリが指定できる。
【使用例1】/tmp/newfile1に1行書き込む。置換モードで書き込む
【使用例2】/tmp/library_name にすべてのライブラリー名を調べて書き出す。書き出すファイルは、JOBのCCSIDに準拠する(以下はIBM Knowledge Centerからの転載である)
上記で生成した /tmp/library_names は、下記のようにIFS_READ UDTFで読み取りできる。
【使用例3】UTF-8(CCSID 1208)のストリームファイルを生成する
IFSサービス
QSYS2.IFS_OBJECT_STATISTICS−UDTF
指定IFSディレクトリについて、条件に合致したオブジェクトリストを表示する(図表10)。サブツリーも検索する。オブジェクトタイプは、 *ALLSTMFを指定する。
著者
佐々木 幹雄氏
日本アイ・ビー・エム株式会社
パワーシステムテクニカルセールス
シニアITスペシャリスト
AS/400利用のお客様担当SEから出発し、さまざまなテクニカル職種を担当。現在はPower Systemsはじめインフラ提案・アーキテクチャ設計を主に担当している。
[i Magazine 2021 Winter(2021年1月)掲載]