Vous êtes sur la page 1sur 3

-- Recherche de la taille des fichiers de chaque base et leur occupation. -- D'aprs http://www.sqlfr.com/codes/SQL-SERVEUR-VERIFIER-ESPACE-OCCUPE-DANS-BASE -DONNEES_49056.

aspx ----------------------------------------------------------------------------------------------------PRINT 'Base;Nom logique donnes;Nom logique logs;Nom physique donnes;Taille fic dat a (Mo);occupation (Mo);% occupation;libre (Mo);% libre;Nom physique logs;Taille fic log (Mo);occupation (Mo);% occupation;libre (Mo);% libre' -- Test et suppression des tables temporaires si elles existent. -- Cela permet d'executer ce script plusieurs fois sans avoir besoin de faire de changements ----------------------------------------------------------------------------------------------------IF EXISTS (SELECT * FROM TEMPDB..SYSOBJECTS WHERE ID = OBJECT_ID(N'TEMPDB..#Tabl eTempInfosData')) DROP TABLE [#TableTempInfosData] IF EXISTS (SELECT * FROM TEMPDB..SYSOBJECTS WHERE ID = OBJECT_ID(N'TEMPDB..#Tabl eTempInfosLog')) DROP TABLE [#TableTempInfosLog] -- Cration des tables temporaires ------------------------------------------------------------------------------------------------------ Cette table rceptionne les informations concernant le fichier de donnes CREATE TABLE #TableTempInfosData ( Identifiant INT, IndexGroupeFichier INT, EspaceTotal INT, EspaceUtiliser INT, NOM VARCHAR(1024), NomFichier VARCHAR(1024) ) -- Cette table rceptionne les informations concernant le fichier de logs CREATE TABLE #TableTempInfosLog ( NomBase VARCHAR(32), TailleLog REAL, EspaceUtilise REAL, Statut INT ) -- Curseur de traitement sur toutes les bases ------------------------------------------------------------------------------------------------------PRINT 'Base;Nom logique donnes;Nom logique logs;Nom physique donnes;Taille fic d ata (Mo);occupation (Mo);% occupation;libre (Mo);% libre;Nom physique logs;Taill e fic log (Mo);occupation (Mo);% occupation;libre (Mo);% libre' --USE master --DECLARE @database AS VARCHAR(255) --DECLARE CURSEUR CURSOR FOR SELECT name as BaseDedonneeDuServeur FROM sysdataba ses -OPEN CURSEUR; -FETCH NEXT FROM CURSEUR INTO @database; -WHILE @@FETCH_STATUS = 0 -BEGIN -USE @database; -FETCH NEXT FROM CURSEUR INTO @commande; -END

---

CLOSE CURSEUR; DEALLOCATE CURSEUR;

----------------------------------------------------------------------------------------------------DECLARE @NomDatabase VARCHAR(255) -- Rcupration du nom de la base de donnes en cours SELECT @NomDatabase = DB_NAME(dbid) FROM MASTER..SYSPROCESSES WHERE SPID = @@SPI D -- Rcupration d'informations gnrales sur la base en cours DECLARE @NomLogiqueFichierDonnees AS VARCHAR(255) DECLARE @NomPhysiqueFichierDonnees AS VARCHAR(255) DECLARE @TailleFichierDonnees AS INT DECLARE @NomLogiqueFichierLog AS VARCHAR(255) DECLARE @NomPhysiqueFichierLog AS VARCHAR(255) DECLARE @TailleFichierLog AS INT -- Rcupration des noms logiques des fichiers de la base en cours SET @NomLogiqueFichierDonnees = FILE_NAME ( 1 ) SET @NomLogiqueFichierLog = FILE_NAME ( 2 ) -- Rcupration des noms physiques des fichiers de la base en cours SELECT @NomPhysiqueFichierDonnees = FILENAME FROM MASTER..SYSALTFILES WHERE NAME = @NomLogiqueFichierDonnees SELECT @NomPhysiqueFichierLog = FILENAME FROM MASTER..SYSALTFILES WHERE NAME = @ NomLogiqueFichierLog -- Remplissage des tables temporaires avec les procdures systmes -- Avec suppression des messages d'informations sans intrts -- Cette procdure systme n'est pas documente, mais elle est bien utile. -- Elle donne l'occupation des donnes dans la base active ----------------------------------------------------------------------------------------------------INSERT INTO #TableTempInfosData EXECUTE ('DBCC SHOWFILESTATS WITH NO_INFOMSGS') -- Cette procdure donne l'occupation des donnes dans le fichier de log INSERT INTO #TableTempInfosLog EXECUTE ('DBCC SQLPERF(LOGSPACE) WITH NO_INFOMSGS') ------------------------------------------------------------------------------------------------------ Traitement des donnes DECLARE @TailleData FLOAT DECLARE @DataUtilise FLOAT DECLARE @DataVide FLOAT DECLARE @PourcentDataPleine FLOAT DECLARE @PourcentDataVide FLOAT DECLARE @TailleLog FLOAT DECLARE @EspaceLogUtilise FLOAT DECLARE @EspaceLogVide FLOAT DECLARE @PourcentLogPlein FLOAT DECLARE @PourcentLogVide FLOAT -- Lecture des valeurs du fichier de donnes SELECT @TailleData = (SUM(EspaceTotal) * 64 ) / 10.24, @DataUtilise = (SUM(EspaceUtiliser) * 64 ) /10.24 FROM #TableTempInfosData -- Calcul pour avoir la taille en Mega deux dcimales SET @TailleData = @TailleData / 100 SET @DataUtilise = @DataUtilise / 100 SET @DataVide = @TailleData - @DataUtilise -- Calcul des poucentages d'occupations

SET @PourcentDataVide = (1 - @DataUtilise / @TailleData ) * 100 SET @PourcentDataPleine = 100 - @PourcentDataVide -- Lecture des valeurs du fichier de log SELECT @TailleLog = TailleLog, @EspaceLogUtilise = (TailleLog * EspaceUtilise) / 100 FROM #TableTempInfosLog WHERE NomBase = @NomDatabase -- Calcul l'espace libre dans le fichier de log SET @EspaceLogVide = @TailleLog - @EspaceLogUtilise -- Calcul des poucentages d'occupations SET @PourcentLogVide = (1 - @EspaceLogUtilise / @TailleLog ) * 100 SET @PourcentLogPlein = 100 - @PourcentLogVide ------------------------------------------------------------------------------------------------------ Affichage des diffrents rsultats PRINT @NomDatabase + ';' + @NomLogiqueFichierDonnees + ';' + @NomLogiqueFichierL og + ';' + @NomPhysiqueFichierDonnees + ';' + CAST(ROUND(@TailleData, 2) AS VARCH AR) + ';' + CAST(ROUND(@DataUtilise, 2) AS VARCHAR) + ';' + CAST(ROUND(@PourcentDa taPleine, 2) AS VARCHAR) + ';' + CAST(ROUND(@DataVide, 2) AS VARCHAR) + ';' + CAST(ROUND(@PourcentDataV ide, 2) AS VARCHAR) + ';' + @NomPhysiqueFichierLog + ';' + CAST(ROUND(@TailleLog, 2) AS VARCHAR) + ';' + CAST(ROUND(@EspaceLogUtilise, 2) AS VARCHAR) + ';' + CAST(ROUND(@Pourc entLogPlein, 2) AS VARCHAR) + ';' + CAST(ROUND(@EspaceLogVide, 2) AS VARCHAR) + ';' + CAST(ROUND(@Pourcent LogVide, 2) AS VARCHAR)