Database
如何在 SQL Server 中更新系統數據庫
我在更新 SQL Server 2008 中的系統數據庫時遇到問題。也許有不同的方法可以做到這一點,但我基本上需要更改/刪除對一堆數據庫的某些日誌文件的增長限制。
懶惰,而不是使用 SSMS 為 100 個數據庫中的每一個手動執行此操作,我想我可以創建一個批處理查詢。
首先,通過
sys.master_files
視圖可以看到這些資訊:select database_id, name, max_size from sys.master_files
通過這個連結(“How to update system tables in SQL 2008 R2”),我發現這個視圖的相關數據庫實際上是
sys.sysbrickfiles
:但即使在連接
sqlcmd
和使用之後sp_configure 'allow updates', 1
,查詢sys.sysbrickfiles
返回"Invalid object name 'sys.sysbrickfiles'"
。我在這裡想念什麼?
為了手動更新 sys.brickfiles,您需要使用Dedicated Administrator Connection。這可以通過 SQLCMD 獲得;您只需要
ADMIN:
在伺服器名稱之前輸入。$$ Insert generic warning about being careful and having backups here. $$ 相反,您可以遍歷數據庫列表並以這種方式更改自動增長設置(根據我周圍的東西快速塗鴉;您可能需要修改它):
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