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?
Antworten
Zu viele Anzeigen?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.
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.
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
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
- See previous answers
- Weitere Antworten anzeigen