Für die SQL Server 2005/2008 Express Edition sind maximal 4 GB pro Datenbank zulässig. Soweit mir bekannt ist, berücksichtigt das Datenbankmodul nur Daten und schließt daher Protokolldateien, nicht verwendeten Speicherplatz und Indexgröße aus.
Das Abrufen der Länge der MDF-Datei sollte im Hinblick auf die SQL Server-Einschränkung nicht die richtige Datenbankgröße ergeben. Meine Frage ist, wie man die Datenbankgröße erhält?
sql-server
tsql
Michael Damatov
quelle
quelle
sp_helpdb
Im Gegensatz zu sp_spaceused ist keine Schleife erforderlich.
quelle
Laut SQL2000-Hilfe enthält sp_spaceused Daten und Indizes.
Dieses Skript sollte Folgendes tun:
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
quelle
Klicken Sie in SQL Management Studio mit der rechten Maustaste auf eine Datenbank und wählen Sie "Eigenschaften" aus dem Kontextmenü. Schauen Sie sich die Abbildung "Größe" an.
quelle
Die beste Lösung besteht möglicherweise darin, die Größe jeder Datenbankdatei mithilfe der Ansicht sys.sysfiles unter Berücksichtigung einer Größe von 8 KB für jede Seite wie folgt zu berechnen:
USE [myDatabase] GO SELECT [size] * 8 , [filename] FROM sysfiles
Die Spalte [Feld] gibt die Größe der Datei in Seiten an ( MSDN-Verweis auf Sysfiles ).
Sie würden sehen, dass es mindestens zwei Dateien (MDF und LDF) geben wird: Die Summe dieser Dateien gibt Ihnen die richtige Größe der gesamten Datenbank ...
quelle
SELECT SUM(size)/128.0 AS size FROM sysfiles
gibt den gleichen Wert wie zurücksp_spaceused
, ist jedoch möglicherweise einfacher automatisch zu analysieren.Ich habe es immer gemocht, direkt danach zu streben:
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 )
quelle
Sie könnten auch dieses altmodische verwenden ...
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
quelle
Allgemeine Abfrage zum Überprüfen der Datenbankgröße in SQL Server, die sowohl Azure als auch On-Premises unterstützt.
Methode 1 - Verwenden der Systemansicht 'sys.database_files'
SELECT DB_NAME() AS [database_name], CONCAT(CAST(SUM( CAST( (size * 8.0/1024) AS DECIMAL(15,2) ) ) AS VARCHAR(20)),' MB') AS [database_size] FROM sys.database_files;
Methode 2 - Verwenden der gespeicherten Systemprozedur 'sp_spaceused'
quelle