25 March 2010

Tronca i log e compatta tutti i database (Sql2005)

Versione sia per Sql2000 che per Sql2005:
-- TRONCA I LOG E COMPATTA TUTTI I DATABASE
set nocount on


USE master
GO

EXEC sp_msForEachDB '
BACKUP LOG [?] WITH TRUNCATE_ONLY
DBCC SHRINKDATABASE (''?'', TRUNCATEONLY) WITH NO_INFOMSGS
'

Versione con cursore per Sql2005:
-- TRONCA I LOG E COMPATTA TUTTI I DATABASE ONLINE
-- VERSIONE PER SQL 2005
USE master
GO

set nocount on

declare	cur cursor for
select	name
from	sys.databases
where	database_id > 4 and
		state_desc = 'ONLINE'
order by 
		name

open cur

declare @nomeDB as nvarchar(255)

fetch next from cur into @nomedb

while @@fetch_status = 0 
begin
	print 'Processing ' + @nomeDB + '...'
	
	BACKUP LOG @nomeDB WITH TRUNCATE_ONLY
	DBCC SHRINKDATABASE (@nomeDB, TRUNCATEONLY) WITH NO_INFOMSGS

	fetch next from cur into @nomedb
end


close cur
deallocate cur

print ''
print 'Done.'