sQLサーバーを使用していますが、Oracle DBを使用するアプリケーションに移行する必要があります。アプリケーションクエリをトレースするには、Sql ServerですばらしいProfilerツールを使用します。 Oracleに相当するものはありますか?
Oracle Enterprise Managerを使用して、実行中の問合せ、その実行計画、ロック、一部の統計、さらに長いタスクの進行状況バーまで、アクティブなセッションを監視できます。
参照: http://download.Oracle.com/docs/cd/B10501_01/em.920/a96674/db_admin.htm#1013955
[インスタンス]-> [セッション]に移動し、各セッションの[SQL]タブを確認します。
他の方法があります。エンタープライズマネージャーは、ここに記載されているようなスペシャルビューですでに利用可能なものをきれいな色で配置します。 http://www.Oracle.com/pls/db92/db92.catalog_views?remark=homepage
そして、もちろん、EXPLAIN PLAN FOR、TRACEツール、および他の多くの手段の使用も使用できます。エンタープライズマネージャーには、最も高価なSQLクエリに関するレポートがいくつかあります。キャッシュに保存されている最近のクエリを検索することもできます。
簡単な解決策を見つけました
ステップ1。 PLSQLまたはsqldeveloperまたはその他のクエリインターフェイスを使用して、管理ユーザーでDBに接続する
ステップ2。以下のスクリプトを実行します。 S.SQL_TEXT列には、実行されたクエリが表示されます
SELECT
S.LAST_ACTIVE_TIME,
S.MODULE,
S.SQL_FULLTEXT,
S.SQL_PROFILE,
S.EXECUTIONS,
S.LAST_LOAD_TIME,
S.PARSING_USER_ID,
S.SERVICE
FROM
SYS.V_$SQL S,
SYS.ALL_USERS U
WHERE
S.PARSING_USER_ID=U.USER_ID
AND UPPER(U.USERNAME) IN ('Oracle user name here')
ORDER BY TO_DATE(S.LAST_LOAD_TIME, 'YYYY-MM-DD/HH24:MI:SS') desc;
これに関する唯一の問題は、(関数呼び出しの)入力パラメーター値を表示する方法が見つからないことですが、少なくとも特定のツールを使用せずにOracleで実行されているものとその順序を確認できます。
alter system set timed_statistics=true
- または
alter session set timed_statistics=true --if want to trace your own session
-十分に大きくなければなりません:
select value from v$parameter p
where name='max_dump_file_size'
-興味のあるセッションのsidとシリアル番号を確認します。
select sid, serial# from v$session
where ...your_search_params...
-10046イベントでトレースを開始できます。4番目のパラメーターはトレースレベルを設定します(12が最大です)。
begin
sys.dbms_system.set_ev(sid, serial#, 10046, 12, '');
end;
-レベルをゼロに設定してトレースをオフにします。
begin
sys.dbms_system.set_ev(sid, serial#, 10046, 0, '');
end;
/ *可能なレベル:0-オフ1-最小レベル。 set sql_trace = trueと同様4-バインド変数値がトレースファイルに追加8-待機が追加12-バインド変数値と待機イベントの両方が追加* /
-より大きなレベルで独自のセッションをトレースする場合も同じです。
alter session set events '10046 trace name context forever, level 12';
- 消す:
alter session set events '10046 trace name context off';
-生のトレース情報を含むファイルが配置されます。
select value from v$parameter p
where name='user_dump_dest'
-ファイル名(* .trc)にはspidが含まれます。
select p.spid from v$session s, v$process p
where s.paddr=p.addr
and ...your_search_params...
-また、自分で名前を設定できます:
alter session set tracefile_identifier='UniqueString';
-最後に、TKPROF
を使用して、トレースファイルを読みやすくします。
C:\Oracle\admin\databaseSID\udump>
C:\Oracle\admin\databaseSID\udump>tkprof my_trace_file.trc output=my_file.prf
TKPROF: Release 9.2.0.1.0 - Production on Wed Sep 22 18:05:00 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
C:\Oracle\admin\databaseSID\udump>
-トレースファイルの使用状態を表示するには:
set serveroutput on size 30000;
declare
ALevel binary_integer;
begin
SYS.DBMS_SYSTEM.Read_Ev(10046, ALevel);
if ALevel = 0 then
DBMS_OUTPUT.Put_Line('sql_trace is off');
else
DBMS_OUTPUT.Put_Line('sql_trace is on');
end if;
end;
/
これは、SQL Server Profilerと同様に実行されるクエリをキャプチャするOracle用のツールです。このデータベースサーバーを使用するアプリケーションのメンテナンスに不可欠なツール。
公式サイトiacosoft.comからダウンロードできます
PL/SQL Developerをお試しください。プロファイラーへのユーザーフレンドリーなGUIインターフェースがあります。トライアルを試してみるのはかなりいいです。 Oracleデータベースで作業するときは、このツールに誓います。
http://www.allroundautomations.com/plsqldev.html?gclid=CM6pz8e04p0CFQjyDAodNXqPDw
私が最近の質問を複製として投票し、この方向を指摘したように見えます。 。 。
さらにいくつか-SQL * Plusで-SET AUTOTRACE ON-実行された各ステートメントの説明計画と統計を提供します。
TOADでは、クライアント側のプロファイリングも可能です。
これらの両方の欠点は、ステートメントの実行計画のみを伝え、オプティマイザーがその計画に到達した方法を伝えないことです。そのためには、低レベルのサーバー側トレースが必要です。
理解しておくべきもう1つの重要なものは、Statspackスナップショットです。これらは、データベース全体のパフォーマンスを確認するのに適した方法です。 EXPLAIN PLANなどは、ボトルネックとなっている個々のSQL文を見つけるのに適しています。 Statspackは、問題が、優れた実行計画を持つ単純なステートメントが1分間に100万回呼び出されているという事実を識別するのに優れています。
キャッチは、2つのポイント間のすべてのSQL実行をキャプチャします。 SQL Serverも同様です。
特定のユーザーがデータベースで実行しているSQLをキャプチャすると便利な場合があります。通常、そのユーザーに対してセッショントレースを有効にするだけですが、そのアプローチには2つの潜在的な問題があります。
この問題に対する迅速で汚い解決策は、2つの時点の間で実行されるすべてのSQLステートメントをキャプチャすることです。
次の手順では、特定の時点でのデータベースのスナップショットを含む2つのテーブルを作成します。その後、テーブルがクエリされ、その期間中に実行されたすべてのSQLのリストが生成されます。
可能であれば、静かな開発システムでこれを行う必要があります。そうしないと、大量のデータを取り戻すリスクがあります。
最初のスナップショットを取得する次のSQLを実行して、最初のスナップショットを作成します。
create table sql_exec_before as
select executions,hash_value
from v$sqlarea
/
ユーザーにアプリケーション内でタスクを実行させる。
2番目のスナップショットを撮ります。
create table sql_exec_after as
select executions, hash_value
from v$sqlarea
/
結果を確認するSQLをキャプチャしたら、結果を照会します。
この最初のクエリは、実行されたすべてのクエリハッシュをリストします。
select aft.hash_value
from sql_exec_after aft
left outer join sql_exec_before bef
on aft.hash_value = bef.hash_value
where aft.executions > bef.executions
or bef.executions is null;
/
これは、ハッシュとSQL自体を表示します:設定ページ999行100 hash_valueでブレーク
select hash_value, sql_text
from v$sqltext
where hash_value in (
select aft.hash_value
from sql_exec_after aft
left outer join sql_exec_before bef
on aft.hash_value = bef.hash_value
where aft.executions > bef.executions
or bef.executions is null;
)
order by
hash_value, piece
/
5.片付け終了したら、スナップショットテーブルを削除することを忘れないでください。
drop table sql_exec_before
/
drop table sql_exec_after
/
これを試してください(無料です): http://www.aboves.com/Statement_Tracer_for_Oracle.exe
Oracle SQLクエリをトレースするために使用できる商用ツール FlexTracer があります
Oracleは、他のデータベースとともに、指定されたクエリを分析して実行プランを作成します。この計画は、データを取得する最も効率的な方法です。
Oracleは 'explain plan
'クエリを分析しますが、実行はせず、代わりにクエリ可能な特別なテーブル(プランテーブル)を設定するステートメント。
構文(シンプルバージョン、プランテーブルの行に特別なIDを付ける、または別のプランテーブルを使用するなどの他のオプションがあります)は次のとおりです。
explain plan for <sql query>
そのデータの分析は、別の質問、またはあなたのさらなる研究のために残されています。
これは、いくつかのツール(SQL Traceとtkprof)を含むSQLクエリをトレースする方法を説明するOracleドキュメントです。
どうやらこのタスクを実行するのに役立つ小さなシンプルで安価なユーティリティはありません。しかし、複雑で不便な方法でそれを行う101の方法があります。
次の記事でいくつか説明します。おそらくもっとたくさんあります... http://www.petefinnigan.com/ramblings/how_to_set_trace.htm