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?
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?
Odpowiedzi:
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:
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)
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.
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.
Jeśli baza danych jest ustawiona na pełny model odzyskiwania, możesz sprawdzić kopie zapasowe dziennika transakcji. Zobacz fn_dump_dblog
więcej informacji.
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.