SQL Serverデータベースで履歴クエリが実行されるのを見ることができますか?
-
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%';
グラントのブログのコメントで注目されているいくつかのオプション:
- SSMSが実際に「回復」領域を持っているジェイミートムソンポイント WordまたはExcel Recoveryと同様に、Windowsプロファイルの下で。
- SSMSツールパックに関するコメントの別の個別のメモ, 、しかし、このアドオンはSQL Server2008でのみ無料です。SQLServer 2012から始めるだけで支払われますが、便利な機能がたくさんあります。
他のヒント
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キャッシュから歴史を引き出すのか、それとも実際にそれを追跡しているのかはわかりません。あなたはそれをインストールしようとすることができ、最高のことを期待することができます。