- 締切済み
DBの解析方法
誤って新規作成してしまったQNo.1340574は後ほど削除します。^^; 1、システム構成 (1)クライアント(Windows XP Professional) (1)VB6で作成した業務プログラム (2)oo4o(Oracle Object For Windows) (2)サーバ(HP-UX9000/800) (1)Oracle(DBMS) (ハードウェアが5台あり、ハードウェア毎にインスタンスが1つ作成済み。) (各インスタンスには、複数のユーザを作成済み。) (便宜上、各インスタンスをA,B,C,D,Eと呼ぶ。) 2、発生している問題 クライアントの業務プログラムからoo4oを 利用してDBアクセスを行っておりますが ある処理で、サーバからの応答がなくなり クライアントプログラムが応答なしとなります。 この状態で、v$session,v$lockの内容を確認したところ ユーザテーブルに対しての参照SQLのセションがアクティブの残っており 更に、トランザクション・エンキュに対してのロックも残っている状態まで 確認することができました。 (また、30分程度待つことで、セションが消滅します。) また、サーバがこの状態になると 別クライアントから同様の処理を実行するたびに クライアントプログラムが応答なしとなり アクティブのセションが残ってしまいます。 また、サーバに接続するクライアントが少ない場合には発生していないようです。 (開発環境では再現しません) 3、質問 もう、正直いって自分の知識だけでは、もう解析方法が残っておりません。 なにかアドバイスはありませんでしょうか? もしくは具体的に「コレをみろ!」とか「コレを使え!」とか ありましたら、教えてください。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- whiteline507
- ベストアンサー率63% (47/74)
障害情報は主にalert.logと呼ばれるものに出力されます。 まず概要がalert.logに出力され詳細がトレースファイルに出力されます。 HP-UXということでデフォルトならば $ORACLE_BASE/admin/{ORACLE_SID}/bdumpにalert.logが出力されます。デッドロックなど何らかの障害が発生している場合にはこちらに表示されます。 またロックと疑ってかかるのであればv$lockやv$locked_objectが有効な情報源となります。 8iであればSTATSPACK、セッションが特定できているのであればSQLトレースなども有効です。 アプリから起動されるセッションでもログイントリガに alter session set sql_trace=trueを仕込めば簡単にSQLトレースは取ることが出来ます。
- taka451213
- ベストアンサー率47% (436/922)
こんにちは。 実際に見てみないと、詳しい事がわかりませんが・・・、 とりあえず問題を切り分けていくべきでしょう。 oo4oを介しない場合はどうなのか? クライアントは、特定のPCでのオペレーションで起こるのか? 「ある処理」とは、ある特定の処理のみで起こるのか? (この場合、SQLに問題がないのか?) 設計上、デッドロックの回避はおこなわれているのか? などなど・・・。 手間ですが、一つずつ潰していくしかないでしょう・・・。 (^^ゞ
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>障害情報を早速みてみたいのですが >どこに出力されるものなのでしょうか? 出力されているというか、Oracle社が公開している障害情報という意味ですね。 http://support.oracle.co.jp/ ただし、サポート契約してないと、たいした情報は出てきませんが。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
Oracleのバージョンは?特にクライアントはXPに対応してるバージョンですか? v$sessionみてるんでしたらどのセッションがロックをかけっぱにしてるかわかるかと。 クライアントなのか、DBリンクなのか位は調べないと。 クライアントだったら該当の端末のタスクマネージャをチェック。DBリンクだったら、障害情報をチェックかな?
補足
迅速な回答ありがとうございます。 障害情報を早速みてみたいのですが どこに出力されるものなのでしょうか? (質問ばかりで申し訳ありません^^;) >Oracleのバージョンは?特にクライアントはXPに対応してるバージョンですか? DBMSはOracle8iです。 クライアントのoo4oはXPに対応しています。 (OracleClient Ver9.2のものを使用しております。) >v$sessionみてるんでしたらどのセッションがロックをかけっぱにしてるかわかるかと。 セションは特定しております。そのときに解析されているSQLも判明しているのですが、セションがアクティブのままのため、DBMSでSQL解析などの処理が走っていると考えております。また、ロックはトランザクション・エンキュにのみかかっています。 >クライアントなのか、DBリンクなのか位は調べないと。 クライアントはDB処理の結果待ちとなっておりますので、DBリンクを利用した、DBアクセスが怪しいと考えております。また、他のプログラムでも同様DBリンクを使用しておりますが正常に処理されます。
補足
これは失礼しました。 ログファイルかなにかと思い勘違いをしておりました。 URLを参考にさせいただいたのですが ご指摘の通り、サポート契約をしていない状態では 本事象の解決につながるような情報は取得できないようです。