検索
連載

DB2 レイヤ別トラブルシューティング集DB2マイスター養成講座(最終回)(2/2 ページ)

DB2ではどのようなトラブルが想定されるのか。レイヤ別に主なトラブルとその解決方法を紹介する。(編集局)

Share
Tweet
LINE
Hatena
前のページへ |       

データベースに関するトラブル

 データベース自体のトラブルは、パフォーマンスの問題からデータ・ページの破損によってデータベースにアクセスできなくなるなどの問題まで、さまざまです。パフォーマンスに関しては、大半がチューニングの問題であるため、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/トランザクションに関するトラブル

 SQL/トランザクションに関しては、Linux環境だから特に多いという問題はありません。また、このたぐいのエラーの70%はSQLの文法に関する問題なので、マニュアルのSQLリファレンスを参考に修正すればいいでしょう。

 複雑なアプリケーションなどは、トレースファイルを活用することで問題解決を早めることができます。例えば、JDBCとODBCトレースを有効にするには、db2cli.iniに以下のセクションを追加します。

[COMMON]
jdbctracepathname=/tmp/jdbctrace
jdbctrace=1
trace=1
tracepathname=/tmp/db2trace
[インスタンス・ホームディレクトリ]/sqllib/cfg/db2cli.ini

 以下、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.

前のページへ |       
ページトップに戻る