Je peux voir les journaux de transactions avec fn_dblog
, mais je dois le faire pour une table spécifique. Comment puis je faire ça?
Vous pouvez essayer ce qui suit:
Récupérez le id
pour votre table utilisateur:
SELECT id, name FROM sys.sysobjects WHERE NAME = '<Your_Table_Name>'
par exemple. 658101385
Récupérez les informations du journal des transactions avec la fonction non documentée:
SELECT * FROM ::fn_dblog(NULL,NULL) WHERE [Lock Information] LIKE '%658101385%'
Et puis continuez à partir de là.
Référence: Identification du nom d'objet pour CREATE et ALTER à l'aide de fn_dblog ()
Pourquoi ne pas simplement filtrer sur le nom de la table?
select *
from fn_dblog(null, null)
where AllocUnitName = 'dbo.zzz'
Voici ma repro lorsque je crée un tableau, y insère 3 lignes et supprime 1 ligne. Ensuite, je recherche cette table dans le journal en utilisant les deux méthodes. Je n'ai rien oublié d'important filtrage directement sur le nom de la table.
Les deux méthodes produisent des jeux de résultats différents:
LOP_LOCK_XACT
;IAM/PFS
Il peut sembler (par exemple, en lisant Identifier le nom de l'objet pour CREATE et ALTER à l'aide de fn_dblog () ) que les informations de verrouillage peuvent nous aider à identifier le nom de la table lors de la création, mais ce n'est pas vrai: Le CREATE TABLE
la ligne de fn_dblog()
n'a aucune information de verrouillage.
Le journal des transactions n'est pas lisible par l'homme.
Selon la raison derrière vouloir "faire ceci pour une table spécifique" (non spécifié dans la question), vous pourriez envisager d'acheter un outil tiers, plutôt que de l'essayer par vous-même.