データベース自体のトラブルは、パフォーマンスの問題からデータ・ページの破損によってデータベースにアクセスできなくなるなどの問題まで、さまざまです。パフォーマンスに関しては、大半がチューニングの問題であるため、Database Expertフォーラムの「DB2チューニング・ベストプラクティス」を参考にしてください。
Linux環境で特に多いのは表スペースに関する問題です。中でもRAWデバイスのパーミッションに関する問題が一番多いのではないでしょうか。Linuxでは、rootユーザーとdiskグループにしかRAWデバイスにパーミッションがありません。
# ll /dev/raw* crw-rw---- 1 root root 171, 0 Jul 1 04:04 /dev/raw1394 crw-rw---- 1 root disk 162, 0 Jul 1 04:04 /dev/rawctl crw-rw---- 1 root root 30, 41 Jul 1 04:04 /dev/rawip crw-rw---- 1 root disk 27, 32 Jul 1 04:04 /dev/rawqft0 /dev/raw: total 175 drwxr-xr-x 2 root root 408 Jul 21 23:33 . drwxr-xr-x 35 root root 179544 Sep 2 13:58 .. crw-rw---- 1 root disk 162, 1 Jul 1 04:04 raw1 crw-rw---- 1 root disk 162, 10 Jul 1 04:04 raw10 (以下略)
しかし、DB2はインスタンス・ユーザー権限でRAWデバイスにアクセスしようとするので、書き込み権限などの問題が発生します。そこで、インスタンス・ユーザーもRAWデバイスが使えるように、RAWデバイス設定時にRAWデバイス自体とコントロール・ファイル(rawctl)にパーミッションを与えておきます。
# chown db2inst1.db2grp1 /dev/raw/raw1 # chmod 664 /dev/rawctl
DB2のツール/コマンドについてのトラブルは、DB2が提供するメッセージ機能が充実しているため、比較的対応が簡単です。例えば、以下のようなエラーに対しては、
$ db2 ? [メッセージ番号]
を使って、エラーメッセージの詳細と対応方法を確認できます。
$ db2 create db test on /db2data SQL1052N データベース・パス "/db2data" が存在しません。
$ db2 ? SQL1052N SQL1052N データベース・パス "<path>" が存在しません。 説明: コマンドの path パラメーターに指定されたパスが無効です。その名前のパスは存在しません。 (以下略)
この場合、「/db2data」というディレクトリが存在しないことが原因なので、正しいパスを指定すれば解決します。
SQL/トランザクションに関しては、Linux環境だから特に多いという問題はありません。また、このたぐいのエラーの70%はSQLの文法に関する問題なので、マニュアルのSQLリファレンスを参考に修正すればいいでしょう。
複雑なアプリケーションなどは、トレースファイルを活用することで問題解決を早めることができます。例えば、JDBCとODBCトレースを有効にするには、db2cli.iniに以下のセクションを追加します。
[COMMON] jdbctracepathname=/tmp/jdbctrace jdbctrace=1 trace=1 tracepathname=/tmp/db2trace
以下、ODBCトレース・ファイルの例です。
SQLExecDirect( hStmt=1:1, pszSqlStr="SELECT EMPNO FROM EMPLOYEE", cbSqlStr=-3 ) ---> Time elapsed - +2.500000E-005 seconds ( StmtOut="SELECT EMPNO FROM EMPLOYEE" ) ( Package="SYSSH200 ", Section=4 ) ( Requested Cursor Attributes=1027 ) ( Reply Cursor Attributes=525322 ) ( Actual Cursor Attributes=525323 ) SQLExecDirect( ) <--- SQL_SUCCESS Time elapsed - +1.798410E-001 seconds
このトレースファイルで、カーソルの状態やオプションの詳細などが確認できます。エラー個所の特定も、SQL_ERRORをトレースすることで容易に見つけることができます。
以上、Linux環境を前提に、DB2のトラブルシューティングについて説明しました。DB2の品質自体はそれほど悪くないので、よほどのことがない限り致命的な障害が起こることはありません。皆さんが遭遇するトラブルのほとんどは、解決できるものです。この記事や以下のWebページを参考にして、トラブルに挑んでみてください。トラブルから学ぶことも多いはずです。
Copyright © ITmedia, Inc. All Rights Reserved.