Buscar este blog

miércoles, 29 de julio de 2015

Script Para Saber el Espacio Libre en Las Unidades de Disco de un Servidor

Gente,

    Quiero dejarles un script útil que les permitirá tener controlado el espacio disponible en disco siempre.

    Los valores que devuelve por unidad lógica son:   Gb Libres,  total de GB de la unidad y % de Gb libres restantes.

   Para ello deben primero configurar vuestro server para que les permita usar los “Ole Automation Procedures” que este sp utiliza.

   “Go down on business” entonces :



      -------------------------------------------
   -- Habilita - "Ole Automation Procedures --
   -------------------------------------------
    
       sp_configure 'show advanced options',
       GO  
       RECONFIGURE; 
       GO 
       sp_configure 'Ole Automation Procedures',
       GO  
       RECONFIGURE; 
       GO  
       sp_configure 'show advanced options',
       GO  
       RECONFIGURE;


     ------------------------------------------------
     -- Informa espacio libre en unidades de disco -
     -- Autor: GRH - Sql Server Para Todos         -
     ------------------------------------------------
    
      DECLARE
      @hr int,
      @fso int,
      @drive char(1),
      @odrive int,
      @TotalSize varchar(20),
      @MB bigint
     
      SET @MB = 1048576


      CREATE TABLE #drives (drive char(1) PRIMARY KEY,
      FreeSpace int NULL,
      TotalSize int NULL)

      INSERT #drives(drive,FreeSpace)

      EXEC master.dbo.xp_fixeddrives

      EXEC @hr=sp_OACreate 'Scripting.FileSystemObject',@fso OUT
      IF @hr <> 0 EXEC sp_OAGetErrorInfo @fso

      DECLARE dcur CURSOR LOCAL FAST_FORWARD
      FOR SELECT drive from #drives

      ORDER by drive
      OPEN dcur
      FETCH NEXT FROM dcur INTO @drive
      WHILE @@FETCH_STATUS=0
      BEGIN
         EXEC @hr = sp_OAMethod @fso,'GetDrive', @odrive OUT, @drive
         IF @hr <> 0 EXEC sp_OAGetErrorInfo @fso
         EXEC @hr = sp_OAGetProperty @odrive,'TotalSize', @TotalSize OUT
         IF @hr <> 0 EXEC sp_OAGetErrorInfo @odrive
         --
         UPDATE #drives
         SET TotalSize=@TotalSize/@MB
         WHERE drive=@drive
         FETCH NEXT FROM dcur INTO @drive
      END
      CLOSE dcur
      DEALLOCATE dcur
    
      EXEC @hr=sp_OADestroy @fso
      IF @hr <> 0 EXEC sp_OAGetErrorInfo @fso
             

          El resultado obtenido será el siguiente:
  


         ** TIP -  Pueden guardar estos datos en una tabla y medir de ese modo el % de crecimiento de utilización de vuestros discos duros proyectando el espacio necesario a futuro.
                        Pueden armar una alerta que, cuando el espacio disponible en disco caiga por debajo de x gb dispare un correo.


         Eso es todo amigos, amigable y sencillo.

          Saludos cordiales desde Argentina.