Определение размера базы данных SQL Server
SQL Server 2005/2008 Express edition имеет ограничение 4 ГБ на базу данных. Насколько мне известно, компонент database engine рассматривает только данные, исключая файлы журналов, неиспользуемое пространство и размер индекса.
получение длины файла MDF не должно давать правильный размер базы данных с точки зрения ограничения SQL Server. Мой вопрос, Как получить размер базы данных?
7 ответов:
согласно справке SQL2000, процедура sp_spaceused включает данные и индексы.
этот скрипт должен делать:
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
в SQL Management Studio щелкните правой кнопкой мыши на базе данных и выберите "Свойства" из контекстного меню. Посмотрите на цифру "размер".
лучшее решение, возможно, вычислить размер каждого файла базы данных, используя sys.sysfiles view, учитывая размер 8 КБ для каждой страницы, следующим образом:
USE [myDatabase] GO SELECT [size] * 8 , [filename] FROM sysfilesстолбец [field] представляет размер файла, в страницах ( MSDN ссылка на sysfiles).
вы увидите, что будет по крайней мере два файла (MDF и LDF): сумма этих файлов даст вам правильный размер всей базы данных...
Мне всегда нравилось идти за ним прямо:
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 )
вы также можете использовать этот старомодный...
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
Comments