SQL Serverデータベースで実行されている履歴クエリを確認できますか?


38

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

そのクエリのバックアップがなく、サーバーで実行されたものを確認したい。

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


ログにはありません。TFSまたはSourceSafeバージョン管理システムにチェックインしましたか?再作成できるように結果がtxtに設定されていますか?
jl01

2
将来の設計では、トリガーと監査/履歴テーブルの追加を検討することをお勧めします。その後、最後に更新された時間/ユーザーを利用できます。
トーマスストリンガー

回答:


40

同様のGrant Fritcheyには、SSMSを閉じて作業していたクエリを失ったという問題がありました...ここについてブログに書いてあります: Oh **********!

編集

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

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

Grantのブログのコメントに記載されていたいくつかのオプション:


1
それは素晴らしい記事です!ありがとう!また、Grantの記事「SQL Server Management Studioでバックアップされたクエリファイルを回復する」が役立つ場合があります。
マリアン

この回答は、動作するsqlserverのバージョンが記載されていればインポートできます。実行しようとすると、次のエラーが表示されます。「。」の近くの構文が正しくありません。
マイケルポッター

インポートできましたか?@MichaelPotterブラウザと他のツール間でコピーと貼り付けを行うと、通常、引用符やその他のテキストが変更されます。私はその部分を制御できません。
ショーンメルトン

申し訳ありませんが、私の質問を修正してください... s / imported / improved /
Michael Potter

16

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)

13

あなたは可能性がある、キャッシュされた問い合わせ計画から情報を取得sys.dm_exec_query_stats上の情報についてはBOLを確認するか、同じデータベースに接続された管理スタジオからこれを実行することができ:

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

結果を絞り込むため。


9

データベースが完全復旧モードにある場合、一部のデータを復旧し、トランザクションログを読み取って何が行われたかについて洞察を得る可能性があります。

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

ApexSQL LogSQL Log Rescueなどのサードパーティツールを使用してみてください(無料ですが、SQL 2000のみ)。

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


0

データベースが完全復旧モデルに設定されている場合、トランザクションログのバックアップを調査できます。詳細についてはfn_dump_dblog、を参照してください。


0

ApexSQLには、日付で検索およびフィルタリングできる「実行済みクエリ」機能があります。

SSMSキャッシュから履歴を取得するのか、実際にそれ自体を追跡するのかはわかりません。あなたはそれをインストールしてみて、最高のものを望みます。


これは、クエリウィンドウで直接実行するもののみであり、保存をオンにする必要があります。
クリスボルデマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.