[SQL Server] TempDB : les traitements sur une table variable peuvent-ils être journalisés ? Démonstration…

Ce petit billet démontre que, contrairement à une idée reçue, la manipulation d’une table variable peut être journalisée.

Entrée dans le vif du sujet…

  • Création et traitement (insertion, modification, suppression) xd’une table variable @Tab et récupération de l’identifiant de l’unité d’allocation associée:
USE tempdb
GO
DECLARE @Tab TABLE (Tab_ID INT, Tab_Name VARCHAR(20))

INSERT INTO @Tab VALUES (1,2)

UPDATE @Tab SET Tab_Name='bidule' WHERE Tab_ID=1

DELETE FROM @Tab

SELECT a.allocation_unit_id
FROM sys.system_internals_allocation_units a</span>
  INNER JOIN sys.partitions p ON p.hobt_id = a.container_id
      INNER JOIN sys.columns c ON c.object_id = p.object_id
WHERE (c.name ='Tab_ID')
GO

 Résultat :

  • Consultation du journal des transactions via fn_dblog en ne prenant en compte que l’unité d’allocation récupérée précédemment :
SELECT Operation,
 Context,
 AllocUnitName,
 [RowLog Contents 0],
 [Log Record Length]
FROM fn_dblog(NULL,NULL)
WHERE AllocUnitId = 2522015792725622784
GO

Résultat :

Les traitements ont bien été journalisés.

Pour aller plus loin…

Pour avoir une comparaison entre les tables temporaires et les tables variables, vous pouvez aller ici.

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s