tablas - Determinar el tamaño de la base de datos de SQL Server
tamaño de indices sql server (7)
De acuerdo con la ayuda de SQL2000, sp_spaceused incluye datos e índices.
Este script debería hacer:
CREATE TABLE #t (name SYSNAME, rows CHAR(11), reserved VARCHAR(18),
data VARCHAR(18), index_size VARCHAR(18), unused VARCHAR(18))
EXEC sp_msforeachtable ''INSERT INTO #t EXEC sp_spaceused ''''?''''''
-- SELECT * FROM #t ORDER BY name
-- SELECT name, CONVERT(INT, SUBSTRING(data, 1, LEN(data)-3)) FROM #t ORDER BY name
SELECT SUM(CONVERT(INT, SUBSTRING(data, 1, LEN(data)-3))) FROM #t
DROP TABLE #t
La edición Express de SQL Server 2005/2008 tiene una limitación de 4 GB por base de datos. Por lo que sé, el motor de base de datos considera solo los datos, excluyendo así los archivos de registro, el espacio no utilizado y el tamaño del índice.
Obtener la longitud del archivo MDF no debe dar el tamaño correcto de la base de datos en términos de limitación de SQL Server. Mi pregunta es cómo obtener el tamaño de la base de datos?
En SQL Management Studio, haga clic derecho en una base de datos y seleccione "Propiedades" en el menú contextual. Mire la figura de "Tamaño".
La mejor solución es tal vez calcular el tamaño de cada archivo de base de datos, utilizando la vista sys.sysfiles, considerando un tamaño de 8 KB para cada página, de la siguiente manera:
USE [myDatabase]
GO
SELECT
[size] * 8
, [filename]
FROM sysfiles
La columna [field] representa el tamaño del archivo, en páginas ( Referencia de MSDN a sysfiles ).
Verá que habrá al menos dos archivos (MDF y LDF): la suma de estos archivos le dará el tamaño correcto de toda la base de datos ...
Podrías usar este anticuado también ...
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
DECLARE @iCount int, @iMax int, @DatabaseName varchar(200), @SQL varchar (8000)
Select NAME, DBID, crdate, filename, version
INTO #TEMP
from MAster..SYSDatabASES
SELECT @iCount = Count(DBID) FROM #TEMP
Select @SQL=''Create Table ##iFile1 ( DBName varchar( 200) NULL, Fileid INT, FileGroup int, TotalExtents INT , USedExtents INT ,
Name varchar(100), vFile varchar (300), AllocatedSpace int NUll, UsedSpace int Null, PercentageFree int Null ) ''+ char(10)
exec (@SQL)
Create Table ##iTotals ( ServerName varchar(100), DBName varchar( 200) NULL, FileType varchar(10),Fileid INT, FileGroup int, TotalExtents INT , USedExtents INT ,
Name varchar(100), vFile varchar (300), AllocatedSpace int NUll, UsedSpace int Null, PercentageFree int Null )
WHILE @iCount>0
BEGIN
SELECT @iMax =Max(dbid) FROM #TEMP
Select @DatabaseName = Name FROM #TEMP where dbid =@iMax
SELECT @SQL = ''INSERT INTO ##iFile1(Fileid , FileGroup , TotalExtents , USedExtents , Name , vFile)
EXEC (''''USE ['' + @DatabaseName + ''] DBCC showfilestats'''') '' + char(10)
Print (@SQL)
EXEC (@SQL)
SELECT @SQL = ''UPDATE ##iFile1 SET DBName =''''''+ @DatabaseName +'''''' WHERE DBName IS NULL''
EXEC (@SQL)
DELETE FROM #TEMP WHERE dbid =@iMax
Select @iCount =@iCount -1
END
UPDATE ##iFile1
SET AllocatedSpace = (TotalExtents * 64.0 / 1024.0 ), UsedSpace =(USedExtents * 64.0 / 1024.0 )
UPDATE ##iFile1
SET PercentageFree = 100-Convert(float,UsedSpace)/Convert(float,AllocatedSpace )* 100
WHERE USEDSPACE>0
CREATE TABLE #logspace (
DBName varchar( 100),
LogSize float,
PrcntUsed float,
status int
)
INSERT INTO #logspace
EXEC (''DBCC sqlperf( logspace)'')
INSERT INTO ##iTotals(ServerName, DBName, FileType,Name, vFile,PercentageFree,AllocatedSpace)
select @@ServerName ,DBNAME, ''Data'' as FileType,Name, vFile, PercentageFree , AllocatedSpace
from ##iFile1
UNION
select @@ServerName ,DBNAME, ''Log'' as FileType ,DBName,'''' as vFile ,PrcntUsed , LogSize
from #logspace
Select * from ##iTotals
select ServerName ,DBNAME, FileType, Sum( AllocatedSpace) as AllocatedSpaceMB
from ##iTotals
Group By ServerName ,DBNAME, FileType
Order By ServerName ,DBNAME, FileType
select ServerName ,DBNAME, Sum( AllocatedSpace) as AllocatedSpaceMB
from ##iTotals
Group By ServerName ,DBNAME
Order By ServerName ,DBNAME
drop table ##iFile1
drop table #logspace
drop table #TEMP
drop table ##iTotals
Siempre me gustó ir directamente después:
SELECT
DB_NAME( dbid ) AS DatabaseName,
CAST( ( SUM( size ) * 8 ) / ( 1024.0 * 1024.0 ) AS decimal( 10, 2 ) ) AS DbSizeGb
FROM
sys.sysaltfiles
GROUP BY
DB_NAME( dbid )
sp_helpdb
no es necesario bucle, a diferencia de sp_spaceused.
sp_spaceused