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:

USE msdb;
GO

IF EXISTS (SELECT 1 FROM sys.objects WHERE [type] = 'U' AND [object_id] = OBJECT_ID('[dbo].[scsDatabaseSize]'))
    DROP TABLE [dbo].[scsDatabaseSize];
GO

CREATE TABLE [dbo].[scsDatabaseSize]
(
    [DbName] nvarchar(255),
    [DataFile] bigint,
    [LogFile] bigint
)

DECLARE @DbName nvarchar(255);


DECLARE DB CURSOR FOR
SELECT [name] FROM sys.databases;
OPEN DB;
FETCH NEXT FROM DB INTO @DbName;
WHILE @@FETCH_STATUS = 0
    BEGIN
        EXEC ('INSERT INTO [msdb].[dbo].[scsDatabaseSize] ([DbName], [DataFile]) SELECT ''' + @DbName + ''', SUM([size]) FROM ' + @DbName + '.sys.database_files WHERE [type_desc] = ''ROWS'' ');
        
        EXEC ('INSERT INTO [msdb].[dbo].[scsDatabaseSize] ([DbName], [LogFile]) SELECT ''' + @DbName + ''', SUM([size]) FROM ' + @DbName + '.sys.database_files WHERE [type_desc] = ''LOG'' ');
        FETCH NEXT FROM DB INTO @DbName;
    END
CLOSE DB;
DEALLOCATE DB;


SELECT
    [DbName] AS [Database Name],
    SUM([DataFile]) AS [Data size (Kb)],
    SUM([LogFile]) AS [Log size (Kb)]
FROM
    [dbo].[scsDatabaseSize]
GROUP BY
    [DbName]
    
--cleanup
DROP 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.

Add comment