Adatbázisok méretének lekérdezése
Update 2012.05.24: igazság szerint van egy újabb lekérdezés, ami sokkal jobb... itt érhető el: http://www.iamberke.com/post/2012/03/05/Adatbazisok-meretenek-lekerdezese.aspx
Ma többen is kértek tőlem egy listát, hogy egy-egy szerveren melyik adatbázis mennyi helyet foglal. Az alábbi script megadja a választ:
1USE msdb;
2GO
3
4IF EXISTS (SELECT 1 FROM sys.objects WHERE [type] = 'U' AND [object_id] = OBJECT_ID('[dbo].[scsDatabaseSize]'))
5 DROP TABLE [dbo].[scsDatabaseSize];
6GO
7
8CREATE TABLE [dbo].[scsDatabaseSize]
9(
10 [DbName] nvarchar(255),
11 [DataFile] bigint,
12 [LogFile] bigint
13)
14
15DECLARE @DbName nvarchar(255);
16
17
18DECLARE DB CURSOR FOR
19SELECT [name] FROM sys.databases;
20OPEN DB;
21FETCH NEXT FROM DB INTO @DbName;
22WHILE @@FETCH_STATUS = 0
23 BEGIN
24 EXEC ('INSERT INTO [msdb].[dbo].[scsDatabaseSize] ([DbName], [DataFile]) SELECT ''' + @DbName + ''', SUM([size]) FROM ' + @DbName + '.sys.database_files WHERE [type_desc] = ''ROWS'' ');
25
26 EXEC ('INSERT INTO [msdb].[dbo].[scsDatabaseSize] ([DbName], [LogFile]) SELECT ''' + @DbName + ''', SUM([size]) FROM ' + @DbName + '.sys.database_files WHERE [type_desc] = ''LOG'' ');
27 FETCH NEXT FROM DB INTO @DbName;
28 END
29CLOSE DB;
30DEALLOCATE DB;
31
32
33SELECT
34 [DbName] AS [Database Name],
35 SUM([DataFile]) AS [Data size (Kb)],
36 SUM([LogFile]) AS [Log size (Kb)]
37FROM
38 [dbo].[scsDatabaseSize]
39GROUP BY
40 [DbName]
41
42--cleanup
43DROP TABLE [dbo].[scsDatabaseSize];
A script DMV-ket használ, a régi SQL 2000-es sys táblákat, mint pl a sysaltfiles nem használom.