SQL Serverデータベースで履歴クエリが実行されるのを見ることができますか?

dba.stackexchange https://dba.stackexchange.com/questions/4043

  •  16-10-2019
  •  | 
  •  

質問

誰かがSQL Serverデータベースでリモートでクエリを実行していて、システムがクラッシュしました。

彼らはそのクエリのバックアップがなく、サーバーで何が実行されたかを確認したいと考えています。

このクエリをログまたはどこかで歴史で見つけることは可能ですか?

役に立ちましたか?

解決

同様のグラント・フリッチーには、SSMSを閉じて、彼が取り組んでいた質問を失った問題がありました...ここでブログを書いています。おー **********!

編集

これを回答のもう少し詳細にするために、参照された上記の助成金は、実行したばかりのクエリ(または少なくとも試行)を引き出すために、インスタンスのキャッシュに単純に移動するためのクエリを提供します。

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

グラントのブログのコメントで注目されているいくつかのオプション:

他のヒント

2005+, デフォルトのトレース 救助へ。

デフォルトのトレースは20MBでロールオーバーしますが、SQLは5つのトレースの履歴を保持します。サーバーへのアクセスを使用すると、MSSQL logディレクトリから *.trcファイルを取得できます。サーバーにアクセスできない場合、以下は現在のデフォルトトレースファイルの名前を示します。

SELECT * FROM ::fn_trace_getinfo(default) 

現在のファイルがe: mssql.1 mssql log log_200.trcである場合、以前のファイルはlog_199.trc、log_198.trcなどです。トレースの内容を取得します。

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

そうかもしれない キャッシュされたクエリプランから情報を取得したり、sys.dm_exec_query_statsの情報を確認したり、同じデータベースに接続した管理スタジオからこれを実行したりできます。

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

で出力をフィルタリングします

WHERE text like '%something%'

結果を狭めるため。

データベースが完全な回復モードの場合、データを回復し、トランザクションログを読み取って行われたことについて洞察を得る機会があるかもしれません。

残念ながら、これはデフォルトではサポートされていませんが、これを行う方法があります。

次のようなサードパーティのツールを使用してみてください apexsqlログ また SQLログレスキュー (無料ですが、SQL 2000のみ)。

別のオプションは、文書化されていない関数DBCCログまたはFN_DBLOGを使用してみることです。これはより複雑ですが、無料です。

データベースが完全な回復モデルに設定されている場合は、トランザクションログのバックアップを調査できます。見る fn_dump_dblog その他の情報。

apexsql 「実行されたクエリ」機能があり、日付ごとに検索してフィルタリングできます。

SSMSキャッシュから歴史を引き出すのか、それとも実際にそれを追跡しているのかはわかりません。あなたはそれをインストールしようとすることができ、最高のことを期待することができます。

ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top