czwartek, 11 listopada 2010

tabela tymczasowa i jej spid z trace

Inna metoda znalezienia sesji (SPID) , na której została utworzona tabela tymczasowa bazuje na monitorowaniu SQL Servera za pomocą trace. Z tego samego źródła możemy korzystać jeżeli potrzebujemy informację kto zmienił obiekty w bazie lub je skasował, zmienił ustawienia serwera itp.
Do poszukiwania zdarzeń należy odfiltrować odpowiednie eventy, listę wszystkich możemy znaleźć zapytaniem

SELECT e.trace_event_id,e.name,c.name category
FROM sys.trace_events e INNER JOIN
sys.trace_categories c ON e.category_id = c.category_id

dla tworzenia nowych obiektów będzie to trace_event równy 46

CREATE PROC dbo.rk_get_spid_temp @name varchar(128)=''
as
DECLARE @FileName VARCHAR(MAX) 

SELECT @FileName = SUBSTRING(path, 0, LEN(path)-CHARINDEX('\', REVERSE(path))+1) + '\Log.trc' 
FROM sys.traces  
WHERE is_default = 1; 
SET @name =@name+'%'
SELECT  
     o.name,  
     o.OBJECT_ID, 
     o.create_date,
     gt.NTUserName, 
     gt.HostName, 
     gt.SPID, 
     gt.DatabaseName, 
     gt.TEXTData
FROM sys.fn_trace_gettable( @FileName, DEFAULT ) AS gt 
JOIN tempdb.sys.objects AS o  
     ON gt.ObjectID = o.OBJECT_ID 
WHERE gt.DatabaseID = 2
  AND gt.EventClass = 46
  AND o.create_date >= DATEADD(ms, -100, gt.StartTime)  
  AND o.create_date <= DATEADD(ms, 100, gt.StartTime) 
  AND o.name LIKE @name

Procedura wywołana z parametrem zwraca dane dotyczące konkretnej tabeli , bez parametru zwraca informacje o wszystkich tabelach tymczasowych

Brak komentarzy:

Prześlij komentarz