1+ /* ***********************************************************************************************
2+ ================================================================================
3+ DESCRIPTION:
4+ --------------------------------------------------------------------------------
5+ List all databases and all files in the databsae, along with sizing used and free
6+ and the growth values
7+ SQL Server 2012+
8+
9+ HISTORY:
10+ --------------------------------------------------------------------------------
11+ Date: Developer: Description:
12+ --------------------------------------------------------------------------------
13+ * * Created
14+ --------------------------------------------------------------------------------
15+
16+ NOTES:
17+ --------------------------------------------------------------------------------
18+ THIS SCRIPT/CODE ARE PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED.
19+ LIMITED TESTING HAS BEEN PERFORMED ON THIS SCRIPT/CODE AND THEREFORE THE AUTHOR DOES NOT WARRANT
20+ THAT ANY SCRIPT/CODE IS BUG OR ERROR-FREE. IT IS EXPECTED THAT ANY SCRIPT/CODE UNDERGO YOUR OWN
21+ TESTING AND/OR VALIDATION BEFORE USAGE ON ANY CRITICAL SQL SERVER PLATFORM.
22+ THIS SCRIPT MAY BE A COLLECTION OF MY OWN CODE COLLATED OVER MANY YEARS, OR OTHER CODE I HAVE
23+ LOCATED ON THE WEB WITH AN UNKNOWN ORIGIN. WHERE CODE HAS BEEN IDENTIFIED IT WILL BE CITED.
24+ ================================================================================
25+ ************************************************************************************************/
26+
27+ BEGIN
28+ SET NOCOUNT ON ;
29+
30+ -- CALCULATE DATABASE GROWTH OPTIONS CALCULATIONS
31+ DECLARE
32+ @DBName SYSNAME ,
33+ @SQLString NVARCHAR (4000 );
34+ CREATE TABLE [#tempforfilestats]
35+ (
36+ [database name] VARCHAR (35 ) NOT NULL ,
37+ [file name] VARCHAR (128 ) NOT NULL ,
38+ [usage type] VARCHAR (6 ) NOT NULL ,
39+ [size (mb)] REAL NOT NULL ,
40+ [space used (mb)] REAL NULL ,
41+ [maxsize (mb)] REAL NOT NULL ,
42+ [next allocation (mb)] REAL NOT NULL ,
43+ [growth type] VARCHAR (12 ) NOT NULL ,
44+ [file id] SMALLINT NOT NULL ,
45+ [group id] SMALLINT NOT NULL ,
46+ [physical file] NVARCHAR (260 ) NOT NULL ,
47+ [date checked] DATETIME NOT NULL
48+ );
49+ CREATE TABLE [#tempfordatafile]
50+ (
51+ [file id] SMALLINT NOT NULL ,
52+ [group id] SMALLINT NOT NULL ,
53+ [total extents] INT NOT NULL ,
54+ [used extents] INT NOT NULL ,
55+ [file name] NVARCHAR (128 ) NOT NULL ,
56+ [physical file] NVARCHAR (260 ) NOT NULL
57+ );
58+ CREATE TABLE [#tempforlogfile]
59+ (
60+ [recovery unit id] INT NOT NULL ,
61+ [file id] INT NOT NULL ,
62+ [size (bytes)] REAL NOT NULL ,
63+ [start offset] VARCHAR (50 ) NOT NULL ,
64+ [fseqno] INT NOT NULL ,
65+ [status] INT NOT NULL ,
66+ [parity] SMALLINT NOT NULL ,
67+ [createtime] VARCHAR (50 ) NOT NULL
68+ );
69+ DECLARE cursdb CURSOR LOCAL FORWARD_ONLY STATIC READ_ONLY
70+ FOR SELECT [name]
71+ FROM [master].[dbo].[sysdatabases](nolock )
72+ WHERE [status]&512 <> 512 -- NOT OFFLINE
73+ AND [status]&1073741824 <> 1073741824 -- NOT SUSPECT
74+ AND [status]&32 <> 32 -- NOT LOADING
75+ AND [status]&128 <> 128 ; -- NOT RECOVERING
76+
77+ OPEN cursdb;
78+ FETCH FROM cursdb INTO
79+ @DBName;
80+ WHILE (@@FETCH_STATUS = 0 )
81+ BEGIN
82+ SELECT @SQLString = ' '+ ' select '+ ' '' '+ @DBName+ ' '' '+ ' as '' Database'' , '+ ' convert(nvarchar(128), f.name), '+ ' case '+ ' when (64 & f.status) = 64 then '' Log'' '+ ' else '' Data'' '+ ' end as '' Usage Type'' , '+ ' f.size * 8.00 / 1024.00 as '' Size (MB)'' , '+ ' NULL as '' Space Used (MB)'' , '+ ' case '+ ' when f.maxsize < 0 then -1 '+ ' when f.maxsize = 0 then f.size * 8.00 / 1024.00'+ ' when f.maxsize > 2147483647 then 2147483647 '+ ' else f.maxsize * 8.00 / 1024.00 '+ ' end as '' max Size (MB)'' , '+ ' case '+ ' when (1048576 & f.status) = 1048576 then growth'+ ' when f.growth = 0 then 0 '+ ' else f.growth * 8.00 / 1024.00 '+ ' end as '' next Allocation (MB)'' , '+ ' case '+ ' when (1048576 & f.status) = 1048576 then '' %'' '+ ' else '' Mb'' '+ ' end as '' Usage Type'' , '+ ' f.fileid, '+ ' f.groupid, '+ ' filename, '+ ' getdate() '+ ' from ['+ @DBName+ ' ].dbo.sysfiles f (nolock)' ;
83+
84+ -- print @SQLString
85+ INSERT INTO [#tempforfilestats]
86+ EXECUTE (@SQLString);
87+
88+ -- SHOW FILE STATS
89+ SELECT @SQLString = ' USE ['+ @DBName+ ' ] DBCC SHOWFILESTATS' ;
90+
91+ -- print @SQLString
92+ INSERT INTO [#tempfordatafile]
93+ EXECUTE (@SQLString);
94+ UPDATE [#tempforfilestats]
95+ SET
96+ [space used (mb)] =
97+ CONVERT ( REAL , [s].[used extents]) * 64 / 1024 .00
98+ FROM [#tempforfilestats] [f](nolock )
99+ INNER JOIN [#tempfordatafile] [s](nolock ) ON [f].[file id] = [s].[file id]
100+ AND [f].[group id] = [s].[group id]
101+ WHERE [f].[database name] = @DBName;
102+ TRUNCATE TABLE [#tempfordatafile];
103+
104+ -- LOG INFO
105+ SELECT @SQLString = ' USE ['+ @DBName+ ' ] DBCC LOGINFO' ;
106+
107+ -- print @SQLString
108+ INSERT INTO [#tempforlogfile]
109+ EXECUTE (@SQLString);
110+ UPDATE [#tempforfilestats]
111+ SET
112+ [space used (mb)] =
113+ (
114+ SELECT
115+ (
116+ MIN ([l].[start offset]) + SUM (CASE
117+ WHEN [l].[status] <> 0
118+ THEN [l].[size (bytes)]
119+ ELSE 0
120+ END )
121+ ) / 1048576 .00
122+ FROM [#tempforlogfile] AS [l](nolock )
123+ WHERE [l].[file id] = [f].[file id]
124+ )
125+ FROM [#tempforfilestats] [f](nolock )
126+ WHERE [f].[database name] = @DBName
127+ AND [f].[usage type] = ' Log' ;
128+ TRUNCATE TABLE [#tempforlogfile];
129+ FETCH NEXT FROM cursdb INTO
130+ @DBName;
131+ END ;
132+ CLOSE cursdb;
133+ DEALLOCATE cursdb;
134+ END ;
135+ GO
136+ PRINT ' ' ;
137+ SELECT [database name],
138+ [file name],
139+ [usage type],
140+ [size (mb)],
141+ [space used (mb)],
142+ CAST (
143+ (
144+ [space used (mb)] / [size (mb)] * 100 .00
145+ ) AS NUMERIC (5 , 2 )) AS [space used (%)],
146+ CASE CONVERT ( VARCHAR (25 ), [maxsize (mb)])
147+ WHEN ' -1'
148+ THEN ' No max Size'
149+ ELSE CONVERT (VARCHAR (25 ), [maxsize (mb)])
150+ END AS ' maxSize' ,
151+ CASE CONVERT ( VARCHAR , [next allocation (mb)])
152+ WHEN ' 0'
153+ THEN ' No'
154+ ELSE ' Yes - '+ CONVERT (VARCHAR (25 ), [next allocation (mb)])+ ' '+ [growth type]
155+ END AS ' Auto Grow' ,
156+ [next allocation (mb)],
157+ [growth type],
158+ [file id],
159+ [group id],
160+ [physical file],
161+ [date checked]
162+ FROM [#tempforfilestats](nolock )
163+ ORDER BY 1 ,
164+ 2 ;
165+ GO
166+ DROP TABLE [#tempforfilestats];
167+ GO
168+ DROP TABLE [#tempfordatafile];
169+ GO
170+ DROP TABLE [#tempforlogfile];
171+ GO
0 commit comments