UncleFather » 01 апр 2021 17:44, Чт
Задача:
Необходимо выполнить изменение модели восстановления на полную для всех (кроме системных) пользовательских баз с неполной моделью восстановления, после чего сжать эти базы данных и файлы журналов БД. Имя файла журнала не обязательно совпадает с именем самой базы данных.
Решение:
Код: Выделить всё
USE MASTER
declare
@isql varchar(2000),
@datbas varchar(128)
declare c1 cursor for
SELECT d.name as datbas
FROM sys.databases d
where recovery_model_desc != 'FULL'
and d.name not in ('master','model','msdb','tempdb')
open c1
fetch next from c1 into @datbas
While @@fetch_status <> -1
begin
select @isql = 'ALTER DATABASE ' + @datbas + ' SET RECOVERY FULL'
print @isql
exec(@isql)
fetch next from c1 into @datbas
end
close c1
deallocate c1
GO
USE MASTER
declare
@isql varchar(2000),
@dbname varchar(64),
@logfile varchar(128)
declare c1 cursor for
SELECT d.name, mf.name as logfile
FROM sys.master_files mf
inner join sys.databases d
on mf.database_id = d.database_id
where recovery_model_desc = 'FULL'
and d.name not in ('master','model','msdb','tempdb')
and mf.type_desc = 'LOG'
open c1
fetch next from c1 into @dbname, @logfile
While @@fetch_status <> -1
begin
select @isql='USE ' + @dbname + ' checkpoint'
print @isql
exec(@isql)
select @isql='USE ' + @dbname + ' DBCC SHRINKFILE (' + @logfile + ', 1)'
print @isql
exec(@isql)
fetch next from c1 into @dbname, @logfile
end
close c1
deallocate c1
GO
Скачать SQL скрипт можно здесь:
[b][size=150]Задача:[/size][/b]
Необходимо выполнить изменение модели восстановления на [b][i]полную[/i][/b] для всех (кроме системных) пользовательских баз с неполной моделью восстановления, после чего сжать эти базы данных и файлы журналов БД. Имя файла журнала не обязательно совпадает с именем самой базы данных.
[hr][/hr]
[b][size=150]Решение:[/size][/b]
[spoiler title=Код на SQL][code]USE MASTER
declare
@isql varchar(2000),
@datbas varchar(128)
declare c1 cursor for
SELECT d.name as datbas
FROM sys.databases d
where recovery_model_desc != 'FULL'
and d.name not in ('master','model','msdb','tempdb')
open c1
fetch next from c1 into @datbas
While @@fetch_status <> -1
begin
select @isql = 'ALTER DATABASE ' + @datbas + ' SET RECOVERY FULL'
print @isql
exec(@isql)
fetch next from c1 into @datbas
end
close c1
deallocate c1
GO
USE MASTER
declare
@isql varchar(2000),
@dbname varchar(64),
@logfile varchar(128)
declare c1 cursor for
SELECT d.name, mf.name as logfile
FROM sys.master_files mf
inner join sys.databases d
on mf.database_id = d.database_id
where recovery_model_desc = 'FULL'
and d.name not in ('master','model','msdb','tempdb')
and mf.type_desc = 'LOG'
open c1
fetch next from c1 into @dbname, @logfile
While @@fetch_status <> -1
begin
select @isql='USE ' + @dbname + ' checkpoint'
print @isql
exec(@isql)
select @isql='USE ' + @dbname + ' DBCC SHRINKFILE (' + @logfile + ', 1)'
print @isql
exec(@isql)
fetch next from c1 into @dbname, @logfile
end
close c1
deallocate c1
GO
[/code][/spoiler]
Скачать SQL скрипт можно здесь: [attachment=0]Chg2Full&Shrink.rar[/attachment]