Иногда необходимо поменять модель восстановления всех БД на Simple и обратно или выполнить какие либо операции с множеством БД.
Предлагаю пару скриптов, которые помогут выполнить данную задачу.
В данном скрипте выполняется смена модели восстановления на SIMPLE, за исключением баз, указанных в where not name in, и усечение файла транзакций. Данный скрипт необходим на серверах разработки, когда критичность потери данных не высока, а разработчики не утруждают себя выполнением настроек баз, в результате чего журнал транзакций иногда превышает файл данных в 4-5 раз
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
--select * from [master].[sys].[databases] --кого пропустить ('master','tempdb','model','msdb') declare @name nvarchar(512) declare @cmd nvarchar(512) DECLARE @Cursor CURSOR SET @Cursor = CURSOR FOR select name from [master].[sys].[databases] where not name in ('master','tempdb','model','msdb') OPEN @Cursor FETCH NEXT FROM @Cursor INTO @name WHILE (@@FETCH_STATUS = 0) BEGIN print @name set @cmd = 'USE ['+@name+'] ALTER DATABASE '+@name+' SET RECOVERY SIMPLE DBCC SHRINKFILE (N'''+@name+ '_log'', 0, TRUNCATEONLY)' print @cmd exec (@cmd) FETCH NEXT FROM @Cursor INTO @name end |
Т.е. выполняется
‘USE [‘+@name+‘]
ALTER DATABASE ‘+@name+‘ SET RECOVERY SIMPLE
DBCC SHRINKFILE (N’»+@name+ ‘_log’‘, 0, TRUNCATEONLY)’
над всеми базами, кроме ‘master’,’tempdb’,’model’,’msdb’
Еще одна версия скрипта, которая меняет автоувеличение для файлов данных и файлов транзакций