Afficher les instructions de suppression dans le journal des transactions

12

Est-il possible d'afficher les deletedéclarations qui se sont récemment produites dans le journal des transactions?

Neil Knight
la source
Les instructions elles-mêmes ne sont pas enregistrées dans le journal des transactions. Dans quel modèle de récupération se trouve votre base de données? Cette réponse pourrait être utile
Martin Smith

Réponses:

11

vous ne trouverez pas les scripts exacts qui ont été exécutés sur sql. (dans le journal des transactions)

Un journal des transactions est un fichier qui contient des informations concernant chaque modification apportée à la base de données. Cela inclut les modifications de données (transactions), les modifications de base de données et les événements de sauvegarde / restauration.

Le principal objectif du journal des transactions est de fournir une méthode permettant de restaurer une base de données à un point dans le temps si nécessaire. Cela peut inclure la restauration de transactions à un certain moment ou la restauration de transactions à partir d'une restauration de sauvegarde complète.

pour en savoir plus sur le journal des transactions http://www.sqlservercentral.com/articles/Design+and+Theory/63350/

voici un script pour vous montrer les dernières requêtes de suppression exécutées

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
AmmarR
la source
FYI: FROMest un mot-clé facultatif dans une DELETEdéclaration, donc je ne l'inclurais pas ici dans le prédicat correspondant.
Jon Seigel
Vrai, l'instruction From in delete est facultative, je l'ai gardée juste pour limiter les résultats de ma requête. mais oui vous avez raison
AmmarR
Remarque, pour les instances SQL Server sensibles à la casse, le code ci-dessus manquera deleteet DELETE, etc. Vous pouvez rendre la clause where insensible à la casse, par exemple: WHERE dest.text LIKE '%DELETE %' COLLATE Latin1_General_CI_AS
Max Vernon
11

Vous pouvez afficher les lignes individuelles qui ont été supprimées en recherchant les opérations LOP_DELETE_ROWS toujours dans le journal:

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

Si le journal a été recyclé (dans le modèle de récupération simple) ou tronqué par sauvegarde (dans le modèle de récupération complète ou en bloc), vous ne pourrez voir que les opérations de journal toujours disponibles dans le journal.

La compréhension des opérations de journalisation est assez complexe, vous devez être conscient de choses comme les opérations d'annulation ou de compensation pour donner un sens à certains modèles de journal que vous pouvez rencontrer, mais les suppressions engagées directes sont assez faciles à comprendre.

Remus Rusanu
la source