본문 바로가기
Programming/MSSQL

MSSQL 물리적 드라이브 가용량 보기 (DBA 관리용 시스템 프로시저)

by 제타 2018. 4. 12.
반응형


/************************************************************************************************

-- sp_freedisksize0

-- 물리적 드라이브 가용량을 표시한다.

************************************************************************************************/

USE MASTER

GO


IF OBJECT_ID('sp_freedisksize0') IS NOT NULL

   DROP PROCEDURE sp_freedisksize0

GO


CREATE PROC sp_freedisksize0    

AS

  SET NOCOUNT ON


  DECLARE @hr INT

  DECLARE @fso INT

  DECLARE @drive CHAR(1)

  DECLARE @odrive INT

  DECLARE @TotalSize VARCHAR(20)

  DECLARE @free INT

  DECLARE @query VARCHAR(1300)

  DECLARE @MB BIGINT 


  SET @MB = 1048576

  SET @query= 'master.dbo.xp_fixeddrives'


  CREATE TABLE #drives 

  ( drive CHAR(1) PRIMARY KEY

  , FreeSize INT NULL

  , TotalSize INT NULL

  )


  INSERT #drives(drive,FreeSize) EXEC @query


  EXEC @hr=sp_OACreate 'Scripting.FileSystemObject',@fso OUT


  IF @hr <> 0 EXEC sp_OAGetErrorInfo @fso


  DECLARE cur_freespace CURSOR FAST_FORWARD

  FOR SELECT drive 

      FROM #drives

      ORDER by drive


  OPEN cur_freespace


  FETCH NEXT FROM cur_freespace 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 cur_freespace INTO @drive

  END


  CLOSE cur_freespace


  DEALLOCATE cur_freespace


  EXEC @hr=sp_OADestroy @fso


  IF @hr <> 0 EXEC sp_OAGetErrorInfo @fso


  SELECT drive "Drive"

       , totalsize "TotalSize(MB)"

       , freesize "FreeSize(MB)"

       , CAST(CAST(freesize as DEC(10,2)) / CAST(totalsize AS DEC(10,2)) 

              * 100 AS DEC(10,2)) "FreeSize(%)"

  FROM #drives


  DROP TABLE #drives


  RETURN(0) --sp_freedisksize0


  SET NOCOUNT OFF


GO

  

GRANT EXECUTE ON sp_freedisksize0 TO PUBLIC

GO

반응형