我正在尝试使用以下代码来扩展数据库。但是我收到以下错误。如何检查尺寸(3600MB)并在必要时增长?
USING MyDatabase
ALTER DATABASE MyDatabase
MODIFY FILE (NAME = MyDatabase_data, SIZE = 3600MB)
错误:MODIFY FILE失败。指定的大小小于或等于当前大小。
更新:由于交通拥挤,我没有使用Auto Grow。由于我在这里的设置(长期无关的故事),我需要使用代码进行更改。但是,如果此代码运行多次,我会收到上述错误。在再次尝试更改之前,我需要先检查尺寸。
答案 0 :(得分:4)
数据库的大小将以
显示USE MyDatabase
EXEC sp_spaceused
查看sp_spaceused的代码(我碰巧在查看SQL 2000服务器,但SQL2005 / SQL2008也是如此)
USE master
EXEC sp_helptext 'sp_spaceused'
,相关代码是:
declare @dbsize dec(15,0)
declare @logsize dec(15)
declare @bytesperpage dec(15,0)
declare @pagesperMB dec(15,0)
select @dbsize = sum(convert(dec(15),size))
from dbo.sysfiles
where (status & 64 = 0)
select @logsize = sum(convert(dec(15),size))
from dbo.sysfiles
where (status & 64 <> 0)
select @bytesperpage = low
from master.dbo.spt_values
where number = 1
and type = 'E'
select @pagesperMB = 1048576 / @bytesperpage
select database_name = db_name(),
database_size =
ltrim(str((@dbsize + @logsize) / @pagesperMB,15,2) + ' MB')
因此您可以将大小保存到变量并再次比较您尝试设置的大小:
DECLARE @database_size bigint
SELECT @database_size = (@dbsize + @logsize) / @pagesperMB
IF @database_size < 3600
BEGIN
PRINT 'Expanding MyDatabase ...'
ALTER DATABASE MyDatabase
MODIFY FILE (NAME = MyDatabase_data, SIZE = 3600MB)
PRINT 'Expanding MyDatabase DONE'
END
ELSE
BEGIN
PRINT 'No expansion of MyDatabase required'
END
答案 1 :(得分:2)
数据库将自动增长。 如果你(无论如何MS SQL Server)右键单击数据库,属性。您可以将其设置为百分比增长,例如10%,或者固定大小,例如100Mb。
您不需要自己维护数据库大小。
答案 2 :(得分:1)
MS SQL分配的空间超出了需要。因此,您实际使用的数据库大小通常远小于分配的大小。
MS SQL分配的空间超出了所需的空间,因为分配更多数据非常昂贵,而且定期执行它而不是每次写入数据库都更有效。
如果要一次更改分配的空间量,可以使用 FILEGROWTH 参数设置数据库中所需的文件增长类型。
值:
ALTER DATABASE [databasename] MODIFY FILE ( NAME = N'databasename', FILEGROWTH = 1GB )
要释放额外分配的空间,您可以执行DBCC SHRINKDATABASE
要获取数据库的实际大小,您可以执行以下操作:
SELECT size FROM sys.database_files WHERE name = 'databasename'
要获取数据库日志的实际大小,您可以执行以下操作:
SELECT size FROM sys.database_files WHERE name = 'databasename_log'
答案 3 :(得分:1)
获取服务器上所有数据库文件的大小(和其他信息)(显然你可以过滤它):
select * from sys.database_files