Are you running out of space? Filling up drives? Don’t know where to go? Is your SAN administrator complaining about your continued demands for more spindles? Do you need to juggle databases around on different servers but don’t know how you’re going to figure out the size of your index, table, and materialized view filegroups as well as the filegroups you’ve created for every schema just to piss off the DBA?
Take a step back and relax. I’ve got it covered.
-- i hate you too, temp table
IF OBJECT_ID(N'tempdb..#db_files') IS NOT NULL
DROP TABLE #db_files ;
-- load up the temp table
SELECT DB_NAME([dbid]) AS database_name ,
[filename] ,
UPPER(LEFT([filename], 1)) AS drive_letter ,
( size * 8 ) / 1024 AS size_in_mb
INTO #db_files
FROM sys.sysaltfiles AS saf
ORDER BY saf.[dbid]
-- how full is each drive?
SELECT drive_letter ,
SUM(size_in_mb) AS size_in_mb
FROM #db_files AS df
GROUP BY drive_letter
ORDER BY drive_letter ;
-- how big is each database?
SELECT COALESCE(database_name, 'RESOURCE DB') AS database_name ,
SUM(size_in_mb) AS size_in_mb
FROM #db_files AS df
GROUP BY database_name
ORDER BY database_name ;
-- what do the details look like?
SELECT database_name ,
[filename] ,
size_in_mb
FROM #db_files ;