Получить общую сумму всех баз данных на SQL Server

Я хочу рассчитать, сколько пространства используют мои базы данных на сервере. Я мог бы использовать таблицу sp_spacefiles или query sys.databases, но это дало бы мне отдельные результаты для каждой базы данных, и мне пришлось бы скопировать ее в лист excel и вычислить сумму оттуда.

Есть ли прямой способ сделать это в T-SQL?

Спасибо.

Ответ 1

Вы можете запросить master.sys.master_files:

SELECT CONVERT(DECIMAL(10,2),(SUM(size * 8.00) / 1024.00 / 1024.00)) As UsedSpace
FROM master.sys.master_files

Это даст вам общее количество в GB.

Sys.Master_files - это общее представление на сервере, в котором перечислены все файлы в каждом БД. Он доступен с SQL Server 2005 и далее.

Ответ 2

Вот ответ, который я нашел на SQLServerCentral.com. На этой странице есть несколько разных сценариев, предоставляемых разными пользователями. Возможно, один из них предоставит вам то, что вы ищете.

http://www.sqlservercentral.com/Forums/Topic670489-146-1.aspx

Вот один из сценариев из MANU-J:

Create TABLE #db_file_information( 
fileid integer
, theFileGroup integer
, Total_Extents integer
, Used_Extents integer
, db varchar(30)
, file_Path_name varchar(300))

-- Get the size of the datafiles

insert into #db_file_information 
( fileid 
, theFileGroup 
, Total_Extents 
, Used_Extents 
, db 
, file_Path_name )
exec sp_MSForEachDB 'Use ?; DBCC showfilestats'

-- add two columns to the temp table

alter table #db_file_information add PercentFree as 
((Total_Extents-Used_Extents)*100/(Total_extents))

alter table #db_file_information add TotalSpace_MB as 
((Total_Extents*64)/1024)

alter table #db_file_information add UsedSpace_MB as 
((Used_Extents*64)/1024)

alter table #db_file_information add FreeSpace_MB as 
((Total_Extents*64)/1024-(Used_Extents*64)/1024)

select * from #db_file_information

drop table #db_file_information

Ответ 3

На всякий случай кому-то нужен калькулятор для каждого файла:

select physical_name, size,
    CONVERT(DECIMAL(10,2),(size * 8.00) / 1024.00) As UsedSpace
from master.sys.master_files
order by physical_name

Результаты в MBytes