Database

如何在 SQL Server 中更新系統數據庫

  • February 9, 2015

我在更新 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

引用自:https://serverfault.com/questions/665849