segunda-feira, 21 de fevereiro de 2011

Script para limpar o logs e fazer o shirink dos bancos de dados

/*

/********************************************************/
/* Este script vai limpar o logs de todos os bancos do servidor */
/* corrente. */
/* Apenas não ocorrerá limpeza dos bancos do sistema. */
/* Acrescentei para fazer um shirink na base. */
/********************************************************/

declare @SQLString nvarchar(1000)
-- acrescimo meu
declare @SQLString2 nvarchar(1000)
-- fim
declare @database nvarchar(100)

-- Declaro o cursor para os databases
declare cr1 cursor for

-- here status not in (528, 66048) com isto este script não irá limpar o log e nem fazer o shirink das bases em off line
select name from sysdatabases where status not in (528, 66048, 66056) order by name




open cr1

-- lendo o primeiro registro
fetch next from cr1
into @database


while @@fetch_status <> -1
begin
-- seto a variavel para receber o comando para execução
set @SQLString = 'checkpoint backup log ' + ltrim(rtrim (@database)) + ' with truncate_only '
-- acrescimo meu
set @SQLString2 = 'DBCC SHRINKdatabase (' + ltrim(rtrim (@database)) + ')'
--fim
--DBCC SHRINKdatabase (CentralOperacoes)

-- acrescimo meu
print @SQLString
print @SQLString2
--fim
-- executo a limpeza do log do banco que esta o cursor
exec sp_executesql @SQLString
-- acrescimo meu
exec sp_executesql @SQLString2
-- fim

-- lendo o proximo registro
fetch next from cr1
into @database

end


close cr1
deallocate cr1
go

fonte: http://social.technet.microsoft.com/Forums/pt-BR/sqlserver2005pt/thread/1879b1d2-2cd3-4e1a-b377-8b5aa47d4974


*/

Nenhum comentário: