web-dev-qa-db-fra.com

Comment récupérer les activités / journaux de transactions pour une table spécifique?

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?

4
Celbis H.

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 ()

5
John aka hot2use

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:

  • "filtrer par nom de table" manque toutes les opérations LOP_LOCK_XACT;
  • "filtrer par verrouillage info" manque tout ce qui concerne les modifications de la page IAM/PFS

enter image description here

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.

4
sepupic

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.

0
user126897