メニューボタン
IBMi海外記事2015.06.24

もっと、もっと、ください! DB2 for i に利用できるサービスとグローバル変数を

Michael Sansoterra 著

飽くことのない我々の欲求を満たすため、IBM は、DB2 for i SQL 開発者とデータベース管理者が「サービス」およびグローバル変数を使用して、プログラム的にデータベースに問い合わせを行い、その稼働環境と相互作用する新しい方法を提供し続けています。

新しい「サービス」ビュー

IBM DB2 for i Service は、簡単な SQL を通して IBM i OS 環境に関する情報にアクセスできるので、開発者と管理者にとっては素晴らしい恩恵でした。サービスを簡単に紹介しているのが、私の記事 Make Your DB2 For i Apps Environment Aware です。これから説明する IBM i 7.2 TR3/IBM i 7.1 TR9 時点で、新しく利用できる「サービス」がいくつかあります。

技術情報11

ビュー SYSTOOLS.GROUP_PTF_CURRENCY は、インストールされたグループ PTF が最新かどうか判断する際に、システム管理者の新たな親友となります。このサービスは SYSTOOLS.HTTPGETBLOB 関数を使用して、IBM にリアルタイムで話しかけ (ここでご覧になれます) 入手可能な最新のグループ PTF レベルを取得します。入手可能な最新のグループ PTF レベルを収集した後、ビューは、最新のレベルと GROUP_PTF_INFO (別名 GRPPTFINFO) サービス・ビューにより提供されているシステムに現在インストールされているレベルとを比較し、違いを報告します。

ビューの使用方法は簡単です。

技術情報12

以下のような結果を返します。

技術情報13

結果から、データベース・グループ PTF レベルが最新であることは簡単にわかりますが、Java および HTTP Server 製品のアップデートが入手可能です。

技術情報14

次の IBM i Service ショーケース項目について、QSYS2.LIBRARY_LIST_INFO を紹介したいと思います。

技術情報15

このビューは、現在のジョブのライブラリー・リストの各ライブラリーについて 1 つの行を返し、スキーマ名、システム・ライブラリー名、ライブラリー・リストの順序位置、ライブラリーのタイプ (SYSTEM、PRODUCT、USER) など変数情報を含んでいます。

このビューは、予想されたライブラリーがライブラリー・リストにあるかどうか判断する、ジョブがクラッシュした場合のジョブの状態に関する情報を記録するなどの際に、プログラム的に使用できます。

技術情報16

ジャーナル管理という荷の重い作業をしている人には助けになります。新しいビュー QSYS2.JOURNAL_INFO は、ジャーナルに定義された各種オプション、受信プログラムのサイズ、現在アタッチされている受信プログラム、ジャーナリングされたオブジェクトの数などを示しています。

技術情報17 技術情報18

次の 2 つのサービス・オブジェクトは、「メッセージング・サービス」のカテゴリーに入ります。QSYS2.REPLY_LIST_INFO ビューを使用して、SQL から現在定義されている応答リスト・エントリーを問い合わせを行えます。

技術情報19

これは、IBM i OS コマンドの Work with System Reply List Entries (WRKRPYLE) とほぼ同等の読み取り専用 SQL です。この情報を持っていると、無人データベース変更スクリプトをデプロイする際などの SQL 環境に便利です。

表 APP_TABLE にデータ型が REAL の列 MY_COLUMN があるシナリオを考えてみましょう。慎重に熟考した後、この列のデータ型を INTEGER に変更したいと考えます。APP_TABLE は非常に大きいため、週末に無人スクリプトを実行してデータ型を変更することにします。

技術情報20

しかし、データ損失の可能性がある ALTER ステートメントを発行すると、照会メッセージ ID の CPA32B2 が自動的にジョブに送信されます。

Change of file APPTABLE may cause data to be lost (ファイル APPTABLE を変更するとデータが失われる場合があります) (C I)

スクリプトが対話型または従来のバッチ・ジョブの場合、システムは応答を待ちます。QZDASOINIT などのホスト・サーバー・ジョブにいる場合、応答の C が自動的に送信されます。ポイントは、これが無人スクリプトであることであったため、これは好ましい状況ではありません。

しかし新しいサービス・ビューは、システム応答メッセージが入力され、自動的に CPA32B2 に応答するか確認することで役立つことがあります。応答がない場合、スクリプトによりシステム応答リスト・エントリーを追加して、「Ignore (無視)」応答を送信し、スクリプトを素早く継続させることができます。この方法を示した IF ブロックを以下に示します。

技術情報21

この応答リスト・エントリーを構成すると、CPA32B2 への応答を待つことなくスクリプトは実行します。当然、自由気ままに、ジョブ照会メッセージ応答を *DFT に戻し、メッセージ CPA32B2 への自動応答を削除したい場合があります。

さらに、QSYS2.JOBLOG_INFO という新しいユーザー定義表関数 (UDTF) を使用して、アクティブ・ジョブのジョブ・ログ・エントリーを取得できます。以下の例はアスタリスク (*) をジョブ・パラメーターとして使用して、現在のジョブのジョブ・ログを返します。

技術情報22

おわかりのように、ログ中の多くのメッセージは役に立たないため、最低限の重大度を確認するか、問題があることがわかっている面倒なプログラムにより、それらのメッセージをフィルタリングすることができます。

技術情報23

システム上の任意のジョブを眺めることができるので、この UDTF を使用してシステム上のアクティブなジョブ・ログを検査することもできます (また SQL はグリーン・スクリーン F10=Job Log より優れたフィルター機能を提供しています)。開発者にとって、ジョブ・ストリームで何かが上手くいかない場合に、ジョブ・ログから特定の情報を取得するのに、プログラム的に使用することもできます。

新しい組み込みグローバル変数

IBM i 7.2 でグローバル変数という新しいものが導入されたことを思い出してください。(これは 7.1 には該当しません)。これらは特殊レジスターに似ており、実行環境に関連した情報を含んでいます。

IBM i 7.2 では TR3:JOB_NAME と SERVER_MODE_JOB_NAME の 2 つの新しいグローバル変数が導入されています。

これらのレジスターは両方とも、定型式ジョブ名をデータ型が VARCHAR(28) の JOBNO/USER/JOB_NAME の形式で返します。例として024654/QUSER/QZDASOINIT があります。利用例は以下のとおりです。

技術情報24

JOB_NAME は現在のジョブの名前を返し、SERVER_MODE_JOB_NAME は QSQSRVR ジョブを制御しているホスト・ジョブの名前を返します。QSQSRVR ジョブは、通常 SQL CLI または JDBC を使用して DB2 for i にアクセスするその他のジョブに代わって SQL ステートメントを実行します。SQL ステートメントが QSQSRVR ジョブで実行されていない場合、グローバル変数 SERVER_MODE_JOB_NAME はヌルを返します。

多くの新しいサービス同様、これらのグローバル変数は、問題が発生した場合に、ジョブに関する重要な情報を簡単に中継できます。

あわせて読みたい記事

PAGE TOP