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.


martes, 7 de julio de 2015

Pasando Datos Numéricos Largos Desde Sql Server Hacia Excel (evitar el truncamiento)

Amigos,

Me ha llegado una consulta desde la hermana República de Panamá. Don Omar Alfanno me cuenta de un inconveniente que tiene "al bajar datos desde el sql server al excel, cuando intento copiar y pegar la columna con mis números telefónicos, pues veo que los últimos tres dígitos se truncan y el Excel los cambia por tres números ceros. No encuentro la solución puede ud. ayudarme?"

Respuesta:

Ante todo don Omar quiero contarle que es un error con el que todos quienes trabajamos alguna vez con el SQL Server nos hemos topado y es de muy fácil resolución.

Simplemente debe (y en este orden, de lo contrario no funciona)

1) Abrir el excel y darle formato texto (text) a las columnas en las cuales ud. quiere pegar sus datos numéricos extensos.

2) Luego si copiar y pegar los datos desde el sql server en el excel.

Es muy importante que no invierta el orden, le repito. No pegue para luego cambiar el formato porque sus datos serán truncados.

Eso es todo, mi saludo desde Argentina.