• 締切済み

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、質問 もう、正直いって自分の知識だけでは、もう解析方法が残っておりません。 なにかアドバイスはありませんでしょうか? もしくは具体的に「コレをみろ!」とか「コレを使え!」とか ありましたら、教えてください。

  • Oracle
  • 回答数4
  • ありがとう数6

みんなの回答

回答No.4

障害情報は主に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トレースは取ることが出来ます。

回答No.3

こんにちは。 実際に見てみないと、詳しい事がわかりませんが・・・、 とりあえず問題を切り分けていくべきでしょう。 oo4oを介しない場合はどうなのか? クライアントは、特定のPCでのオペレーションで起こるのか? 「ある処理」とは、ある特定の処理のみで起こるのか? (この場合、SQLに問題がないのか?) 設計上、デッドロックの回避はおこなわれているのか? などなど・・・。 手間ですが、一つずつ潰していくしかないでしょう・・・。 (^^ゞ

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>障害情報を早速みてみたいのですが >どこに出力されるものなのでしょうか? 出力されているというか、Oracle社が公開している障害情報という意味ですね。 http://support.oracle.co.jp/ ただし、サポート契約してないと、たいした情報は出てきませんが。

mas_sama
質問者

補足

これは失礼しました。 ログファイルかなにかと思い勘違いをしておりました。 URLを参考にさせいただいたのですが ご指摘の通り、サポート契約をしていない状態では 本事象の解決につながるような情報は取得できないようです。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

Oracleのバージョンは?特にクライアントはXPに対応してるバージョンですか? v$sessionみてるんでしたらどのセッションがロックをかけっぱにしてるかわかるかと。 クライアントなのか、DBリンクなのか位は調べないと。 クライアントだったら該当の端末のタスクマネージャをチェック。DBリンクだったら、障害情報をチェックかな?

mas_sama
質問者

補足

迅速な回答ありがとうございます。 障害情報を早速みてみたいのですが どこに出力されるものなのでしょうか? (質問ばかりで申し訳ありません^^;) >Oracleのバージョンは?特にクライアントはXPに対応してるバージョンですか? DBMSはOracle8iです。 クライアントのoo4oはXPに対応しています。 (OracleClient Ver9.2のものを使用しております。) >v$sessionみてるんでしたらどのセッションがロックをかけっぱにしてるかわかるかと。 セションは特定しております。そのときに解析されているSQLも判明しているのですが、セションがアクティブのままのため、DBMSでSQL解析などの処理が走っていると考えております。また、ロックはトランザクション・エンキュにのみかかっています。 >クライアントなのか、DBリンクなのか位は調べないと。 クライアントはDB処理の結果待ちとなっておりますので、DBリンクを利用した、DBアクセスが怪しいと考えております。また、他のプログラムでも同様DBリンクを使用しておりますが正常に処理されます。

関連するQ&A

  • DBトラブルの解析方法について

    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を利用したDBAの流れについて 以下で挙げる処理1~4を順番に、GUIからの入力で実行します。 (1)処理1 (1)セションAを開始して、インスタンスAに接続。 (2)セションAからインスタンスAの複数の表の1レコードをロックする。 (3)セションAからDBリンクを利用して インスタンスBのオブジェクト(表など)を参照する。 (2)処理2 (1)セションBを開始して、インスタンスCに接続する。 (2)セションBからインスタンスCの1つの表1レコード参照してロックする。 (3)セションBからロックしたレコードを更新する。 (4)セションBをコミットする。 (3)処理3 (1)オペレーションCを開始して、インスタンスCに接続する。 (2)セションCからインスタンスCの複数の表の1レコード参照してロックする。 (3)セションCからインスタンスCの複数の表の登録・更新 (4)処理4 (1)セションAをコミットする。 (2)セションBをコミットする。

  • db2setupでdb2inst1が作成されない

    お世話になります。 redhat9にDB2ver8を導入しようとしています。 db2setupを実行しGUIインストールを行いました。 しかし、セットアップ完了画面でなぜかdb2inst1だけ作成されておらず、db2start等のコマンドができません。新しくdb2inst1とdb2grpを作成して、再度インストールを実行してもうまくいきません。 色々調べてみたのですが、いまいちよい事例が見つからないので、質問させていただきますので、よろしくお願いします。 以下に失敗していると思われるログを抜粋します。 DB2 ファイル・セットのインストール:.......成功 DB2 ライセンスの登録:.......成功 デフォルト・グローバル・プロファイル・レジストリー変数の設定:.......成功 DB2 Administration Server の作成:.......成功 エラー:現在の DB2INSTANCE を "db2inst1" に切り替えることができませんでした。戻りコードは "-2029059916" です。 インスタンス・リストの初期化:.......成功 DB2 インスタンス構成のカスタマイズ:.......成功 エラー:DBI1131E ユーザー ID db2inst1 が無効です。 説明: 与えられたユーザー ID にアクセスしようとして失敗しました。 次の状態のいずれかが発生していると考えられます。 o このユーザー ID がシステムにない。 o このユーザーのホーム・ディレクトリーが正しく設定されていない。 o DB2 で必要なユーザー属性のいずれかが設定されていない。 o このユーザーの UID が 0 である。

  • EXCEL-VBAのプログラムを移植したいのですが、よい方法はありますでしょうか?

    初めて投稿いたしますマタドールです。 実は今業務でEXCEL_VBA+oo4o(Oracle Object fro OLE)という組み合わせのプログラムを使用しています。 使用しているプログラムは、大変ボリュームがあり ステップ数にしても数十~数百キロレベルに達するものとなっています。 また、エクセルのグラフ機能などもかなりフルに駆使するようなVBAとなっています。 このEXCEL_VBA+oo4oのプログラムを、できれば別の言語に移植し、かつオラクルが稼動しているサーバーにウェブサーバーをたて、そこからActiveXかなにかで クライアント側のプログラム(VBAプログラムを移植したものを想定)をキックして使うようなシステムに移行しようと考えております。 ただ、なにぶん私はWindowsのプログラミングなど日が浅く、あまり有用な情報がなかなか見つからない状態でとても困っています。 なにかよきアドバイスなどあれば、ご教授いただきたく。どうぞよろしくお願いいたします。m(_ _)m

  • 異なるDBのSQL

    SQLを始めたばかりの初心者です。 oo4oやADOを使用して、オラクルサーバーのデータをSELECT文で オラクル内の複数のテーブルを結合してListViewで表示する プログラムを作成中です。 オラクルサーバーにメインデーターがあり 各クライアントにMDB形式でマスタデータがあります。 MDBのマスタデータにはたとえばですが、テーブル名 [商品テーブル] フィールド名[コードナンバー]、[商品名]... となっており、サーバーには、テーブル名[商品コード]  フィールド名[コードナンバー]、[受注日]....があるとします。 クライアントからoo4oやADOを使用して、サーバーのデータを SELECT文でオラクル内の複数のテーブルを結合して ListViewで表示するのはできます。しかし [コードナンバー]は取得できるのですが、サーバーのテーブルには、 [商品名]がないためとうぜん表示できません。 この場合、オラクルから取得したデータをマスタデータのあるMDBに新しくテーブルを 作りそこに一度格納して再度ADOで結合処理して 商品名を表示する方法しか考えつかないのですが、 ほかに良い方法はありますでしょうか? ADOで接続MDBに保存再度ADOで接続して表示では レスポンスが悪いかなと思いまして... *VB6 winXP-pro オラクル9i

  • Oracle12cとのoo4o接続

    サーバー上のDBが「Oracle 12c(12.2)」です。 クライアントは「Windows7」で「Oracle Client 11.2.0.4」がインストールされている場合、クライアント上のプログラムから、サーバー上のOracleデータベースに「oo4o」で接続できますでしょうか?

  • 複数企業が利用するOracleの構成について

    複数社に納入しているC/S型パッケージ業務ソフトを、 ASP化しようと検討しています。 (現状は各顧客先にサーバとクライアントを  設置していますが、今後はサーバのみ1台に集約して  データセンタに設置し、顧客側にはクライアントのみ  設置する予定です。) そこでご相談なのが、Oracleのデータの持たせ方なのですが、 1サーバの中に顧客毎にインスタンス(データベース)を 作成するか、1インスタンスに顧客分ユーザを作成して、 ユーザ毎にスキーマをもたせるか悩んでおります。 セキュリティや個別メンテナンスを考慮すると前者の方が 良いのでしょうが、予算の関係から可能であれば後者を 採用したいと考えております。 そこでそれぞれのメリット・デメリットはどういった事が 考えられるでしょうか?(特に1インスタンスとした場合の デメリットが問題ですが。) よろしくお願いします。

  • AccessのDB破損に関して お教え願います。

    OS:Windows2000 Access Version:Access2002(XP) いつもお世話になっています。 Accessにてシステムを構築し、ある業務にて運用しています。 データmdbをサーバにおいて、クライアントをネットワーク経由 にてプログラムmdbを使用してアクセスしています。 上記状態で最近以下のメッセージが頻発して困っています。 「Microsoft Access データベースが開いているときに、 いずれかのユーザが Microsoft Access を終了しました。このデータベースを修復しますか?」 この状態になった場合は、最適化を行えば使えるようになりますが、頻発して困っています。 同様のシステムを運用しているところが複数在りますが・・・・ 同現象が発生しているのが1つしかないことです。 全部同じ現象が発生しているのなら、プログラム的なバグと特定できるのですが、、、、、 なにとぞ、ご教授をお願いいたします。

  • Oracleインスタンスへの接続制限について

    1台のサーバにOracleのインスタンス(A、B)を複数立てた環境において、 クライアント1からはAインスタンスのみ利用可能、クライアント2からは Bインスタンスのみ利用可能とさせる事は可能でしょうか? (クライアント2の利用者にAインスタンスのインスタンス名、  ユーザ名、パスワードが漏れてしまっても、Aインスタンスに  接続できないように制限できればと思っています。) 宜しくお願いします。

  • ASPからOracle9iへの接続方法

    環境は以下のように変更となりました。 ・サーバーOS:WindowsNT SP6→Windows2000Server ・DB:Oracle8.0.5→Oracle9i ・ASP ・クライアント:Oracle8.1.6のまま ASPでWebからoo4oでOracleDBに接続します。 Oracle8で動作していたASPが、Oracle9iに変更した ところ、ASPの動作で以下エラーがでてしまいます。  エラー内容:   「orasession作成中にエラーが発生しました」 oo4oでの接続は以下のように記述しています。  Set Application("OraSession") =  Server.CreateObjec       ("OracleInProcServer.XOraSession") どんな原因が考えられますでしょうか? お教え下さい。よろしくお願いいたします。

  • サーバでファイル名を変更するとロックがかかる

    ActiveDirectory環境で、Windows2000 Server のファイルサーバを運用しています。 ドメインユーザがクライアントパソコン(WindowsXP Pro)からファイルサーバ上のファイル名を変更した後、ファイル名変更や上書きコピーを行なおうとすると「ほかの人またはプログラムによって使用されています」とのエラーメッセージが表示されます。 ●このファイルをプログラムから開くようなことはしていません。 ●他のユーザがこのファイルを開いてはいません。 ●ファイル名を変更したドメインユーザがクライアントパソコンよりログアウトすれば、ロックは解除されます。 ●ロックされているとき、ファイルサーバの[コンピュータの管理]-[共有フォルダ]-[開いているファイル]にロックされているファイルが表示されます。 そこで右クリック→[開いているファイルを閉じる]を行なうと、一覧からはいなくなりますが、ファイル名の変更などでエラーはでて、ロック状態のままです。 原因をご存知のかたがいらっしゃいましたら教えていただけないでしょうか。よろしくお願いします。