Oracle: esiste uno strumento per tracciare query, come Profiler per SQL Server?

Lavoro con SQL Server, ma devo migrare a un’applicazione con Oracle DB. per tracciare le mie domande di applicazione, in Sql Server uso lo strumento Profiler meraviglioso. c’è qualcosa di equivalente per Oracle?

È ansible utilizzare Oracle Enterprise Manager per monitorare le sessioni attive, con la query in esecuzione, il piano di esecuzione, i blocchi, alcune statistiche e persino una barra di avanzamento per le attività più lunghe.

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

Vai a Istanza -> sessioni e guarda la scheda SQL di ogni sessione.

Ci sono altri modi. Il gestore aziendale mette semplicemente con colors brillanti ciò che è già disponibile nelle visualizzazioni speciali come quelle qui documentate: http://www.oracle.com/pls/db92/db92.catalog_views?remark=homepage

E, naturalmente, puoi anche utilizzare Spiega lo strumento PLAN FOR, TRACE e molti altri modi di strumentalizzazione. Esistono alcuni rapporti nel gestore aziendale per le query SQL più costose. Puoi anche cercare le query recenti conservate nella cache.

 alter system set timed_statistics=true 

–o

 alter session set timed_statistics=true --if want to trace your own session 

– deve essere abbastanza grande:

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

– Scopri il sid e il numero di serie della sessione a cui sei interessato:

  select sid, serial# from v$session where ...your_search_params... 

– puoi iniziare a tracciare con l’evento 10046, il quarto parametro imposta il livello di traccia (12 è il più grande):

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

– Disabilita la traccia con l’impostazione del livello zero:

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

/ * possibili livelli: 0 – distriggersto 1 – livello minimo. Molto simile al set sql_trace = true 4 – i valori delle variabili di bind vengono aggiunti al file di traccia 8 – le attese vengono aggiunte 12 – vengono aggiunti sia i valori delle variabili di bind che gli eventi di attesa * /

–seio se vuoi tracciare la tua sessione con un livello più grande:

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

–Spegni:

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

– il file con le informazioni di traccia raw sarà localizzato:

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

– Il nome del file (*. trc) conterrà spid:

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

– anche tu puoi impostare il nome da solo:

 alter session set tracefile_identifier='UniqueString'; 

–finalmente, usa TKPROF per rendere più leggibile il file di traccia:

 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> 

– Per visualizzare lo stato del file di traccia utilizzare:

 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; / 

Semplicemente tradotto http://www.sql.ru/faq/faq_topic.aspx?fid=389 L’ originale è più completo, ma comunque è meglio di quello che gli altri hanno postato IMHO

Ho trovato una soluzione facile

Passo 1. connettersi a DB con un utente amministratore utilizzando PLSQL o sqldeveloper o qualsiasi altra interfaccia di query

Passo 2. manda avanti il ​​copione; nella colonna S.SQL_TEXT, vedrai le query eseguite

 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; 

L’unico problema è che non riesco a trovare un modo per mostrare i valori dei parametri di input (per le chiamate alle funzioni), ma almeno possiamo vedere ciò che viene eseguito in Oracle e l’ordine di esso senza utilizzare uno strumento specifico.

Visto che ho appena votato una domanda recente come duplicato e indicato in questa direzione. . .

Un altro paio – in SQL * Plus – SET AUTOTRACE ON – fornirà spiegazioni di piano e statistiche per ogni istruzione eseguita.

TOAD consente anche la profilazione lato client.

Lo svantaggio di entrambi è che ti dicono solo il piano di esecuzione dell’istruzione, ma non il modo in cui l’ottimizzatore è arrivato a tale piano, per cui avrai bisogno di una traccia laterale del server di livello inferiore.

Un altro importante da capire sono le istantanee di Statspack: sono un buon modo per esaminare le prestazioni del database nel suo complesso. Spiegare piano, ecc, sono bravi a trovare dichiarazioni SQL individuali che sono colli di bottiglia. Statspack è in grado di identificare il fatto che il tuo problema è che una semplice dichiarazione con un buon piano di esecuzione viene chiamata 1 milione di volte in un minuto.

GI Oracle Profiler v1.2

È un tool per Oracle per acquisire query eseguite in modo simile a SQL Server Profiler. Strumento indispensabile per la manutenzione di applicazioni che utilizzano questo server di database.

puoi scaricarlo dal sito ufficiale iacosoft.com

prova questo (è anche gratuito): http://www.aboves.com/Statement_Tracer_for_Oracle.exe

Prova PL / SQL Developer ha una bella interfaccia utente GUI per il profiler. È abbastanza bello provare la prova. Giuro per questo strumento quando lavoro su database Oracle.

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

The Catch è Cattura tutta la cronologia SQL eseguita tra due punti nel tempo. Come il modo in cui fa anche SQL Server.

Esistono situazioni in cui è utile acquisire l’SQL che un determinato utente è in esecuzione nel database. Di solito si abilita semplicemente la traccia della sessione per quell’utente, ma ci sono due potenziali problemi con questo approccio.

  1. Il primo è che molte applicazioni web mantengono un pool di connessioni persistenti al database condivise tra più utenti.
  2. La seconda è che alcune applicazioni si connettono, eseguono alcune SQL e si disconnettono molto rapidamente, rendendo difficile l’abilitazione della traccia della sessione (ovviamente, in questo caso, è ansible utilizzare un trigger di accesso per abilitare la traccia della sessione).

Una soluzione rapida e sporca al problema consiste nell’acquisire tutte le istruzioni SQL eseguite tra due punti nel tempo.

La seguente procedura creerà due tabelle, ciascuna contenente un’istantanea del database in un punto particolare. Le tabelle verranno quindi interrogate per produrre un elenco di tutte le operazioni SQL eseguite durante quel periodo.

Se ansible, dovresti farlo su un sistema di sviluppo silenzioso, altrimenti rischi di recuperare troppi dati.

  1. Scatta la prima istantanea Esegui la seguente sql per creare la prima istantanea:

     create table sql_exec_before as select executions,hash_value from v$sqlarea / 
  2. Ottieni l’utente per svolgere il proprio compito all’interno dell’applicazione.

  3. Prendi la seconda istantanea.

     create table sql_exec_after as select executions, hash_value from v$sqlarea / 
  4. Verifica i risultati Ora che hai acquisito l’SQL, è il momento di interrogare i risultati.

Questa prima query elenca tutti gli hash di query che sono stati eseguiti:

 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; / 

Questo mostrerà l’hash e lo stesso SQL: imposta pagine 999 righe 100 interrompe su 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. Tidy up Non dimenticare di rimuovere le tabelle degli snapshot una volta terminato:

 drop table sql_exec_before / drop table sql_exec_after / 

Oracle, insieme ad altri database, analizza una determinata query per creare un piano di esecuzione. Questo piano è il modo più efficiente per recuperare i dati.

Oracle fornisce la dichiarazione ‘ explain plan ‘ che analizza la query ma non la esegue, invece popola una tabella speciale che è ansible interrogare (la tabella di piano).

La syntax (versione semplice, ci sono altre opzioni come contrassegnare le righe nella tabella di piano con un ID speciale o utilizzare una tabella di piano diversa) è:

 explain plan for  

L’analisi di tali dati è lasciata per un’altra domanda o per ulteriori ricerche.

C’è uno strumento commerciale FlexTracer che può essere utilizzato per tracciare query Oracle SQL

Questo è un documento Oracle che spiega come tracciare query SQL, inclusi un paio di strumenti (SQL Trace e tkprof)

collegamento

Apparentemente non esiste una piccola e semplice utility a basso costo che possa aiutare a svolgere questo compito. C’è comunque 101 modi per farlo in modo complicato e scomodo.

L’articolo seguente descrive diversi. Probabilmente ce ne sono ancora di più … http://www.petefinnigan.com/ramblings/how_to_set_trace.htm