13
2.2 Structures de stockage
2 – comme un, à la différence que le contenu est retourné en un dump hexadécimal.
3 – retourne l’en-tête, plus le contenu de la page en format tabulaire (jeu de
résultat) pour les index, ou détaillé pour le contenu de tables.
Le résultat de DBCC PAGE est envoyé par défaut dans le journal d’erreur de SQL
Server (le fichier errorlog, qu’on trouve dans le répertoire de données de SQL Server, dans le sous-répertoire LOG). Pour retourner le résultat dans la session, vous devez
activer le drapeau de trace 1 3604 :
DBCC TRACEON (3604)
DBCC PAGE supporte aussi l’option WITH TABLERESULTS, qui vous permet de retourner le résultat en format table.
Le résultat d’une commande DBCC n’est pas aisé à manipuler par code, une syntaxe telle que INSERT INTO … DBCC … n’est pas prise en charge. Pour insérer le résultat
d’une commande DBCC dans une table (temporaire par exemple), la seule solution est
de passer par du SQL dynamique (c’est-à-dire de passer la commande DBCC dans une
chaîne de caractères et de l’exécuter par un EXECUTE), et de profiter de la syntaxe
INSERT INTO … EXECUTE (). Par exemple :
CREATE TABLE #dbccpage (ParentObject sysname, Object sysname,
Field sysname, Value sysname)
GO
INSERT INTO #dbccpage
EXEC ('DBCC PAGE (AdventureWorks, 1, 0, 3) WITH TABLERESULTS');
GO
SELECT * FROM #dbccpage
Vous pouvez, grâce à DBCC PAGE, observer la structure d’allocation dans les fichiers
de données. Dans l’en-tête renvoyé par DBCC PAGE, vous trouvez l’indication des
pages de PFS, GAM et SGAM qui référencent la page. Au début de chaque intervalle GAM, vous trouvez une extension GAM qui ne contient que des pages de
structure. La première extension d’un fichier est une extension GAM, qui contient
en page 0 l’en-tête de fichier, en page 1 la première page PFS, en page 2 la première
page GAM, etc. Mais, tout cela nous pouvons le découvrir en utilisant DBCC PAGE.
Observons la première page du fichier :
DBCC PAGE (AdventureWorks, 1, 0, 3)
Dans l’en-tête de la page, nous récupérons les informations d’allocation :
Allocation Status
GAM (1:2) = ALLOCATED
SGAM (1:3) = NOT ALLOCATED
PFS (1:1) = 0x44 ALLOCATED 100_PCT_FULL
DIFF (1:6) = CHANGED
ML (1:7) = NOT MIN_LOGGED
1. Voir nomenclature en début d’ouvrage. Le drapeau de trace permet de modifier des options
internes de SQL Server.
2.2 Structures de stockage
2 – comme un, à la différence que le contenu est retourné en un dump hexadécimal.
3 – retourne l’en-tête, plus le contenu de la page en format tabulaire (jeu de
résultat) pour les index, ou détaillé pour le contenu de tables.
Le résultat de DBCC PAGE est envoyé par défaut dans le journal d’erreur de SQL
Server (le fichier errorlog, qu’on trouve dans le répertoire de données de SQL Server, dans le sous-répertoire LOG). Pour retourner le résultat dans la session, vous devez
activer le drapeau de trace 1 3604 :
DBCC TRACEON (3604)
DBCC PAGE supporte aussi l’option WITH TABLERESULTS, qui vous permet de retourner le résultat en format table.
Le résultat d’une commande DBCC n’est pas aisé à manipuler par code, une syntaxe telle que INSERT INTO … DBCC … n’est pas prise en charge. Pour insérer le résultat
d’une commande DBCC dans une table (temporaire par exemple), la seule solution est
de passer par du SQL dynamique (c’est-à-dire de passer la commande DBCC dans une
chaîne de caractères et de l’exécuter par un EXECUTE), et de profiter de la syntaxe
INSERT INTO … EXECUTE (). Par exemple :
CREATE TABLE #dbccpage (ParentObject sysname, Object sysname,
Field sysname, Value sysname)
GO
INSERT INTO #dbccpage
EXEC ('DBCC PAGE (AdventureWorks, 1, 0, 3) WITH TABLERESULTS');
GO
SELECT * FROM #dbccpage
Vous pouvez, grâce à DBCC PAGE, observer la structure d’allocation dans les fichiers
de données. Dans l’en-tête renvoyé par DBCC PAGE, vous trouvez l’indication des
pages de PFS, GAM et SGAM qui référencent la page. Au début de chaque intervalle GAM, vous trouvez une extension GAM qui ne contient que des pages de
structure. La première extension d’un fichier est une extension GAM, qui contient
en page 0 l’en-tête de fichier, en page 1 la première page PFS, en page 2 la première
page GAM, etc. Mais, tout cela nous pouvons le découvrir en utilisant DBCC PAGE.
Observons la première page du fichier :
DBCC PAGE (AdventureWorks, 1, 0, 3)
Dans l’en-tête de la page, nous récupérons les informations d’allocation :
Allocation Status
GAM (1:2) = ALLOCATED
SGAM (1:3) = NOT ALLOCATED
PFS (1:1) = 0x44 ALLOCATED 100_PCT_FULL
DIFF (1:6) = CHANGED
ML (1:7) = NOT MIN_LOGGED
1. Voir nomenclature en début d’ouvrage. Le drapeau de trace permet de modifier des options
internes de SQL Server.
