98 Stimmen

Oracle: Gibt es ein Tool zum Verfolgen von Abfragen, ähnlich wie der Profiler für SQL Server?

Ich arbeite mit SQL Server, aber ich muss zu einer Anwendung mit einer Oracle-Datenbank migrieren. Um meine Anfragen zu verfolgen, benutze ich beim SQL Server das wunderbare Profiler-Tool. Gibt es etwas Ähnliches für Oracle?

26voto

sergiu Punkte 1301

Ich habe eine einfache Lösung gefunden

Schritt 1. Verbinden Sie sich mit einem Administratorenbenutzer mit PLSQL oder SQL Developer oder einer anderen Abfrageoberfläche mit der Datenbank

Schritt 2. Führen Sie das folgende Skript aus; in der Spalte S.SQL_TEXT sehen Sie die ausgeführten Abfragen

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 Benutzername hier')   
ORDER BY TO_DATE(S.LAST_LOAD_TIME, 'YYYY-MM-DD/HH24:MI:SS') desc;

Das einzige Problem dabei ist, dass ich keinen Weg finde, um die Eingabeparameterwerte (für Funktionsaufrufe) anzuzeigen, aber zumindest können wir sehen, was in Oracle ausgeführt wird und in welcher Reihenfolge, ohne ein spezifisches Tool zu verwenden.

22voto

borjab Punkte 10262

Sie können den Oracle Enterprise Manager verwenden, um die aktiven Sitzungen zu überwachen, mit der Abfrage, die ausgeführt wird, ihrem Ausführungsplan, Sperren, einigen Statistiken und sogar einer Fortschrittsanzeige für die längeren Aufgaben.

Siehe: http://download.oracle.com/docs/cd/B10501_01/em.920/a96674/db_admin.htm#1013955

Gehen Sie zu Instanz -> Sitzungen und sehen Sie sich den SQL-Tab jeder Sitzung an.

Es gibt andere Möglichkeiten. Der Enterprise Manager zeigt nur mit hübschen Farben an, was bereits in speziellen Ansichten wie denen dokumentiert ist, die hier aufgeführt sind: http://www.oracle.com/pls/db92/db92.catalog_views?remark=homepage

Und natürlich können Sie auch Explain PLAN FOR, TRACE-Tool und viele andere Instrumentalisierungsmethoden verwenden. Es gibt Berichte im Enterprise Manager für die teuersten SQL-Abfragen. Sie können auch nach kürzlich im Cache gespeicherten Abfragen suchen.

17voto

q3kep Punkte 389
alter system set timed_statistics=true

--oder

alter session set timed_statistics=true -- wenn Sie Ihre eigene Sitzung verfolgen wollen

-- muss groß genug sein:

select value from v$parameter p
where name='max_dump_file_size' 

-- Suchen Sie nach sid und serial# der Sitzung, an der Sie interessiert sind:

 select sid, serial# from v$session
 where ...Ihre Suchparameter...

-- Sie können mit dem 10046-Ereignis das Tracing starten, der vierte Parameter legt das Tracinglevel fest (12 ist das größte):

 begin
    sys.dbms_system.set_ev(sid, serial#, 10046, 12, '');
 end;

-- Beenden Sie das Tracing, indem Sie das Level auf Null setzen:

begin
   sys.dbms_system.set_ev(sid, serial#, 10046, 0, '');
end;

/*mögliche Level: 0 - ausgeschaltet 1 - minimales Level. Ähnlich wie set sql_trace=true 4 - Bind-Variablenwerte werden zur Trace-Datei hinzugefügt 8 - Wartezeiten werden hinzugefügt 12 - sowohl Bind-Variablenwerte als auch Warteereignisse werden hinzugefügt */

-- dasselbe, wenn Sie Ihre eigene Sitzung mit einem größeren Level verfolgen möchten:

alter session set events '10046 trace name context forever, level 12';

-- beenden Sie das Tracing:

alter session set events '10046 trace name context off';

-- die Datei mit den Roh-Tracing-Informationen wird sich befinden:

 select value from v$parameter p
 where name='user_dump_dest'

-- der Name der Datei (*.trc) wird spid enthalten:

 select p.spid from v$session s, v$process p
 where s.paddr=p.addr
 and ...Ihre Suchparameter...

-- Sie können auch den Namen selbst festlegen:

alter session set tracefile_identifier='EinzigartigeZeichenkette'; 

-- schließlich verwenden Sie TKPROF, um die Trace-Datei lesbarer zu machen:

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 am Wed Sep 22 18:05:00 2004
Copyright (c) 1982, 2002, Oracle Corporation. Alle Rechte vorbehalten.
C:\ORACLE\admin\databaseSID\udump>

-- um den Zustand der Trace-Datei anzuzeigen, verwenden Sie:

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 ist ausgeschaltet');
  else
    DBMS_OUTPUT.Put_Line('sql_trace ist eingeschaltet');
  end if;
end;
/

Nur eine Art von übersetztem http://www.sql.ru/faq/faq_topic.aspx?fid=389 Das Original ist voller, aber wie auch immer, dies ist meiner Meinung nach besser als das, was andere gepostet haben

9voto

pio Punkte 81

GI Oracle Profiler v1.2

Es ist ein Tool für Oracle, um ausgeführte Abfragen ähnlich wie der SQL Server Profiler zu erfassen. Unverzichtbares Werkzeug für die Wartung von Anwendungen, die diesen Datenbankserver verwenden.

Sie können es von der offiziellen Website iacosoft.com herunterladen

6voto

Kuberchaun Punkte 27481

Probieren Sie PL/SQL Developer aus, es verfügt über eine benutzerfreundliche GUI-Benutzeroberfläche für den Profiler. Es ist ziemlich gut, geben Sie dem Test eine Chance. Ich schwöre auf dieses Tool, wenn ich mit Oracle-Datenbanken arbeite.

http://www.allroundautomations.com/plsqldev.html?gclid=CM6pz8e04p0CFQjyDAodNXqPDw

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X