ll existe différentes techniques pour récupérer la taille d’une base de données. Je vous en livre ici une que j’utilise. Elle se base sur la vue système sys.database_files qui nous renseigne sur les fichiers de la base de données.
SELECT dbname, [ROWS]*8 as Donnees, [LOG]*8 as Journaux
FROM
(SELECT DB_NAME() as dbname, type_desc, size
FROM sys.database_files) as p
PIVOT
(SUM(size) FOR type_desc IN ([ROWS], [LOG])) as pvt
Grâce à la fonction PIVOT, j’aggrège les fichiers de données et journaux. Vous noterez aussi que je multiplie la taille par 8 car la valeur de cette vue correspond à un nombre de pages (8KB). Nous obtenons donc une taille en kilo-octets.
Pour connaître les tailles de toutes les bases de données d’un serveur, on peut utiliser se script combiné avec la fonction système sp_MSforeachDB
CREATE TABLE #TMP_DB_Sizes (
dbname sysname,
datasizeinkb int,
logsizeinkb int)
EXECUTE sp_msforeachdb '
INSERT INTO #TMP_DB_Sizes
SELECT dbname, [ROWS]*8 as Donnees, [LOG]*8 as Journaux
FROM
(SELECT ''[?]'' as dbname, type_desc, size
FROM [?].sys.database_files) as p
PIVOT
(SUM(size) FOR type_desc IN ([ROWS], [LOG])) as pvt'
select * from #TMP_DB_Sizes
drop table #TMP_DB_Sizes
J’utilise une table temporaire pour n’avoir qu’un jeu de résultat. Vous noterez l’utilisation de ‘[?]’ pour injecter le nom de la base en cours dans le script
Il existe bien évidemment d’autres solutions, venant de 2000 ou de 2005, certaines apportant d’autres informations comme le pourcentage d’espace inutilisé.
Bon audit !!