2013-04-22 7 views
5

È possibile sapere chi ha chiamato una procedura di archiviazione? , Sto usando la seguente query per identificare il conteggio delle esecuzioni, ecc. Ma non sono in grado di identificare quale job/trigger/processo lo sta chiamando. Tutte le idee su di esso si prega diÈ possibile scoprire chi ha chiamato una procedura di archiviazione in sql server 2005

SELECT a.execution_count ,OBJECT_NAME(objectid) Name, 
(CASE WHEN a.statement_end_offset = -1 
THEN 
len(convert(nvarchar(max), b.text)) * 2 
ELSE 
a.statement_end_offset 
END - a.statement_start_offset)/2) ,b.dbid ,dbname = db_name(b.dbid) , b.objectid 
,a.creation_time,a.last_execution_time,a.* 
FROM sys.dm_exec_query_stats a CROSS APPLY sys.dm_exec_sql_text(a.sql_handle) as b 
WHERE OBJECT_NAME(objectid) = 'Rebuild_Indexes' ORDER BY a.last_execution_time 
ESCquery_text = SUBSTRING(b.text,a.statement_start_offset/2, 
+0

Cos'è _who_? Sono disponibili '@@ SPID' e' ORIGINAL_LOGIN() '. Vuoi vedere le impronte digitali attraverso la tastiera e vedere chi ha realmente iniziato l'applicazione? 'selezionare * da sys.dm_exec_connections come EC inner join sys.dm_exec_sessions come ES su ES.session_id = EC.session_id dove EC.session_id = @@ SPID'? – HABO

+0

Un tema comune che vedrete nelle risposte è che, senza registrare tutto, è impossibile vedere chi ha chiamato un processo memorizzato; piuttosto, puoi vedere chi lo sta chiamando. –

risposta

3

Utilizzare la stored procedure di Adam Machanic Who is Active - restituisce tutte le informazioni sulle istruzioni attive, incluso l'utente che le ha avviate.

+0

Grazie mille per il collegamento. Avevo bisogno di qualcosa del genere. –

3

Se si vogliono vedere chi sta eseguendo una stored procedure, un modo per andare su questo è quello di creare una traccia sul lato server e catturare l'evento SP:Completed. I dati forniti da questa classe di eventi ti forniranno tutte le informazioni sul chiamante di cui avresti bisogno.

Riferimento: BOL documentation on the SP:Completed Event Class

2

Beh, se il fuoco su SQL Profiler, che vi mostrerà l'ID di rete dell'utente NT, vi consiglio di correre traccia di Profiler sul server sua auto, se si tratta di un uso occasionale. in alternativa, se non si utilizza la modalità di ripristino semplice, la risposta sarà nel backup del log delle transazioni. Tuttavia questo non è facile da analizzare o leggere.

+0

Grazie, ho identificato un pacchetto dtsx. – user362283

1

Utilizzare l'opzione con Dynamic Management Views. I DMV forniscono un'interfaccia relazionale semplice e familiare per la raccolta di informazioni di sistema critiche da SQL Server.

SELECT DB_NAME(der.database_id) AS databaseName, 
     OBJECT_NAME(objectid), 
     der.session_id, 
     login_name, 
     USER_NAME(der.user_id) AS user_name, 
     der.command, 
     dest.text AS [CommandText], 
     des.login_time, 
     des.[host_name], 
     dec.client_net_address, 
     des.[program_name],  
     der.status 
FROM sys.dm_exec_requests der 
    INNER JOIN sys.dm_exec_connections dec ON der.session_id = dec.session_id 
    INNER JOIN sys.dm_exec_sessions des ON der.session_id = des.session_id 
    CROSS APPLY sys.dm_exec_sql_text (sql_handle) AS dest 
WHERE des.is_user_process = 1 
    --AND OBJECT_NAME(objectid) = 'Rebuild_Indexes'