Czy mogę zobaczyć zapytania historyczne uruchamiane w bazie danych SQL Server?

38

Ktoś zdalnie uruchomił zapytanie do naszej bazy danych SQL Server, a ich system się zawiesił.

Nie mają kopii zapasowej tego zapytania i chcą zobaczyć, co zostało uruchomione na serwerze.

Czy można znaleźć to zapytanie w dzienniku lub w historii?

użytkownik87094
źródło
Nie ma w dzienniku. Zameldowałeś się w systemie kontroli wersji TFS lub SourceSafe? Wynik wyszedł do txt, aby można go było odtworzyć?
jl01
2
W przypadku przyszłego projektu warto rozważyć dodanie wyzwalaczy i tabel audytu / historii. Wtedy byłby w stanie wykorzystać czas ostatniej aktualizacji / użytkownika.
Thomas Stringer

Odpowiedzi:

39

Podobny Grant Fritchey miał problem polegający na tym, że zamknął SSMS i stracił zapytanie, nad którym pracował ... blogował tutaj: Och **********!

EDYTOWAĆ

Aby uczynić to nieco bardziej szczegółowym w odpowiedzi, odsyłacz, do którego prowadzi odnośnik powyżej, zapewnia zapytanie, aby po prostu przejść do pamięci podręcznej instancji i wyciągnąć właśnie wykonane zapytanie (lub przynajmniej próbę):

SELECT  dest.text
FROM    sys.dm_exec_query_stats AS deqs
        CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
WHERE   deqs.last_execution_time > '5/19/2011 11:00'
        AND dest.text LIKE 'WITH%';

Kilka innych opcji, które zostały odnotowane w komentarzach na blogu Granta:

Shawn Melton
źródło
1
To niezły artykuł! Dzięki! Po zapoznaniu się z artykułem Granta pomocne może być odzyskiwanie plików zapytań z kopii zapasowej w programie SQL Server Management Studio .
Marian
Tę odpowiedź można zaimportować, jeśli poda ona, na jakich wersjach sqlserver działa. Podczas próby uruchomienia pojawia się ten błąd: niepoprawna składnia w pobliżu „.”. w 2008 r.
Michael Potter
Można zaimportować? @MichaelPotter Kopiowanie i wklejanie między przeglądarką a innymi narzędziami zwykle zmienia znaki cudzysłowu i inny tekst, nie mam kontroli nad tą częścią.
Shawn Melton
Przepraszamy, proszę poprawić moje pytanie ... s / importowane / ulepszone /
Michael Potter
16

2005+, domyślny ślad na ratunek.

Domyślny wykres przewija się przy 20 MB, ale SQL zachowuje historię 5 śladów. Mając dostęp do serwera, możesz pobrać pliki * .trc z katalogu MSSQL \ Log. Jeśli nie możesz uzyskać dostępu do serwera, poniższe informacje podadzą nazwę bieżącego domyślnego pliku śledzenia:

SELECT * FROM ::fn_trace_getinfo(default) 

Jeśli bieżącym plikiem jest na przykład E: \ MSSQL.1 \ MSSQL \ LOG \ log_200.trc, poprzednie pliki powinny mieć postać log_199.trc, log_198.trc itp. Pobierz zawartość śledzenia za pomocą:

SELECT * FROM fn_trace_gettable('E:\MSSQL.1\MSSQL\LOG\log_199.trc', default)
Mark Storey-Smith
źródło
13

Państwo może być w stanie odzyskać informacje z pamięci podręcznej planów kwerend, sprawdź BOL Informacje na sys.dm_exec_query_stats lub uruchomić to ze studia zarządzania podłączonego do tej samej bazy danych:

SELECT  d.plan_handle ,
        d.sql_handle ,
        e.text

FROM    sys.dm_exec_query_stats d
        CROSS APPLY sys.dm_exec_sql_text(d.plan_handle) AS e

Filtruj dane wyjściowe za pomocą

WHERE text like '%something%'

zawęzić wyniki.

SqlACID
źródło
9

Jeśli baza danych była w trybie pełnego odzyskiwania, może istnieć szansa na odzyskanie niektórych danych i uzyskanie wglądu w to, co zostało zrobione, poprzez odczyt dziennika transakcji.

Niestety nie jest to domyślnie obsługiwane, ale są na to sposoby.

Możesz spróbować użyć narzędzi innych firm, takich jak ApexSQL Log lub SQL Log Rescue (bezpłatny, ale tylko SQL 2000).

Inną opcją jest próba użycia nieudokumentowanych funkcji DBCC LOG lub fn_dblog. Jest to bardziej złożone, ale jest bezpłatne.

Stanley Norman
źródło
0

Jeśli baza danych jest ustawiona na pełny model odzyskiwania, możesz sprawdzić kopie zapasowe dziennika transakcji. Zobacz fn_dump_dblogwięcej informacji.

Matthias Elflein
źródło
0

ApexSQL ma funkcję „Wykonywane zapytania”, która pozwala wyszukiwać i filtrować według daty.

Nie jestem pewien, czy pobiera historię z pamięci podręcznej SSMS, czy faktycznie sama ją śledzi. Możesz spróbować go zainstalować i mieć nadzieję na najlepsze.

bvh9000
źródło
Dotyczy to tylko rzeczy wykonywanych bezpośrednio w oknach zapytań i musisz włączyć zapisywanie.
Chris Bordeman