web-dev-qa-db-ja.com

トランザクションログで削除ステートメントを表示する

トランザクションログで最近発生したdeleteステートメントを表示することはできますか?

12
Neil Knight

sQLで実行された正確なスクリプトが見つかりません(トランザクションログ内)。

トランザクションログは、データベースに加えられたすべての変更に関する情報を含むファイルです。これには、データの変更(トランザクション)、データベースの変更、およびバックアップ/復元イベントが含まれます。

トランザクションログの主な目的は、必要なときにデータベースを特定の時点に復元できるようにする方法を提供することです。これには、トランザクションを特定の時間にロールバックすることや、完全バックアップの復元からトランザクションをロールフォワードすることが含まれます。

トランザクションログの詳細について http://www.sqlservercentral.com/articles/Design+and+Theory/63350/

これは、最近実行された削除クエリを表示するスクリプトです

SELECT deqs.last_execution_time AS [Time], dest.TEXT AS [Query]
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
where dest.TEXT like '%Delete%from%'
ORDER BY deqs.last_execution_time DESC
11
AmmarR

ログでLOP_DELETE_ROWS操作を探して、削除された個々の行を表示できます。

select * from fn_dblog(NULL, NULL) 
where Operation = 'LOP_DELETE_ROWS'

ログがリサイクルされた場合(単純復旧モデルの場合)またはバックアップによって切り捨てられた場合(完全復旧モデルまたは一括復旧モデルの場合)、ログで引き続き使用可能なログ操作のみを表示できます。

ログ操作の理解は非常に複雑です。発生する可能性のあるいくつかのログパターンを理解するために、元に戻す操作や補正操作などに注意する必要がありますが、単純なコミットDELETEは簡単に理解できます。

11
Remus Rusanu