SQL Server 2008: How to query all databases sizes?

后端 未结 15 1344
伪装坚强ぢ
伪装坚强ぢ 2021-01-29 18:08

I have MS SQL 2008 R2, 500 databases. What is the most efficient, easiest and \'modern\' way to query all databases sizes.

The output should have columns:

15条回答
  •  北恋
    北恋 (楼主)
    2021-01-29 18:46

    please find more deatils or download the script from below link https://gallery.technet.microsoft.com/SIZE-OF-ALL-DATABASES-IN-0337f6d5#content

     DECLARE @spacetable table
     (
     database_name varchar(50) ,
     total_size_data int,
     space_util_data int,
     space_data_left int,
     percent_fill_data float,
     total_size_data_log int,
     space_util_log int,
     space_log_left int,
     percent_fill_log char(50),
     [total db size] int,
     [total size used] int,
     [total size left] int
     )
     insert into  @spacetable
     EXECUTE master.sys.sp_MSforeachdb 'USE [?];
     select x.[DATABASE NAME],x.[total size data],x.[space util],x.[total size data]-x.[space util] [space left data],
     x.[percent fill],y.[total size log],y.[space util],
     y.[total size log]-y.[space util] [space left log],y.[percent fill],
     y.[total size log]+x.[total size data] ''total db size''
     ,x.[space util]+y.[space util] ''total size used'',
     (y.[total size log]+x.[total size data])-(y.[space util]+x.[space util]) ''total size left''
      from (select DB_NAME() ''DATABASE NAME'',
     sum(size*8/1024) ''total size data'',sum(FILEPROPERTY(name,''SpaceUsed'')*8/1024) ''space util''
     ,case when sum(size*8/1024)=0 then ''less than 1% used'' else
     substring(cast((sum(FILEPROPERTY(name,''SpaceUsed''))*1.0*100/sum(size)) as CHAR(50)),1,6) end ''percent fill''
     from sys.master_files where database_id=DB_ID(DB_NAME())  and  type=0
     group by type_desc  ) as x ,
     (select 
     sum(size*8/1024) ''total size log'',sum(FILEPROPERTY(name,''SpaceUsed'')*8/1024) ''space util''
     ,case when sum(size*8/1024)=0 then ''less than 1% used'' else
     substring(cast((sum(FILEPROPERTY(name,''SpaceUsed''))*1.0*100/sum(size)) as CHAR(50)),1,6) end ''percent fill''
     from sys.master_files where database_id=DB_ID(DB_NAME())  and  type=1
     group by type_desc  )y'
     select * from @spacetable
     order by database_name
    

提交回复
热议问题