DB2 for i 機能拡張のヒット・パレード
DB2 for i の最新機能でデータベース管理をさらに簡単に
IBM i 7.1 を長年使用してきた、ちょうどそこにたどり着いた、または将来のロードマップの一部である、のいずれの場合でも、データベース・ユーザー向けの IBM i の新機能と機能拡張について知りたいでしょう。データベース関連ではほとんどそうなのですが、これは「大きな」トピックです。さぁ行きましょう。最初の停留所は、戦略です。
DB2 for i 機能拡張を配信する戦略
DB2 for i とそれがデータ・センターで果たす重要な役割を知ることは、間違いなく価値があります(図 1) 。キー・ポイントをいくつか紹介します。
- DB2 for i には、たぐいまれな価値の提案があります。これらは、ビジネス・コンピューティングで成功を収めるために不可欠な構成要素です。
- DB2 for i は、IBM のお客様のニーズを満たすために成長を続けています。
- 機能拡張は、データベース管理、データベース・エンジニアリング、アプリケーション開発、セキュリティー監査、パフォーマンス分析など、幅広いユーザー分野に渡っています。
これらの機能拡張すべての配信戦略は何でしょうか?まぁ、このトピックについてチーム IBM の最新情報を常に入手する方がはるかに簡単になりました。IBM が一部の機能拡張を新しい IBM i OS のリリースと一緒にだけ配信することは皆が知っています。しかし、ちょっと待ってください。それだけではありません!
- IBM は一部の機能拡張を DB2 PTF Group 経由で配信します。これは、Technology Refresh (TR) と時期が重なるようになっていますが、TR PTF Group と交わることはありません。図 2 にある最新の DB2 PTF Group のタイムライン描写では、最新の状態を保つのが重要な理由を示しています。
- DB2 for i チームは、多くの機能拡張をリリース外で出荷しています。これらの機能拡張は小から大まであります。
お客様は、成長を続けるデータ・セットとビジネス・データに伴う複雑性を管理し、活量する点で非常にプレッシャーがかかっていると、私たちは理解しています。そうした考えに導かれ、私たちは、継続的に機能拡張を提供するだけでなく DB2 PTF Group を利用したり、IBM i Technology Updates ウィキにある補足技術データを提供したりして配信も管理しています。お客様に先進テクノロジーを提供することに加えて、私たちの目標は、お客様が問題なくそのテクノロジーを理解し、目的にかなった利用ができるためできる限りのことをすることです。
私は DB2 for i - Technology Updates ウィキ内の DB2 PTF Group 機能拡張スケジュールを保守しています。このウィキをご覧になれば以前の提供物や計画がわかると思います。PTF Group 内で機能拡張を配信する場合、機能拡張カラムには機能拡張の概要ページにつながるリンクが組み込まれます。図 3が示すように、ウィキ・ページで最新情報を簡単に見ることができます。
IBM developerWorks にログインすると、個別のページかウィキ全体をフォロー (加入)できます。内容をフォローすることで、更新された詳細情報を自動的に電子メールで「プッシュ」できます。なお、IBM i Technology Updates ウィキは、詳細技術情報を参照できる多くの場所の 1 つに過ぎません。
DB2 for i チームが万能の SQL Reference for 7.1 を更新していたことは知っていましたか?私は2 つの理由で万能と言いました。i 上で SQL を利用する上で重要なドキュメントであるため。また、それを向上させるためには凄腕でなければならないためです。マニュアルは 1,700 ページ以上もあるため、PDF 版をダウンロードしたほうがよいでしょう。他に役立つリソースとして Redbook for 7.1 機能拡張、トピックのサブセットのホワイト・ペーパー (ディープ・ダイブ)、技術記事があります。
DB2 for i コラボレーション
コラボレーションは、現代のような情報中心社会では重要です。IBM i はビジネスにアプリケーション・ソリューションを配信してきた歴史があります。また、一部の IBM Software Group 製品により、お客様は IBM i でより多くのことができます。図 4 にリストアップした製品は、現在進行中のコラボレーションの一握りにすぎません。アプリケーション開発者は、特に強調表示された製品に関心を抱くでしょう。
その製品の 1 つが IBM Data Studio です (図 5)。IBM i のお客様はこのソフトウェアを使って IBM i に対して SQL コード本体を開発してテストできます。他の IBM データベースにも動作するツールを使って、グラフィック的にコード本体をデバッグします。今は便利になりました。さらにいいことに、この製品を無償でダウンロードし、評価できます。同僚の Kent Milligan が最近記事を出したのですが、Data Studio デバッガーがいかに簡単に構成して使うことができるかというものでした (「IBM Data Studio debugger and IBM DB2 for i」) http://www.ibm.com/developerworks/ibmi/library/i-debugger-db2-i/index.html
Kent のガイドラインに従えば、i での SQL 開発環境を改善することができます。
アプリケーション開発の機能拡張
図 6でわかるように 2010 は良い年でした。IBM i 7.1 がリリースされ、データベースと SQL 機能が大きく飛躍した年でした。データベース内の XML サポートが SQL テーブル内のカラムの XML データ・タイプにより可能になりました。しかし、そこで止まりませんでした。IBM i 7.1 は、アプリケーション開発者が XML をその DB2 for i オペレーションに統合できるよう、多くの XML 関数を提供しました。主要な機能拡張をいくつか見てみましょう。
3 部構成の名前とエイリアス
3 部構成の名前とエイリアスを追加することで、データベースに接続を管理させ、多数のデータベース間での作業を簡単に行うことができます。またこの機能拡張により、アプリケーション内のデータベース透過性を展開することができました。DB2 for i はあなたの代わりに接続管理を扱うことができるだけでなく、データベース・ターゲットを変更する場合に、アプリケーションが変更されないようにすることができます。
グローバル変数
グローバル変数により、軽量データベース構造体を使って異種のアプリケーション・インフラストラクチャーを拡張できます。どうやって?と思うでしょう。グローバル変数は、インスタンス化、設定 (割り当て)、問い合わせができるデータベース・オブジェクトです。例えば、グローバル変数を使ってアプリケーションとトリガー間で通信ができます。
結果セットの SQL サポート
さて、RPG のみなさん、ないがしろにされた感じがしていますか?クライアント・インターフェースが結果セットと楽しく遊んでいるのに、あなたがたは蚊帳の外だから?でもこうしたことはもうありません。RPG プログラムには、結果セットをコンシュームする場合に必要な SQL サポートが提供されました。コーディング・スタイルは、コードに結果セットの知識がそれとなく組み込まれているかどうかにより異なりますが、この新しいサポートを使って RPG 内で結果セットの詳細をコンシュームできます。
MERGE SQL
独特のキー要件があるテーブルに対して INSERT や UPDATE などの SQL ステートメント周りの構造ロジックにうんざりしていませんか?それなら、新たな MERGE SQL ステートメントを調べてみるときでしょう。このステートメントは、このロジック (と DELETE も) を 1 つの SQL ステートメントに組み込むことができます。
Database Monitor プレフィルター
IBM i 6.1 には Client Special レジスターが含まれていました。Client Special レジスター値の Database Monitor (STRDBMON) プレフィルターを追加することでさらに一歩前進し、この構造体に刷り込まれている作業負荷を利用したチームに報いました。
OR REPLACE 節
別の機能拡張は、多くの DDL ステートメントへの OR REPLACE サポートを追加したことです。OR REPLACE 節を使うと、作成中のオブジェクトを検出して削除するロジックが必要なくなります。さらに大きなメリットとして、ステートメント中に OR REPLACE を指定すると、DB2 for i は Security on i とそれを統合し、交換中のオブジェクトの認証を保持できることがあります。この機能拡張により使いやすさが向上し、認証に関する環境面の問題からアプリケーションを保護します。
Use Currently Committed オプション
Concurrent Access Resolution サポートの Use Currently Committed オプションによりトランザクション処理を改善できます。SQL のオプション・コントロールを使って、非常に議論の多いアプリケーションの動作を決定できます。
拡張配列サポート
IBM i 7.1 はまた、配列自体がプロシージャー呼び出しでパラメーター値として渡すことができるよう、配列サポートを拡張しています。この機能により、アプリケーションは処理セットを簡単に構築し、別のコード本体に渡すことができます。
長い SQL スキーマ名
IBM i 7.1 は長い SQL スキーマ名をサポートしています。スキーマ名は 128 文字まで指定できます。対応するシステム名 (別名、ライブラリー名) はユーザーが指定するか、システムにより生成できます。名前には何があるでしょうか?まぁ、合理的で記述的な名前なら、効率的に深く理解できることと思います。
トランザクション範囲
最後になりましたが (リストの一部なので実際には違いますが) トランザクションは単一 iASP と *SYSBAS に及ぶことができるようになりました。
DB2 for i テクノロジー・リリース
最初の DB2 for i テクノロジー・リリースは 2011 年に配信しました (図 7)。DB2 for i チームは、データベース機能拡張のマーケティングとリリースを IBM i のお客様が簡単に理解できるように調整しました。ここに、機能拡張のいくつかをざっと挙げてみます。
- SQL Query 機能は CONNECT BY 節を追加したことで前進しました。CONNECT BY 節により階層型照会サポートとしても知られている、再帰的照会技法が可能になります。この技法は再帰的照会を表現するより簡潔な方法です。
- OmniFind (過小評価されている IBM i の無償検索製品) 機能拡張により、テキスト検索インデックスで出力キューにスプール・ファイルを含め、IFS ストリーム・ファイル・データを IFS に追加できます。
- 一連のライブラリー・リスト機能拡張の最初に、getSchemas() メソッドにより Java アプリケーションのライブラリー・リストを取得するよう JDBC を機能拡張しました。
- 長い SQL スキーマ名サポートを覚えていますか?QDBRTVSN() API を使用してスキーマのショート名 (別名ライブラリー名) を取得できるようになりました。これはさまざまな場合、特に Open Database File 出口点 (QIBM_QDB_OPEN) 内で便利です。この出口点内でスキーマのショート名を判断するために SQL 照会を実行することはできません。
- STRDBMON は別のプレフィルターでリスト上に再表示されます。Filter by SQLCODE (FTRSQLCODE) パラメーターを使用すると、アプリケーション障害を隔離し、認識できます。
2011 年は良い年でしたが、DB2 for i の作業をしていれば 2012 年は素晴らしかったと思います。図 8 のリストは 2012 年の機能拡張の簡単なスナップショットを示しています。
- XML が非常によい意味で、XMLTABLE 表関数を携えてリストに戻ってきました。XMLTABLE は XPath 式の評価から表を戻し、XML 文書をリレーショナル・データとして簡単に処理できます。
- SQL と外部プロシージャーには、パラメーターのデフォルト節を組み込むことができます。デフォルトは定数、特殊レジスター、グローバル変数、式、またはキーワード NULL を指定できます。デフォルト値として式を使用する機能により、アプリケーションは特定のアプリケーションからロジックを削除し、それをデータベースにプッシュすることができます。
- 新しいコマンドです!何かって?そうです、新しいコマンドです!プログラムを構築したり、SQL ステートメントの物理的な場所 (IFSファイル、ソース物理ファイル・メンバーなど) を持たなくても SQL を実行できるような方法をお客様から要求されました。Run SQL (RUNSQL) コマンドがこのニーズを実現します。そのパラメーターは既存の Run SQL Statements (RUNSQLSTM) コマンドに似ているため、RUNSQL を簡単に使用できるはずです。
- 3 部構成の名前サポートには、単一の SQL ステートメントは唯一 1 つのターゲット・データベースしか参照できないことを示す制限があります。すると、同じ単一の照会にある n 個のデータベース間でデータを結合する照会ができないということになります。2012 年の機能拡張はこのルールに例外を設けました。INSERT、CREATE TABLE、および DECLARE GLOBAL TEMPORARY TABLE により、ソース表はターゲット表とは異なるデータベースに常駐できます。
- SQL では多くのことが可能です。実際、SQL で多くのことができるため、作成する SQL は資産だと見なすべきでしょう。資産は価値があるため、自然とそれらを保護することになります。SQL プロシージャーと関数の難読化は、SQL ソースを SQL アプリケーションのユーザーから隠す簡単な技法です。IBM i では簡単にできます。では、2013 年度は私たちに何をもたらしたでしょうか?
- 複数のイベント・トリガーによりトリガーを簡単に使用することができます。単一のトリガーは INSERT、UPDATE、DELETE アクションを操作できるため、管理するトリガーの数やトリガー・ソースは少なくなります。
- スキーマ名のように、表、ビュー、およびインデックスにも冗長 (最大 128 文字) な名前を付けることができます。FOR SYSTEM NAME 節を使用すると、データベースは生成された名前ではなく、提供されたシステム名を使用するよう自律されます。これにより、オブジェクトがより簡単に特定されるため、データベース管理が向上します。さらに、複数のマシンで同一のオブジェクトを使用しているユーザーには、副次的な改善効果もあります。この機能拡張を使用して、マシン間でシステム名を同じにすることができます。
- HTTP 新機能はあまりあか抜けていない名前です。この機能をほんの少しかじると、DB2 for i で何ができるのか、まったく新しい分野が開けていることがわかるでしょう。これを「Query the Web (Web を照会する)」と呼んだ人もいましたが、それ以上のことが可能です。
- 図 4 で強調した IBM Group Software 拡張製品の 1 つである DB2 Connect は、間違いなくすでにお話ししたコラボレーション取り組みの一環です。IBM i ユーザーは、DB2 Connect とライブラリー・リスト・コントロールが合体できることがわかれば非常にうれしいでしょう。
- CHECK_SYSROUTINE() プロシージャーは、SYSTOOLS における最新の DB2 for i の例です。簡単に使えるプロシージャーで、実動マシンのスキーマを災害復旧マシンのバックアップ・スキーマと比較します。プロシージャーが QSYS2/SYSROUTINES 詳細に何らかの違いを見つけると、プロシージャーから返された結果セットで詳細が提供されます。このツールにより、反応するのではなく事前に行動を起こすことができます。
この機能拡張の別の面は、IBM i Navigator の Generate SQL を使用して SQL ソースを取得できることです。ソースを生成すると、役立つツールの作成に最新かつ最高のアプリケーション機能をどのように利用したかがわかるでしょう。自分のニーズに合わせてソースをコピーしたり、拡張したりすることもできます。TR7 は私たちのヒット・パレードの最後の停車駅です。これは以下のような機能拡張を提供します。 - 全く新しい SQL ステートメントができました!Dynamic Compound SQL ステートメントにより、ソース・コードの保守、プログラムの構築、プログラムの展開、プログラムの認証、プログラムの保守をしなくても SQL コード本体を実行できるようになりました。どういうことかおわかりでしょう?Dynamic Compound ステートメントには、宣言済みの変数、条件、ハンドラー、SQL ステートメント、SQL コーディング・ロジックが入っています。開発者はこのステートメントを Run SQL Statements (RUNSQLSTM) コマンドと使用する可能性が最も高いでしょう。この新サポートにより、RUNSQLSTM ユーザーは複雑なステートメントのスクリプトを開発できます。
- 追加のリモート 3 部構成名機能は、CREATE ALIAS SQL ステートメントを使用する代わりに、リレーショナル・データベース・ディレクトリー・エントリー・エイリアスで可能です。
- DB2 Connect がまた帰ってきました。今回は、日付、時間、タイムスタンプのフォーマットを直接制御できるようになっています。
- 新しい種類の DB2 for i カタログが手に入ります。
- RPG が経験豊富なプログラマーや初心者プログラマーにも同様に簡単に使用できるようになります。
- そうです、IBM i Debugger です。取り残されないよう、このデバッガーは SQL ステートメントから SQL ステートメントへ飛ぶことができる機能がサポートされるようになりました。
5 つのボーナス・ヒント
ボーナスの時間です!私はボーナスが大好きですが、あなたも素晴らしいボーナスを受け取りました。5 つの「知っていましたか?」データベース・アプリケーション開発のヒントのリストをご覧ください。
ヒント 1
アップグレードする場合、パフォーマンスが不可欠な SQL プロシージャー、関数、およびトリガーを再構築します。多分こう考えているでしょう。「ねぇ、スコット。アプリケーションを常に再構築する必要がない点が IBM i で気に入っているところなんだけど」と。わかりました、その通りです。しかし最後まで聞いてください。
SQL プロシージャー、関数、またはトリガーを作成する場合、SQL マスター・ソースは SQL カタログに保持されます。多分、ソース制御システムにも保存してあるでしょう。データベースは ILE C ソース・コードを、それらの SQL ステートメントから生成し、コードをコンパイルしてプログラムまたはサービス・プログラムにバインドします。リリース間で、IBM は機能拡張をコード生成に実装します。パフォーマンスに不可欠な SQL コード本体がある場合、単に再構築する方がパフォーマンスが良くなるでしょう。
ヒント 2
IBM i Navigator の Run SQL Scripts ウィンドウには、図 9 に示すように、SQL が ISO/IEC 9075-2003 規格のコア・レベルに準拠しているかどうか評価できるオプションがあります。DB2 for i はコア・レベルをフルサポートしています。Run SQL Scripts を使用して、SQL on IBM i を多数のデータベースに展開する前にそれを開発できます。
ヒント 3
最新と思われるリリース・サポートは、複数の IBM i リリース・レベル間で展開しなければならないユーザーを助けます (図 10)。このサポートを使用して、展開に向けたアプリケーションの準備を評価できます。最新と思われるリリースは、ステートメントまたはプログラム内で使用されている SQL 構造が導入されたリリースを示します。最新リリース以前のリリースで実行しようとすると、SQL パーサーのエラーに遭遇するでしょう。
QSYS2/SYSPROGRAMSTAT カタログには、SQL プログラム、サービス・プログラム、またはモジュールごとに 1 行入っています。これは、オブジェクト内にある静的 SQL ステートメントを検査することで決定されます。動的に実行された SQL では多少異なる技法が必要になります。アプリケーション実行中にデータベース・モニターの詳細情報を取り込み、QQRID = 1000 レコードの QQC82 列を検査できます。
ヒント 4
この記事の最初に、図 11 にあるような Client Special レジスターの使用をお勧めしました。このヒントはそのトピックを振り返り、始める際に役立つ多数の簡単な技法に導いています。Client Special レジスターを使用したことがない場合、図 12 に示すものに似た刷り込み方式を考え出すことを提案します。
ヒント 5
大事なことを言い忘れていました。図 13 は Database Monitor SQLCODE フィルタリングに利用できるグラフィカル・インターフェースを示しています。
DB2 for i 機能を頑張る
以上です。ビッグブルー開発研究所に戻って、開発チームのメンバーと合流してさらに DB2 for i 機能を構築するときがやってまいりました。電子メールや提案はいつでも大歓迎です!