exec master..xp_fixeddrives
데이터베이스 서버의 디스크 총 사이즈 및 여유 공간을 읽어오는 프로시저
입니다..
SQL 2000에서는 바로 수행이 되며,
SQL 2005에서는 다음과 같이 Ole Automation
Procedures 옵션을 활성화 해 주어야 작동됩니다..
--SS2005 에서
SP_CONFIGURE 'show advanced
options',1
GO
RECONFIGURE WITH OVERRIDE;
GO
SP_CONFIGURE 'Ole Automation
Procedures',1
GO
RECONFIGURE WITH
OVERRIDE;
GO
------------------------------------------------------------------------
use
master
go
CREATE PROCEDURE sp_diskspace
AS
/*
Displays the free space,free
space percentage
plus total drive size for a server
*/
SET NOCOUNT
ON
DECLARE @hr int
DECLARE @fso int
DECLARE @drive char(1)
DECLARE
@odrive int
DECLARE @TotalSize varchar(20)
DECLARE @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
SELECT drive,
FreeSpace as 'Free(MB)',
TotalSize as
'Total(MB)',
CAST((FreeSpace/(TotalSize*1.0))*100.0 as int) as
'Free(%)'
FROM #drives
ORDER BY drive
DROP TABLE #drives
RETURN
go
'연구개발 > DBA' 카테고리의 다른 글
SS2000 - Identity 컬럼 최대값 모니터링 (0) | 2010.07.27 |
---|---|
SS2000 - 현재 캐시된 내용 조회하기 (0) | 2010.07.27 |
SS2000 - 해당 DB의 모든 인덱스 정보 끌어오기 (0) | 2010.07.27 |
SQL Server 2008 한방 설치~ (0) | 2010.07.21 |
현재 sql server 에서 가장 많은 부하를 일으키는 spid 와 쿼리 내용은? (0) | 2010.07.20 |