小ネタ:IBM製品マニュアルのURLを簡単に探す方法

IBMの製品マニュアルは、昔からWEBで公開さえれているものが多かったのですが、製品によってURLがバラバラで、フォーマットもバラバラでした。

そこで最近ではソフトウェア製品を中心に同じフォーマットに統一され、名前も"Information Center"に統一されるようになってきています。

そのため、マニュアルのURLを知らなくても簡単に探す事が出来るようになっています。
例えばDB2 9.7のマニュアルは、"DB2 9.7 Information Center"で検索すると、DB2 9.7のオンラインマニュアルが一番上にリストされます。

同様に、"MQ 7.0 Information Center"や"Tivoli Storage Manager 6.1 Information Center"などで、色々なマニュアルが簡単に見つかります。

Information Centerはブラウザの言語設定によって表示される言語が変わるようになっています。

また、Information Centerは全てpublib.boulder.ibm.comというドメイン上にあるため、"DB2 9.7 publib"でもだいたいの場合マニュアルに辿り着けます。こちらの方がタイプする文字数が少なくて便利かもしれません。お試しあれ。

db2コマンドのTips2つ

DB2のコマンドラインプロセッサ(CLP)である、db2コマンド(ややこしいですね...)でバッチ処理を書く場合のTipsがPaul Mayhewさんのblogで紹介されています。

- DBMSguy.com » db2 batch scripts – tips and tricks – part 1
- DBMSguy.com » db2 batch scripts – tips and tricks – part 2

part 1で紹介されているのは-sオプションで、これはスクリプトの途中でエラーがあった場合にそこで処理を中止するというオプションです。

update command options using s off; (もしくはon)

とすることで、on/off切り替えが出来る事も紹介されています。

part 2で紹介されているのは-mオプションで、Paulさんも書かれているようにDB2 9.1から追加された比較的新しいオプションです。-mを付けて更新系のSQL(INSERT/UPDATE/DELETE)を実行すると、更新の対象となった行数が表示されるようになります。これは結構便利ですね。

例)
c:¥>db2 +c -m "UPDATE STAFF SET SALARY = SALARY+1.0 WHERE YEARS > 6"
影響を受ける行数: 15
DB20000I SQL コマンドが正常に完了しました。

DB2で実行計画(アクセスプラン)を外部から指定する方法

DB2は統計情報(RUNSTATSで取得)を元に、自動的に最適な実行計画(アクセスプラン)を生成します。ユーザが明示的に指定する方法(ルールをSQLに埋め込むなど)は、ありません。...というのが一般的な説明なのですが、前にも少し書いたようにDB2にも外部から実行計画を指定する方法があります。

推奨される方法ではないのでドキュメントがあまり無いのですが、以下にガイドが公開されています。

- 最適化プロファイルの基本的な使い方 (IM-10-00P)

最適化プロファイルという機能を使うと外部から実行計画を指定できます。DB2の場合はSQLにヒントを書くのではなく、XMLファイルで最適化の指示を書いて、それを読み込ませるという方法を取ります。

ちょっと面倒ですが、これによってSQL自体に手を入れずに(プログラムには影響を与えずに)実行計画を変更する事が可能です。

とはいえ、上記ガイドに「最適化プロファイルは、すべてのチューニング・オプションを使い尽くしても期待する結果が得られない場合に使用するようにしてください。」とあるように、この機能はどうしても他に方法が無い時の最終手段だと思ってください。

ダイナミックにデータが変化していく昨今のRDBMSにおいて、ユーザが一つ一つのSQLの実行計画を決定するというのは、推奨できる使い方では無いです。

POWER7搭載のAIXにDB2を導入する際の注意点

※社内Uさんからの情報です。ありがとうございます!

最新プロセッサのPOWER7を搭載したAIXサーバにDB2を導入する際には、いくつか注意点があり、ちゃんと設定をしていないとインストーラーが起動できないようです。

- IBM - Preparing for DB2 product installation on Power7 Systems
This technote provides information and manual steps that you have to follow to move existing DB2 installed products to Power7 systems running the AIX 6.1 TL4 operating systems.


対象のDB2はDB2 9.1/9.5/9.7です。つまり現在標準サポートされるDB2全てですね。最新マシンでDB2を試される際は上記リンクを参照してください。また、毎回紹介していますがAIX上にDB2を導入する場合は下記の情報も必見です。

- IBM - Known issues for DB2 on AIX 5.2, 5.3, and 6.1

DB2を導入したサーバのホスト名を変更する際のTips

DB2が導入されたサーバのホスト名を変更すると、DB2側の設定も一部変更する必用があります。DB2も設定情報(レジストリ変数)などにホスト名を記録しているからです。

その方法についてまとめた情報が公開されています。

- [DB2 LUW] DB2 サーバーが稼動するコンピュータのホスト名の変更手順 (IM-10-00K)

基本的にはレジストリ変数の変更とdb2nodes.cfgの修正、カタログのし直しだけなのですが、意外に「はまる」箇所もありますので、上記ガイドに従うのが良いと思います。

DB2小ネタ - JDBCドライバのバージョンを確認する方法

今日知った話なのですが、DB2のJDBCドライバ(db2jcc.jarもしくはdb2jcc4.jar)のバージョンを確認するには、JDBCドライバをCLASSPATHに含めた上で以下のコマンドを使うと確認できます。(Windowsの「DB2コマンド・ウィンドウ」を開くと、デフォルト設定ではCLASSPATHにJDBCドライバを含んでいるはずです)

$ java com.ibm.db2.jcc.DB2Jcc -version
IBM DB2 JDBC Universal Driver Architecture 3.58.82

上はDB2 9.7 FP1に付属のJDBCドライバ(db2jcc.jar)の例です。JDBC4対応のdb2jcc4.jarをCLASSPATHに入れた場合は以下のようになります。

$ java com.ibm.db2.jcc.DB2Jcc -version
IBM Data Server Driver for JDBC and SQLJ 4.8.87

案外知られていないのではと思ったのでUnofficial DB2 FAQにも追加しておきました。

- Unofficial DB2 FAQ - JDBCドライバのバージョンを確認するには?

DB2小ネタ - CS with CCに対応したdb2batchの新オプション

先日の大阪CLUB DB2でdb2batchを紹介したのですが、その資料を作成する時にマニュアルを確認して小ネタを発見しました。

DB2 9.7からCS with CCと呼ばれる新しい分離レベルが追加され、更新トランザクションが読み取りトランザクションをブロックしないモードが実現されました。これは以前以下のエントリで書いています。

- DB2 9.7新機能:更新トランザクションが読み取りトランザクションをブロックしなくなった

このCS with CCに対応できるように、db2batchもv9.7で新しいオプションが追加されたようです。

- db2batch - ベンチマーク・ツール・コマンド
-car CC
更新または削除の処理中に、db2batch 操作が、該当するスキャンに対して現在コミット済みバージョンのデータを使用することを指定します。


db2batchはDB2でベンチマークをするための便利なコマンドです。
私も試していないので動きがよく分かっていないのですが、この-car CCを指定する事で更新トランザクションを待たないようにベンチマークを実行できるようです。

DB2でOFFSET句やLIMIT句を実現する際のちょっとしたTips

PostgeSQLやMySQLでは以下のようにSELECTにOFFSET句やLIMITを付けることでアンサーセットから一部分だけを取り出す事ができます。

> SELECT * FROM T OFFSET 10 LIMIT 20

こうするとアンサーセットの11行目から数えて20行を取り出す事ができます。こういう中間部分を取り出すクエリーをDB2で実行する際のTipsが以下の記事にまとめられています。

- Porting LIMIT and OFFSET SELECT clauses to DB2 - ChannelDB2

先頭からx行を取り出すなら、FETCH FIRST x ROWS ONLYを使えば良いですし、アンサーセットの中間が欲しい場合はOLAP関数のROW_NUMBER()を使って行番号を振るか、最近のDB2であればOracleとの互換性機能が使えるのでOracleのようにROWNUM擬似列が使用できます。これらは以前に私も紹介した方法です。

- DB2でMYSQLのLIMITを実現するには
- Viper2の新機能 - 他RDBMSとの互換機能

記事が興味深いのはここからで、このROWNUMを使って以下のように書くとDB2ではパフォーマンス面で今ひとつであると解説しています。

> SELECT * FROM T WHERE ROWNUM BETWEEN 11 AND 31

これはそもそもROWNUM列がOracle互換性のために作られている事が理由のようです。OracleではROWNUMに対してBETWEENやROWNUM > xという式は決して使われないために、DB2も最適化(オプティマイズ)しようとしないから、と解説されています。

DB2のオプティマイザの詳細は良く分かりませんが、OracleでROWNUM > xやBETWEENが使われない理由は以下の資料で明確に記述されています。

- Ask Tom: On ROWNUM and Limiting Results

つまりOracleでROWNUM > xやBETWEENを使うと結果が0行になってしまうため、そのような条件式は使われないのですね。

さてDB2でROWNUMを使う際に速度を最適化する方法として、記事では以下の書き方が解説されています。

To get decent query performance, you must help DB2 with manual query rewriting:
select * from (select * from T where rownum <= 1000) where rownum > 800.

つまり、FROMの後ろの副照会(Oracle風に言うとインラインビュー)で一旦WHERE ROWNUM <= x という条件を評価させます。こちらはしっかり最適化されるはずですね。その後で外側の条件で必要な部分だけ取り出すというわけです。

回りくどい書き方の方がパフォーマンスが出るという面白い例ですね。私は速度差を評価できていないですが、著者は実績から自信を持ってお勧めしているようです。

なお、こういうオプティマイザの特別な挙動に基づいたに知識は面白いのですが、バージョンが変わるとまったく挙動が変わる可能性があるので注意が必要です。次のバージョンではBETWEENがより最適化される挙動になるかもしれません。

読みづらいクエリーはメンテナンス性が良くありませんし、著者も書いているように通常は直感的に"WHERE ROWNUM BETWEEN ..."で書き、どうしてもパフォーマンスが問題になる場合にだけ上のようなトリッキーな書き方をすべきですね。

DBADM権限を付与する際のTips

DB2 LUW Secirity Blogで、DBADM権限についてのちょっとしたTipsが紹介されています。「本当にDBADMをREVOKEするには」というものです。

- DBI Blogs :: DB2 Security How-To :: DB2 LUW Security -- Revoking DBADM (REALLY)

GRANTで一度DBADM権限を付けた後に、REVOKEしても完全に元には戻っていないという事です。これはDBADMをGRANTした際に下位の特権も同時に付与される事から起こる現象なのですが、オプションで不要な特権は付けない事も可能です。詳しくは上記のblogで詳しく解説されています。

DB2 9.7小ネタ - Windows版DB2インストーラーの小さな改善

この前DB2を導入し直して気づいたのですが、DB2 9.7 for Windowsのインストーラーが少し改善されて、Firefoxがデフォルトブラウザになっていても、問題なくインストールできるようになっている事に気づきました。

Windows版ではDB2のインストールイメージからsetup.exeを起動すると導入やアップグレードかを選択するメニューが出るのですが、以前はIE以外がデフォルトブラウザになっていると、うまく導入のための実行ファイルが起動できないという問題がありました。(Explorerから直接インストーラーを起動すれば問題ないのですが)

大変小さい改善ですが、良い改善だと思います。

検索
著書
DB2cover_small.jpg
DB2の管理方法を解説した本を書きました。
ad
リンク集
about this site
recommend
プログラマのためのSQL 第4版
プログラマのためのSQL 第4版 (JUGEMレビュー »)
ジョー・セルコ
名著が第4版として、内容拡充されて発売されました。SQLの考え方を基礎からしっかり学習したい方にお勧めです。
recommend
recommend
WebSphere Application Server 構築・運用バイブル 【WAS8.5/8.0/7.0対応】
WebSphere Application Server 構築・運用バイブル 【WAS8.5/8.0/7.0対応】 (JUGEMレビュー »)
串宮 平恭,達見 圭介,田中 孝清,原口 知子,福崎 哲郎,盛林 哲
WebSphere Application Serverの運用管理本が出ました!WAS v7〜v8.5まで幅広いバージョンに対応しています。
recommend
recommend
Effective Java 第2版 (The Java Series)
Effective Java 第2版 (The Java Series) (JUGEMレビュー »)
Joshua Bloch
すべてのJava開発者必読の書が大幅改訂されて第2版になりました!。
文法などは解説していませんが、Java言語でプログラムを書くにはどういう事に気をつけるべきかという事が非常に端的に、かつ明確な理由とともに解説されています。
第2版ではJava SE 6対応がなされ、第1版で提案してJava SEに取り込まれた部分は整理され、新しい機能であるGenericsやアノテーションについての記述が多数追加されています。以前に増してお勧めできる書になりました。
まだ読んだことが無いJava開発者はぜひ読んでみてください。
recommend
 (JUGEMレビュー »)

基礎的なSQLは書けるようになったけど、今ひとつSQLのルールになんとなくしっくりこない、腑に落ちない。そんな人にお勧めの入門書です。SQLの根底に流れる基本的な考え方をやさしく解説してくれています。(レビューはこちら)
recommend
SQLパズル 第2版 プログラミングが変わる書き方/考え方
SQLパズル 第2版 プログラミングが変わる書き方/考え方 (JUGEMレビュー »)
ジョー・セルコ,Joe Celko
SQL入門を終えて、SQL中級/上級者になりたいと考えている方にぴったりのトレーニング本です(レビューはこちら)
recommend
XML-DB開発 実技コース
XML-DB開発 実技コース (JUGEMレビュー »)
下佐粉 昭,野間 愛一郎,久保 俊彦,高橋 賢司
XML-DBのやさしい入門書です。XMLの基礎から、XPath,XQueryの解説、設計の基礎、Javaでのプログラミング等盛りだくさんの内容です。
recommend
データベースパフォーマンスアップの教科書 基本原理編
データベースパフォーマンスアップの教科書 基本原理編 (JUGEMレビュー »)
エンコアコンサルティング
DBMSの基本的な内部構成、動作についての考え方をやさしく解説してくれています。(レビューはこちら)
recommend
メインフレーム実践ハンドブック z/OS(MVS),MSP,VOS3のしくみと使い方
メインフレーム実践ハンドブック z/OS(MVS),MSP,VOS3のしくみと使い方 (JUGEMレビュー »)
神居 俊哉
メインフレームの技術について、基礎概念から、実践的な使い方までを網羅した初めての解説書です。
recommend
 (JUGEMレビュー »)

CSSの概念/基礎をしっかりと解説してくれるCSS入門書。サイトへの実践的な適用方法も解説されています(レビューはこちら)
無料のDB2 Express-C
DB2 Express-C ダウンロード
recent entries
categories
recent comments
  • DB2の正式名称が"Db2"に変更。dashDB for TransactionもDb2 on Cloudに名称変更
    Taco (06/24)
  • DB2でインスタンスを追加で作成するには
    SIM (03/18)
  • DB2でインスタンスを追加で作成するには
    晩衛 (03/17)
  • SQLの学習サイト
    SIM (03/26)
  • SQLの学習サイト
    DB (03/25)
  • IBMとマイクロソフトが提携!AzureでDB2やWebSphereが、IBMクラウドでSQL Serverが提供される事に
    sim (10/25)
  • IBMとマイクロソフトが提携!AzureでDB2やWebSphereが、IBMクラウドでSQL Serverが提供される事に
    INA (10/24)
  • OpenSSLのHeartbleed脆弱性(CVE-2014-0160)は、DB2には影響ありません
    SIM (04/24)
  • OpenSSLのHeartbleed脆弱性(CVE-2014-0160)は、DB2には影響ありません
    oda (04/23)
  • IBM BLU for Cloudの日本語ガイド
    SIM (03/13)
recent trackbacks
archives