使用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上所有資料庫的資訊。