it-swarm-eu.dev

Mohu vidět Historické dotazy spuštěné v databázi serveru SQL?

Někdo spustil dotaz na naší databázi SQL Server vzdáleně a jejich systém havaroval.

Nemají zálohu tohoto dotazu a chtějí vidět, co bylo na serveru spuštěno.

Je možné tento dotaz najít v protokolu nebo někde v historii?

40
user87094

Podobný Grant Fritchey měl problém, kdy uzavřel SSMS a ztratil dotaz, na kterém pracoval ... blogoval zde: Oh **********!

[~ # ~] upravit [~ # ~]

Aby to bylo trochu podrobnější, odpoví výše uvedený odkaz Grant poskytuje dotaz, který jednoduše přejde do mezipaměti na instanci a vytáhne dotaz, který jste právě provedli (nebo alespoň pokus o):

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%';

Několik dalších možností, které byly uvedeny v komentářích blogu Granta:

44
user507

2005+, výchozí trasování k záchraně.

Výchozí trasování se převrátí na 20 MB, ale SQL si uchová historii 5 tras. S přístupem na server můžete získat soubory * .trc z adresáře MSSQL\Log. Pokud nemůžete získat přístup k serveru, následující název vám poskytne název aktuálního výchozího souboru trasování:

SELECT * FROM ::fn_trace_getinfo(default) 

Pokud je aktuální soubor například E:\MSSQL.1\MSSQL\LOG\log_200.trc, měly by být předchozí soubory log_199.trc, log_198.trc atd. Získat obsah trasování pomocí:

SELECT * FROM fn_trace_gettable('E:\MSSQL.1\MSSQL\LOG\log_199.trc', default)
18

možná budete moci načíst informace z plánů dotazů uložených v mezipaměti, vyhledat informace o BOL na sys.dm_exec_query_stats nebo je spustit ze správcovského studia připojeného ke stejné databázi:

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

Filtrujte výstup pomocí

WHERE text like '%something%'

pro zúžení výsledků.

14
SqlACID

Pokud byla databáze v úplném režimu obnovy, pak by mohla existovat možnost obnovit některá data a získat informace o tom, co bylo provedeno čtením protokolu transakcí.

Ve výchozím nastavení to bohužel není podporováno, ale existují způsoby, jak to provést.

Můžete zkusit použít nástroje třetích stran, například ApexSQL Log nebo SQL Log Rescue (zdarma, ale pouze SQL 2000).

Další možností je zkusit použít nezdokumentované funkce DBCC LOG nebo fn_dblog. To je složitější, ale je to zdarma.

9
Stanley Norman

ApexSQL má funkci 'Provedené dotazy', která umožňuje vyhledávat a filtrovat podle data.

Nejsem si jistý, zda vytáhne historii z mezipaměti SSMS, nebo ji skutečně sleduje sám. Můžete to zkusit nainstalovat a doufat v to nejlepší.

0
bvh9000

Pokud je vaše databáze nastavena na plný model obnovy, můžete prozkoumat zálohy protokolu transakcí. Viz fn_dump_dblog pro více informací.

0
Matthias Elflein