誰かがリモートでSQL Serverデータベースでクエリを実行し、システムがクラッシュしました。
そのクエリのバックアップがなく、サーバーで実行されたものを確認したい。
ログまたは履歴のどこかにこのクエリを見つけることは可能ですか?
誰かがリモートでSQL Serverデータベースでクエリを実行し、システムがクラッシュしました。
そのクエリのバックアップがなく、サーバーで実行されたものを確認したい。
ログまたは履歴のどこかにこのクエリを見つけることは可能ですか?
回答:
同様の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のブログのコメントに記載されていたいくつかのオプション:
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上の情報については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%'
結果を絞り込むため。
データベースが完全復旧モードにある場合、一部のデータを復旧し、トランザクションログを読み取って何が行われたかについて洞察を得る可能性があります。
残念ながら、これはデフォルトではサポートされていませんが、これを行う方法があります。
ApexSQL LogやSQL Log Rescueなどのサードパーティツールを使用してみてください(無料ですが、SQL 2000のみ)。
別のオプションは、文書化されていない関数DBCC LOGまたはfn_dblogを使用してみることです。これはより複雑ですが、無料です。
データベースが完全復旧モデルに設定されている場合、トランザクションログのバックアップを調査できます。詳細についてはfn_dump_dblog
、を参照してください。