2017-09-27 80 views
1

我想重新设置数据库的日志文件的初始大小,因为在设置数据库时它会错过设置非常大的值(40G)。而当我想缩小它时,它的大小将等于初始大小。SQLServer alter database修改文件问题

我试图用这个SQL与SIZE参数设置:

ALTER DATABASE [DBNAME] MODIFY FILE (NAME = N'DBNAME_log', SIZE=1MB, MAXSIZE = 2048GB) 
GO 

不幸的是,只得到错误信息:

MODIFY FILE失败。指定的大小小于或等于当前的 大小。

似乎尺寸参数需要大于当前尺寸。

这里是问题总结:

  1. 如何重新设置数据库的文件初始大小?无论当前文件大小如何,它都足够小。

  2. 我知道我的数据库名称[数据库],并能得到与其相关的日志文件名使用SQL:

    DECLARE @logname NVARCHAR(100); SELECT @logname = name FROM sys.database_files WHERE type_desc = 'LOG'

但为什么会使用结果@logname不输入数据库名称,如:

ALTER DATABASE [OrderTracker] MODIFY FILE (*NAME = @logname*, size=1MB, MAXSIZE = 2048GB) 
+0

你以前做一个备份?备份应该清空日志。 (种) –

+0

你看这个吗? https://docs.microsoft.com/en-us/sql/relational-databases/logs/manage-the-size-of-the-transaction-log-file –

+0

我将数据库设置为SIMPLE模式并使用SQL收缩:DBCC SHRINKFILE(@logname,TRUNCATEONLY);它确实较小,但等于或大于其初始尺寸。 –

回答

0

如何重新设置数据库的文件初始大小?它需要足够小,无论当前文件大小

的ALTER DATABASE与修改文件的命令只能使文件大小大,所以如果你需要让文件更小,你需要使用DBCC SHRINKFILE。

我不会推荐萎缩,但如果没有办法,你可以使用命令像下面

dbcc shrinkfile('test_log_log',1)--we are asking to shrink log to 1 mb 

如果你已经采取的备份和日志文件是空的,VLF位于日志的结尾不活动(2被激活,0是无效的)..然后你可以收缩

可以使用dbcc loginfo知道VLF的状态,这应该在同一个数据库中运行

+0

谢谢。我试过,无论是DBCC SHRINKFILE(@logname,TRUNCATEONLY);也不DBCC SHRINKFILE(@logname,1MB);成功了!只更改VIA GUI的初始大小,但如何通过SQL进行更改?只能一个一个手动重新设置对我来说是很糟糕的。 –