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

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

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

由于懒惰,我不想使用 SSMS 为 100 个数据库中的每一个手动执行此操作,而是认为我可以创建一个批量查询。

首先,这些信息可以通过视图看到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'"

我在这里遗漏了什么?

答案1

为了手动更新 sys.brickfiles,您需要使用专用管理员连接。 这可通过 SQLCMD 获得;您只需要ADMIN:在服务器名称前输入即可。

[在此插入关于小心谨慎和备份的一般警告。]

相反,您可以循环遍历数据库列表并以此方式更改自动增长设置(根据我所掌握的内容快速书写;您可能需要对其进行修改):

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

相关内容