List databases with their size | SQL Server Performance Forums

SQL Server Performance Forum – Threads Archive

List databases with their size

I want to list my databases, and physical related files, and their size but the following commands do not provide the size. Any idea? <br /><pre id="code"><font face="courier" size="2" id="code"><br />SELECT * FROM sysdatabases<br />SELECT * FROM sys.sysfiles<br /></font id="code"></pre id="code"><br /><br />I know it’s silly question [<img src=’/community/emoticons/emotion-3.gif’ alt=’:eek:‘ />)]<br /><br />CanadaDBA
Found: SELECT Name [Database], Physical_Name [Physical file], size*8 [Size_KB] FROM sys.master_files
CanadaDBA

begin try declare @tab1 table(
file_group_name varchar(500) collate database_default
, logical_file_name varchar(500) collate database_default
, physical_file_name varchar(500) collate database_default
, space_reserved float
, space_reserved_unit varchar (5) collate database_default
, space_used float
, space_used_unit varchar (5) collate database_default
);
declare @filestats_temp_table table(
file_id int
, file_group_id int
, total_extents int
, used_extents int
, logical_file_name varchar(500) collate database_default
, physical_file_name varchar(500) collate database_default
); insert into @filestats_temp_table
exec (‘DBCC SHOWFILESTATS’); insert into @tab1
select t2.name as [file_group_name]
, t1.logical_file_name
, t1.physical_file_name
, case when (total_extents * 64) < 1024 then (total_extents * 64)
when (total_extents * 64 / 1024.0) < 1024 then (total_extents * 64 / 1024.0)
else (total_extents * 64 / 1048576.0)
end as space_reserved
, case when (total_extents * 64) < 1024 then ‘KB’
when (total_extents * 64 / 1024.0) < 1024 then ‘MB’
else ‘GB’
end as space_reserved_unit
, case when (used_extents * 64) < 1024 then (used_extents * 64)
when (used_extents * 64 / 1024.0) < 1024 then (used_extents * 64 / 1024.0)
else (used_extents * 64 / 1048576.0)
end as space_used
, case when (used_extents * 64) < 1024 then ‘KB’
when (used_extents * 64 / 1024.0) < 1024 then ‘MB’
else ‘GB’
end as space_used_unit
from @filestats_temp_table t1
inner join sys.data_spaces t2 on ( t1.file_group_id = t2.data_space_id ); select (row_number() over (order by file_group_name))%2 as l1
, db_name()
, file_group_name
, logical_file_name
, physical_file_name
, cast(space_reserved as decimal(10,2)) as ‘space_reserved’
, space_reserved_unit
, cast (space_used as decimal (10,2)) as ‘space_used’
, space_used_unit
from @tab1
end try
begin catch
select -100 as l1
, ERROR_NUMBER() as file_group_name
, ERROR_SEVERITY() as logical_file_name
, ERROR_STATE() as physical_file_name
, ERROR_MESSAGE() as space_reserved
, 1 as space_reserved_unit, 1 as space_used, 1 as space_used_unit
end catch ;
MohammedU.
Moderator
SQL-Server-Performance.com
The following will give you total, used and free space…<br /><br />set nocount on <br /><br /><br />declare @cmd varchar(500) <br />declare @db varchar(12<img src=’/community/emoticons/emotion-11.gif’ alt=’8)’ /> <br /><br /><br />create table #results(FileType varchar(4) NOT NULL, <br /> [Name] sysname NOT NULL, <br /> Total numeric(9,2) NOT NULL, <br /> Used numeric(9,2) NOT NULL, <br /> [Free] numeric(9,2) NOT NULL, <br /> dbname sysname NULL) <br /><br /><br />create table #data(Fileid int NOT NULL, <br /> [FileGroup] int NOT NULL, <br /> TotalExtents int NOT NULL, <br /> UsedExtents int NOT NULL, <br /> [Name] sysname NOT NULL, <br /> [FileName] varchar(300) NOT NULL) <br /><br /><br />create table #log(dbname sysname NOT NULL, <br /> LogSize numeric(15,7) NOT NULL, <br /> LogUsed numeric(9,5) NOT NULL, <br /> Status int NOT NULL) <br /><br /><br />begin <br /><br /><br /> /* Get data file(s) size */ <br /> declare dcur cursor local fast_forward <br /> for <br /> select NAME from sys.databases<br /><br /> open dcur <br /><br /><br /> fetch next from dcur into @db <br /><br /><br /> while @@fetch_status=0 <br /> begin <br /><br /><br /> set @cmd = ‘use ‘ + @db + ‘ DBCC showfilestats’ <br /> insert #data <br /> exec(@cmd) <br /><br /><br /> insert #results(FileType,[Name],Total,Used,[Free],dbname) <br /> select ‘Data’, <br /><br /><br />left(right([FileName],charindex(”,reverse([FileName]))-1), <br /> charindex(‘.’,right([FileName], <br /> charindex(”,reverse([FileName]))-1))-1), <br /> CAST(((TotalExtents*64)/1024.00) as numeric(9,2)), <br /> CAST(((UsedExtents*64)/1024.00) as numeric(9,2)), <br /> (CAST(((TotalExtents*64)/1024.00) as numeric(9,2)) <br /> -CAST(((UsedExtents*64)/1024.00) as numeric(9,2))), <br /> @db <br /> from #data <br /><br /><br /> delete #data <br /><br /><br /> fetch next from dcur into @db <br /><br /><br /> end <br /> close dcur <br /> deallocate dcur <br /><br /><br /> /* Get log file(s) size */ <br /> insert #log <br /> exec(‘dbcc sqlperf(logspace)’) <br /><br /><br /> insert #results(FileType,[Name],Total,Used,[Free],dbname) <br /> select ‘Log’,dbname+’_log’,LogSize, <br /> ((LogUsed/100)*LogSize),LogSize-((LogUsed/100)*LogSize), <br /> dbname <br /> from #log <br /><br /><br /> select dbname,FileType,[Name],Total,Used,[Free] <br /> from #results order by dbname,FileType <br /><br />select @@servername as servername, dbname, sum(total) Total, sum(used) Used, sum(free) Free<br /> from #results<br />group by dbname<br />order by Total desc<br /><br /> drop table #data <br /> drop table #log <br /> drop table #results <br /><br /><br /> return <br /><br /><br />end <br /><br /><br /><br />MohammedU.<br />Moderator<br />SQL-Server-Performance.com
]]>