如何更新SQL Server中的系统数据库

我在更新SQL Server 2008中的系统数据库时遇到问题。也许有不同的方式来做到这一点,但我基本上需要更改/删除一些数据库的某些日志文件的增长限制。

懒惰,而不是手动为每个100个数据库使用SSMS,我想我可以创build一个批量查询。

首先,通过sys.master_files视图可以看到这些信息:

 select database_id, name, max_size from sys.master_files 

通过这个链接(“如何更新SQL 2008 R2中的系统表”) ,我发现这个视图的相关数据库实际上是sys.sysbrickfiles

执行计划显示实际的数据库

但是,即使连接sqlcmd并使用sp_configure 'allow updates', 1 ,查询sys.sysbrickfiles返回"Invalid object name 'sys.sysbrickfiles'"

我在这里错过了什么?

为了手动更新sys.brickfiles,您需要使用专用pipe理员连接 。 这可以通过SQLCMD获得; 你只需要inputADMIN:在servername之前。

[插入关于小心和备份在这里的一般警告。]

相反,你可以遍历数据库列表并改变自动增长设置(根据我所处的东西快速涂鸦,你可能需要修改它):

 declare @SQL nvarchar(max) @RowsToProcess int, @CurrentRow int = 0, @dbname nvarchar(80) CREATE TABLE #dblist(RowID int not null identity(1,1), dbname nvarchar(50) ) INSERT into #dblist (dbname) SELECT name FROM sys.databases where name not in ('master','msdb','model','tempdb') SET @RowsToProcess=@@ROWCOUNT WHILE @CurrentRow<@RowsToProcess BEGIN SET @CurrentRow=@CurrentRow+1 SELECT @dbname=dbname FROM #dblist WHERE RowID=@CurrentRow set @SQL='ALTER DATABASE [' + @DBName + '] MODIFY FILE (NAME=N''' + @DBName + '_Log'', FILEGROWTH=20MB);' print @SQL EXEC SP_EXECUTESQL @SQL END drop table #dblist