[Database Management]使用sys.database_files可以取得資料庫空間使用量的情況

  • 2947
  • 0

使用sys.database_files取代SP_HELPFILE取得資料庫空間使用量的情況,使用sys.database_files的缺點是可以彈性的取得自己想要的資訊以及去除過多的資訊,但是有無法取得所有SQL SERVER上所有資料庫的資訊這項限制。

 

/*
要快速檢視資料庫的檔案使用情況,我們通常都會下EXEC SP_HELPFILE這個系統的stored procedure,
不過使用EXEC SP_HELPFILE有一個缺點,取得的資訊是固定的缺乏彈性。
*/
 

--執行系統stored procedure SP_HELPFILE
EXEC SP_HELPFILE

--執行結果:
 

/*

為了克服取得的資訊是固定這項缺點,可以使用sys.database_files這個SQL SERVER提供的SYSTEM VIEW。

透過sys.database_files我們可以輕鬆的取得我們所需要的資訊。

*/


--使用sys.database_files收集資料檔案的情況
SELECT  
DB_NAME() [資料庫名稱], [name] AS [檔案名稱], physical_name AS [路徑],    
CASE TYPE   WHEN 0 THEN 'Data'  WHEN 1 THEN 'Log' END [檔案類別],   
CASE CEILING([SIZE]/128)    WHEN 0 THEN 1   
ELSE CEILING([SIZE]/128)   END AS  [資料庫檔案全部容量(MB)],  
CASE CEILING([SIZE]/128)    WHEN 0 
THEN (1 - CAST(FILEPROPERTY([name], 'SpaceUsed') AS INT) /128)   
ELSE (([SIZE]/128) - CAST(FILEPROPERTY([name], 'SpaceUsed') AS INT) /128)   
END [資料庫檔案可用容量(MB)] ,    
CASE [is_percent_growth]   WHEN 1 
THEN CAST(growth AS VARCHAR(20)) + '%'  
ELSE CAST(growth*8/1024 AS VARCHAR(20)) + 'Mb'END [檔案成],   							   
CASE [max_size]   WHEN -1 THEN NULL   
			      WHEN 268435456 THEN NULL   
			      ELSE [max_size]   END   [檔案大小上限(MB)] 
FROM sys.database_files   ORDER BY [檔案類別], [FILE_ID]


 

 

--執行結果:

 

 

結論:透過sys.database_files可以取得資料庫空間使用量的情況,透過sys.database_files我們可以彈性的取得自己想要的資訊以及去除過多的資訊,但使用sys.database_files無法取得所有SQL SERVER上所有資料庫的資訊,在下一篇我會示範如何取得SQL SERVER上所有資料庫的資訊。

參考網址: http://www.mssqltips.com/sqlservertip/1629/determine-free-space-consumed-space-and-total-space-allocated-for-sql-server-databases/