2011-08-19 6 views
11

Chcę obliczyć, ile miejsca wykorzystują moje bazy danych na serwerze. Mogłabym użyć tabeli sp_spacefiles lub zapytania sys.databases, ale to dałoby mi osobne wyniki dla każdej bazy danych i musiałbym skopiować ją do arkusza Excela i obliczyć z niej sumę.Uzyskaj całkowitą sumę rozmiaru wszystkich baz danych w serwerze SQL

Czy istnieje bezpośredni sposób robienia tego w T-SQL?

Dzięki.

Odpowiedz

19

Można zapytać master.sys.master_files:

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

To daje w sumie w GB.

Sys.Master_files to widok serwera obejmujący każdy plik w każdym zbiorze danych. Jest dostępny od wersji SQL Server 2005.

+0

Dokładnie tego szukałem, dzięki. Domyślam się, że dla SQL Server 2000 będę musiał użyć kodu @ jennifer-s, prawda? – olmed0

+0

Dziękuję. Prosty i użyteczny. –

2

Oto odpowiedź znaleziona na stronie SQLServerCentral.com. Istnieje kilka różnych skryptów dostarczanych przez różnych użytkowników na tej stronie. Być może jeden z nich zapewni to, czego szukasz.

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

Oto jeden ze skryptów z 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 
+0

My generalnie zniechęcają łącza tylko odpowiedzi, ponieważ jeśli link umiera odpowiedź jest bezużyteczny. Proszę wstawić fragment lub kilka przykładów w tekście swojej odpowiedzi. – JNK

+0

Przepraszamy. Edytowane w celu włączenia jednego ze skryptów. –

+1

Należy uważać na sp_MSforeachdb; nie zawsze działa dla wszystkich baz danych (zobacz moje komentarze na ten temat tutaj http://sqlblog.com/blogs/aaron_bertrand/archive/2010/12/29/a-more-reliable-and-more-flexible-sp-msforeachdb .aspx). Napisałem kopię, którą można skopiować z: http://www.mssqltips.com/tip.asp?tip=2201 –

0

Tylko w przypadku, gdy ktoś potrzebuje obliczenia per-pliku:

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

wyniki są Mb

Powiązane problemy