- ベストアンサー
oracle8.1で発行されたSQLをモニタリングする方法
oracle8.1で発行されたSQLをモニタリングする方法を 教えて下さい。 標準の機能であるのでしょうか? また、市販の製品などであれば、教えて下さい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
おっしゃっている「モニタリング」をどのような頻度、どのような目的で行うのかが分かりませんので、推測で回答させていただきます。 そのときそのときのSQLを取得するならば、No.1の方がおっしゃっているSQLトレースが一般的だと思います。取得方法は、下記URLのサイトが参考になります。 参考サイトで記述されているSQLトレースはコマンドベースでの操作になるので、もっと簡単にGUIで確認するには、Oraceデータベースの管理ツールのひとつである「Oracle Enterprise Manager」を利用するとよいと思います。 Oracle Enterprise ManagerにSYSTEMユーザなどでログインし、ツリーメニュー[インスタンス]>[セッション]から、アクティブなセッション(クエリを処理しているセッション)が確認できます。ダブルクリックで処理中のSQL文やSQLの実行計画を確認・保存できます。
その他の回答 (2)
- trictrac
- ベストアンサー率38% (10/26)
リアルタイムにトレースする事はできないので、 アーカイブログを取れば、更新履歴はわかります。 ただし、更新履歴だけなので、検索はわかりません。 ただ、セッション毎にそのセッションが最後に発行した SQL分はわかるので、それを確認すれば如何でしょう。 市販ツールでは、システムインテグレータの『ObjectBrowser』 というソフトなら、その情報をGUIで見ることが出来ます。 また、下記のSQL文でも、同じ情報がみれますが・・・。 select sess.sid , sess.serial# , sess.status , sess.username , sess.machine , sess.osuser , sess.logon_time , sess.program , dbaobj.object_name , sqla.sql_text from , v$session sess , v$sqlarea sqla , v$locked_object obj , dba_objects dbaobj where sess.sql_hash_value = sqla.hash_value(+) andsess.sql_address = sqla.address(+) and obj.session_id(+) = sess.sid and dbaobj.object_id(+) = obj.object_id and sess.username is not null order by sess.sid
- ishi7474
- ベストアンサー率32% (71/216)
リアルタイムにモニタするのでなければ、SQLトレースを取得することは標準機能だけでできると思います。
補足
回答ありがとうございます。 ご指摘のあった目的ですが、実はORACLEを利用しているアプリケーションが、通常2,3秒で終わる処理が 30秒近くかかることが場合があり、毎回というわけではない為、複数の処理がバッティングし、行ロック開放まちになっているのではないかと予想しています。 目的としてはこのアプリケーションの問題を解決したいということですが、問題のSQLを特定することで、アプリケーションの問題のコーディング箇所をしぼれるのではないかと思っています。もっといい方法がありますか?(この件は、別の質問で投げるつもりです。)