2011-01-12 5 views
16

Come si può sapere se si utilizza un pacchetto, una procedura o una funzione PL/SQL? Esiste una tabella Oracle o una vista che contiene statistiche sull'utilizzo del pacchetto, della procedura o della funzione PL/SQL?Come si può sapere se si utilizza un pacchetto, una procedura o una funzione PL/SQL?

+8

Rilasciarli e vedere se ricevi delle chiamate dai tuoi utenti? :-) –

+0

Definisci "utilizzo", perché ci può essere un pacchetto/proc/funzione che viene usato raramente - non significa che debba essere rimosso. –

risposta

5

Non predefinito. Ma puoi utilizzare la funzionalità di controllo per il controllo del tuo database Oracle. A Ask Tom è una lunga discussione sull'auditing delle chiamate di procedura!

1

È possibile verificare se un oggetto ha delle dipendenze eseguendo una query nella tabella DBA_DEPENDENCIES.

SELECT OWNER, 
     NAME, 
     TYPE 
    FROM SYS.DBA_DEPENDENCIES 
WHERE REFERENCED_OWNER = '<your object owner>' 
    AND REFERENCED_NAME = '<your object name>' 
    AND REFERENCED_TYPE IN ('PACKAGE', 'PROCEDURE', 'FUNCTION'); 

Questa query restituirà tutte le dipendenze nel codice memorizzato all'interno dell'istanza Oracle stessa.

Non rivelerà se un oggetto è chiamato o meno all'esterno dell'istanza.

+0

Non vedo come questo risponda alla domanda, una procedura potrebbe non avere dipendenze, ma essere chiamata direttamente dal livello successivo, e un'altra potrebbe avere alcune dipendenze, ma non è chiamata affatto né le altre funzioni che potrebbero chiamare esso, quindi mai "usato". Potresti voler elaborare la tua risposta per mostrare come risponde alla domanda. Non sto facendo downvoting perché sei nuovo nel sito, BTW, benvenuto in SO! – jachguate

+0

La domanda originale non menzionava se cercavano o meno chiamanti in un altro livello. Sarebbe impossibile per l'istanza Oracle stessa sapere quali livelli esterni all'istanza chiamavano una funzione specifica. La mia risposta era semplicemente mostrare dipendenze nel codice che è memorizzato nell'istanza Oracle. – JordanBean

3

Se si utilizza Oracle 11 (R2?), Darei una possibilità a PL/Scope.

Il docu dichiara: PL/Scope è uno strumento basato su compilatore che raccoglie dati sugli identificatori nel codice sorgente PL/SQL al momento della compilazione dell'unità di programma e lo rende disponibile nelle viste del dizionario di dati statici. I dati raccolti includono informazioni su tipi di identificatori, usi (dichiarazione, definizione, riferimento, chiamata, assegnazione) e la posizione di ciascun utilizzo nel codice sorgente.

PL/Scope consente lo sviluppo di browser di codice sorgente potente ed efficace PL/Ambito di applicazione che aumentano PL/SQL la produttività degli sviluppatori, riducendo al minimo il tempo di navigazione passato e comprendere il codice sorgente.

Potete trovare di più riguardo a http://download.oracle.com/docs/cd/E11882_01/appdev.112/e17125/adfns_plscope.htm#g1010526

+0

PL/Scope non aiuterà la situazione dell'OP - vogliono sapere quanto spesso una funzione o una procedura sono * effettivamente * usate, non * potenzialmente * usate. –

0

Si potrebbe anche trovare le sql pacchetto di strumentazione pl/ILO utile per quello che stai cercando di fare.

12

Si può anche provare l'interrogazione USER/ALL_source:

SELECT * FROM all_source 
where UPPER(TEXT) like UPPER('%procedure_name%') 

o

SELECT * FROM all_source 
where UPPER(TEXT) like UPPER('%package.function_name%') 

dovrete ignorare i riferimenti sé, ma che dovrebbe essere facile da individuare.

È inoltre necessario controllare "visualizza" origine da utente/all_views. Vedi però l'altra domanda sull'interrogazione sull'origine delle viste.

si può anche verificare se un pacchetto o superiore funzione di livello/procedura viene utilizzata con

select * from all_dependencies 
where referenced_name like '%PACKAGE_NAME%'; 

NB: passare user_ con all_/DBA_ come necessario

se siete specificamente alla ricerca di funzioni non richiamati poi un'altra opzione è quella di compilatore il codice con AVVERTENZE accesi e poi cercare PLW-06002 e LPW-06006

exec DBMS_WARNING.add_warning_setting_cat('ALL','ENABLE','SESSION') 
create or replace function x return number 
as 
procedure y is begin null; end; 
begin 
return 0; 
return 1; 
end; 

show errors 

Errors for FUNCTION X: 

LINE/COL ERROR 
-------- ----------------------------------------------------------------- 
1/1  PLW-05018: unit X omitted optional AUTHID clause; default value DEFINER used 
3/1  PLW-06006: uncalled procedure "Y" is removed. 
6/1  PLW-06002: Unreachable code 
1

è possibile utilizzare editor come Toad.Elengeranno direttamente sia gli oggetti su cui la procedura è dipendente sia gli oggetti che fanno riferimento alla procedura.