Informations sur les disques du serveur SQL

Voici une petite procédure pour obtenir les informations sur les volumes et taux d’occupation des disques de votre serveur SQL.


USE master;
GO
 
CREATE SCHEMA SOS;
GO
 
CREATE PROCEDURE SOS.P_DISK_SPACE
AS
 
SET NOCOUNT ON;
 
-- variables locales
DECLARE @HDL int, @FSO_TOKEN int, @LCT_LECTEUR char(1), @NUM_LECTEUR int, @TAILLE_TOTALE varchar(32), @MB bigint;
DECLARE @T_LECTEUR_LCT TABLE  
(LCT_NOM_SERVEUR      VARCHAR(15),
 LCT_LECTEUR          CHAR(1) PRIMARY KEY,
 LCT_NUM              INT,
 LCT_ESPACE_LIBRE     FLOAT NULL,
 LCT_TAILLE_TOTALE    FLOAT NULL,
 LCT_DATEHEURE        DATETIME NULL)
 
-- assignation préalable :
SET @MB = 1048576;
INSERT @T_LECTEUR_LCT(LCT_LECTEUR, LCT_ESPACE_LIBRE)
EXEC master.dbo.xp_fixeddrives;
 
-- appel OLE à fso (File System Object) pour manipuler les fichiers
-- création d'un jeton de communication avec le FSO
EXEC @HDL = sp_OACreate 'Scripting.FileSystemObject', @FSO_TOKEN OUT
IF @HDL <> 0  
   EXEC sp_OAGetErrorInfo @FSO_TOKEN;
 
-- tant que la table n'est pas complétement renseignée :
WHILE EXISTS(SELECT *  
             FROM   @T_LECTEUR_LCT
             WHERE  LCT_TAILLE_TOTALE IS NULL)
BEGIN
   -- selection du premier lecteur
   SELECT TOP 1 @LCT_LECTEUR = LCT_LECTEUR
   FROM   @T_LECTEUR_LCT
   WHERE  LCT_TAILLE_TOTALE IS NULL;
   -- obtention du n° du lecteur
   EXEC @HDL = sp_OAMethod @FSO_TOKEN, 'GetDrive', @NUM_LECTEUR OUT, @LCT_LECTEUR
   --EXEC @hr = sp_OAMethod @fso,'GetDrive', @odrive OUT, @drive
   IF @HDL <> 0  
      EXEC sp_OAGetErrorInfo @FSO_TOKEN;
   -- obtention du volume du lecteur
   EXEC @HDL = sp_OAGetProperty @NUM_LECTEUR, 'TotalSize', @TAILLE_TOTALE OUT
   IF @HDL <> 0  
      EXEC sp_OAGetErrorInfo @NUM_LECTEUR;
   -- mise à jour de la table    
   UPDATE @T_LECTEUR_LCT
   SET    LCT_TAILLE_TOTALE = @TAILLE_TOTALE/@MB,  
          LCT_NUM           = @NUM_LECTEUR,
          LCT_NOM_SERVEUR   = host_name(),  
          LCT_DATEHEURE     = GETDATE()
   WHERE  LCT_LECTEUR = @LCT_LECTEUR;
END
-- suppression du jeton FSO
EXEC @HDL = sp_OADestroy @FSO_TOKEN;
IF @HDL <> 0  
   EXEC sp_OAGetErrorInfo @FSO_TOKEN;
-- extraction des résultats
SELECT LCT_NOM_SERVEUR, LCT_LECTEUR, LCT_NUM,  
       LCT_TAILLE_TOTALE as TOTAL_MO, LCT_ESPACE_LIBRE as ESPACE_LIBRE_MO,  
       CAST((LCT_ESPACE_LIBRE/(LCT_TAILLE_TOTALE*1.0))*100.0 as DECIMAL(16,2)) as POURCENT_LIBRE,  
       LCT_DATEHEURE
FROM   @T_LECTEUR_LCT
ORDER  BY LCT_LECTEUR;

Pour la faire fonctionner :

EXEC master.SOS.P_DISK_SPACE

Résultat :


LCT_NOM_SERVEUR LCT_LECTEUR LCT_NUM     TOTAL_MO    ESPACE_LIBRE_MO        POURCENT_LIBRE    LCT_DATEHEURE
--------------- ----------- ----------- ----------- ---------------------- ----------------- -----------------------
HPWFRED         C           33488638    464629      196586                 42.31             2011-11-29 12:19:35.173
HPWFRED         D           50265854    476937      121052                 25.38             2011-11-29 12:19:35.177
HPWFRED         S           67043070    1907757     1163739                61.00             2011-11-29 12:19:35.180
HPWFRED         Z           83820286    12291       4026                   32.76             2011-11-29 12:19:35.183

NOTE : cette procédure nécessite d’utiliser des appels aux objets OLE qui sont à défaut bloqués dans sp_configure. Il est possible de les débloquer temporairement à l’aide de la commande suivante :

EXEC ('sp_configure ''Ole Automation Procedures'', 1;')
EXEC ('RECONFIGURE')

Puis de les rebloquer avec :

EXEC ('sp_configure ''Ole Automation Procedures'', 0;')
EXEC ('RECONFIGURE')

--------
Frédéric Brouard, SQLpro - ARCHITECTE DE DONNÉES, http://sqlpro.developpez.com/
Expert bases de données relationnelles et langage SQL. MVP Microsoft SQL Server
www.sqlspot.com : modélisation, conseil, audit, optimisation, tuning, formation
* * * * *  Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence  * * * * *

MVP Microsoft SQL Server

Laisser un commentaire