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