none
tamanho banco de dados sql server

    Question

  • Pessoal, alguem tem uma query que me mostre o tamanho total do banco de dados?

    achei algumas mas mostra separado o arquivo de dado e log.

    Monday, May 28, 2012 2:24 PM

Answers

  • Olá,

         Segue uma query que faz o que você está precisando:

    SELECT DB.name, SUM(size) * 8 AS Tamanho FROM sys.databases DB
    INNER JOIN sys.master_files
    ON DB.database_id = sys.master_files.database_id
    GROUP BY DB.name


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    Monday, May 28, 2012 3:21 PM
    Moderator
  • Fereira,

    Tem sim, veja este exemplo:

    Use TempDB
    
    If Object_Id('TEMPDB..#RelacaoBancos') IS NOT NULL
     Begin
      Truncate Table #RelacaoBancos
     End
     Else
     Begin
      Create Table #RelacaoBancos
      (Codigo TinyInt Identity(1,1),
       DatabaseName Varchar(100),
       Space_DataFile Int,
       Space_LogFile Int)
     End
     
    DECLARE @DatabaseName varchar(30), @cmd varchar(1000)
     
    DECLARE Cursor_EspacoBancodeDados CURSOR FOR
    SELECT name FROM MASTER..SYSDATABASES
    WHERE  name NOT IN ('master', 'msdb', 'model', 'tempdb')
    and    status <> 66048
    Order By Name
     
    OPEN Cursor_EspacoBancodeDados
    FETCH NEXT FROM Cursor_EspacoBancodeDados
    INTO @DatabaseName
     
    WHILE @@FETCH_STATUS = 0
    BEGIN
       SELECT @cmd =  'SET NOCOUNT ON' + char(10) +
              'USE ' + @DatabaseName + char(10) +
    
               '
               DECLARE @SizeDataFile Int, 
               @SizeLogFile Int
               
               Set @SizeDataFile=(Select Sum(((size*8)/1024)) from SysFiles Where GroupId >= 1)
               Set @SizeLogFile=(Select Sum(((size*8)/1024)) from SysFiles Where GroupID = 0)        
             
               Insert Into TempDB..#RelacaoBancos(DatabaseName, Space_DataFile, Space_LogFile) 
                                  Values('+''''+@DatabaseName+''''+','+'@SizeDataFile'+','+'@SizeLogFile'+')'
    
     Exec(@cmd)
     
     FETCH NEXT FROM Cursor_EspacoBancodeDados
     INTO @DatabaseName
    END
     
    CLOSE Cursor_EspacoBancodeDados
    DEALLOCATE Cursor_EspacoBancodeDados
    
    
    Select Upper(DatabaseName) 'Database',
           Space_DataFile As 'Size Data File in MBs',
           Space_LogFile As 'Size Log File in MBs'
    from #RelacaoBancos


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    Monday, May 28, 2012 6:28 PM
  • valeu
    Monday, May 28, 2012 3:42 PM
  • Se a resposta foi adequada, por favor, clique na opção Marcar como Resposta

    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    Monday, May 28, 2012 3:45 PM
    Moderator

All replies

  • Olá,

         Segue uma query que faz o que você está precisando:

    SELECT DB.name, SUM(size) * 8 AS Tamanho FROM sys.databases DB
    INNER JOIN sys.master_files
    ON DB.database_id = sys.master_files.database_id
    GROUP BY DB.name


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    Monday, May 28, 2012 3:21 PM
    Moderator
  • valeu
    Monday, May 28, 2012 3:42 PM
  • Se a resposta foi adequada, por favor, clique na opção Marcar como Resposta

    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    Monday, May 28, 2012 3:45 PM
    Moderator
  • E tem como verificar da instancia toda?

    Monday, May 28, 2012 6:14 PM
  • Fereira,

    Tem sim, veja este exemplo:

    Use TempDB
    
    If Object_Id('TEMPDB..#RelacaoBancos') IS NOT NULL
     Begin
      Truncate Table #RelacaoBancos
     End
     Else
     Begin
      Create Table #RelacaoBancos
      (Codigo TinyInt Identity(1,1),
       DatabaseName Varchar(100),
       Space_DataFile Int,
       Space_LogFile Int)
     End
     
    DECLARE @DatabaseName varchar(30), @cmd varchar(1000)
     
    DECLARE Cursor_EspacoBancodeDados CURSOR FOR
    SELECT name FROM MASTER..SYSDATABASES
    WHERE  name NOT IN ('master', 'msdb', 'model', 'tempdb')
    and    status <> 66048
    Order By Name
     
    OPEN Cursor_EspacoBancodeDados
    FETCH NEXT FROM Cursor_EspacoBancodeDados
    INTO @DatabaseName
     
    WHILE @@FETCH_STATUS = 0
    BEGIN
       SELECT @cmd =  'SET NOCOUNT ON' + char(10) +
              'USE ' + @DatabaseName + char(10) +
    
               '
               DECLARE @SizeDataFile Int, 
               @SizeLogFile Int
               
               Set @SizeDataFile=(Select Sum(((size*8)/1024)) from SysFiles Where GroupId >= 1)
               Set @SizeLogFile=(Select Sum(((size*8)/1024)) from SysFiles Where GroupID = 0)        
             
               Insert Into TempDB..#RelacaoBancos(DatabaseName, Space_DataFile, Space_LogFile) 
                                  Values('+''''+@DatabaseName+''''+','+'@SizeDataFile'+','+'@SizeLogFile'+')'
    
     Exec(@cmd)
     
     FETCH NEXT FROM Cursor_EspacoBancodeDados
     INTO @DatabaseName
    END
     
    CLOSE Cursor_EspacoBancodeDados
    DEALLOCATE Cursor_EspacoBancodeDados
    
    
    Select Upper(DatabaseName) 'Database',
           Space_DataFile As 'Size Data File in MBs',
           Space_LogFile As 'Size Log File in MBs'
    from #RelacaoBancos


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    Monday, May 28, 2012 6:28 PM
  • Olá,

         Basta simplificar um pouco a mesma query:

    SELECT

    SUM(size) * 8 AS Tamanho FROM sys.databases DB

    INNER

    JOIN sys.master_files

    ON

    DB.database_id = sys.master_files.database_id


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    Monday, May 28, 2012 7:46 PM
    Moderator
  • Roberto,

    Com esta query estamos fazendo a soma total do Size de todos os bancos de dados, eu havia entendido que ele queria a soma por banco levando em consideração o arquivo de log em conjunto.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    Monday, May 28, 2012 8:00 PM
  • Pessoal, apesar de ser tópico antigo segue minha contribuição:

    Query para listar todos os bancos do SQL, com informações: Nome / Tamanho / data de criação etc. 

    EXEC sp_helpdb

    Abraços 

    Thursday, April 03, 2014 7:40 PM