Olá, O codigo a seguir tem a finalidade de capturar o tamanho atual das bases (levando em conta apenas os arquivos de dado). Uma ótima utilidade para o script é persistir essas informações em um repositório pra depois fazer outras análises (Capacity Plan, por exemplo), por isso adicionalmente, existe um campo de data na saída da variável. Segue script:
-- Cria variável de tabela DECLARE @DBSize AS TABLE ( DBName varchar(100), DBStatus varchar(20), Recovery_Model varchar(100), Database_Path varchar(500), File_Size float, Space_Used float, Free_Space float, File_Size_String Varchar(100) NULL, Space_Used_String Varchar(100) NULL, Free_Space_String Varchar(100) NULL, Total_Space_MB Varchar(100) NULL ) INSERT INTO @DBSize(Dbname, DBStatus, Recovery_Model, Database_Path, file_Size, Space_Used, Free_Space) EXEC SP_MSFOREACHDB 'USE [?]; SELECT DB_NAME() AS DbName, CONVERT(varchar(20),DatabasePropertyEx(''?'',''Status'')) , CONVERT(varchar(20),DatabasePropertyEx(''?'',''Recovery'')), physical_name, size*8.00 AS File_Size, FILEPROPERTY(name, ''SpaceUsed'')*8.00 as Space_Used, size*8.00 - FILEPROPERTY(name, ''SpaceUsed'')*8.00 AS Free_Space FROM sys.database_files where type=0' --> Atualiza campos nulos com sufixo de espaço UPDATE @DBSize SET File_Size_String = CASE WHEN File_Size/1024.00 > 1000 THEN Convert(Varchar(50),Convert(decimal(20,2),(File_Size/1024/1024.00))) + ' GB' ELSE Convert(Varchar(50),Convert(decimal(20,2),(File_Size/1024.00))) + ' MB' END, Space_Used_String = CASE WHEN Space_Used/1024.00 > 1000 THEN Convert(Varchar(50),Convert(decimal(20,2),(Space_Used/1024/1024.00))) + ' GB' ELSE Convert(Varchar(50),Convert(decimal(20,2),(Space_Used/1024.00))) + ' MB' END, Free_Space_String = CASE WHEN Free_Space/1024.00 > 1000 THEN Convert(Varchar(50),Convert(decimal(20,2),(Free_Space/1024/1024.00))) + ' GB' ELSE Convert(Varchar(50),Convert(decimal(20,2),(Free_Space/1024.00))) + ' MB' END, Total_Space_MB = Convert(decimal(20,2),(File_Size/1024.00)) --> Obs: Campo de Data puramente opcional SELECT DBName as [Database] , DBStatus, Recovery_Model, File_Size_String, Space_Used_String, Free_Space_String, Total_Space_MB, Database_Path, GETDATE() AS Data FROM @DBSize ORDER BY File_Size DESC, Space_Used DESC, Free_Space DESC
Exemplo de saída