2010-02-11 4 views
4

데이터베이스가있는 드라이브의 사용 가능한 공간을 결정해야합니다. xp_fixeddrives 절차에 대해 알고 있지만 데이터베이스가있는 특정 드라이브에 대한 정보를 얻으려면 어떻게해야합니까?SQL 쿼리로 사용 가능한 디스크 크기 결정

+0

데이터베이스 선택이 제 통제하에 있으므로 SQL Server 2005 이상이 될 것입니다. – Ries

답변

6

이와 비슷한?

declare @DatabaseName sysname 
set @DatabaseName = 'master' 

declare @Drive table(DriveName char, FreeSpaceInMegabytes int) 
insert @Drive execute xp_fixeddrives 

select 
    mas.type_desc FileType, 
    mas.name FileName, 
    mas.physical_name PhysicalFileName, 
    mas.size * 8/1024 FileSizeInMegabytes, 
    drv.DriveName, 
    drv.FreeSpaceInMegabytes 
from sys.master_files mas 
    left join @Drive drv on 
     left(mas.physical_name, 1) = drv.DriveName 
where database_id = db_id(@DatabaseName) 

따라서 @DatabaseName을 설정하십시오.

1

SQL Server 버전을 언급하지 않았습니다. SQL Server 2005부터는 sys.database_files에서 많은 정보를 얻을 수 있으며이를 xp_fixeddrives의 출력과 관련시킬 수 있습니다.

0
SELECT Drive 
    , TotalSpaceGB 
    , FreeSpaceGB 
    , PctFree 
    , PctFreeExact 
    FROM 
    (SELECT DISTINCT 
     SUBSTRING(dovs.volume_mount_point, 1, 10) AS Drive 
    , CONVERT(INT, dovs.total_bytes/1024.0/1024.0/1024.0) AS TotalSpaceGB 
    , CONVERT(INT, dovs.available_bytes/1048576.0)/1024 AS FreeSpaceGB 
    , CAST(ROUND((CONVERT(FLOAT, dovs.available_bytes/1048576.0)/CONVERT(FLOAT, dovs.total_bytes/1024.0/
         1024.0) * 100), 2) AS NVARCHAR(50)) + '%' AS PctFree 
    , CONVERT(FLOAT, dovs.available_bytes/1048576.0)/CONVERT(FLOAT, dovs.total_bytes/1024.0/1024.0) * 100 AS PctFreeExact     
    FROM sys.master_files AS mf 
    CROSS APPLY sys.dm_os_volume_stats(mf.database_id, mf.file_id) AS dovs) AS DE 
+0

해결 방법에 대한 정보를 추가하는 것이 좋습니다. – scharette