Freitag, 31. Juli 2015

Dienstag, 7. Juli 2015

SQL Server: shrink all databases



EXEC sp_msForEachDB 'PRINT ''
USE ?
GO
ALTER DATABASE ? SET RECOVERY SIMPLE
GO
DBCC SHRINKFILE(''''?'''',1)
GO
ALTER DATABASE ? SET RECOVERY FULL
GO''
'

SQL Server: shrink all transaction logs retrieving data from sysfiles



CREATE TABLE #LogFileResults (DatabaseName VARCHAR(150), LogFileName VARCHAR(150) )

DECLARE DataBaseList CURSOR FOR
SELECT name FROM SYS.sysdatabases

WHERE NAME NOT IN ('master','tempdb','model','msdb','distribution')


DECLARE @dbs VARCHAR(128)
DECLARE @cmd VARCHAR(MAX)

OPEN DataBaseList FETCH
NEXT FROM DataBaseList INTO @dbs
WHILE @@FETCH_STATUS <> -1
BEGIN

SET @cmd = 'USE [' + @dbs + '] INSERT INTO #LogFileResults(DatabaseName, LogFileName) SELECT '''
+ @dbs + ''', Name FROM sysfiles WHERE FileID=2'
EXEC(@cmd)
FETCH NEXT FROM DataBaseList INTO @dbs END

DEALLOCATE DataBaseList


DECLARE TransactionLogList CURSOR FOR
SELECT DatabaseName, LogFileName FROM #LogFileResults
DECLARE @LogFile VARCHAR(128)

OPEN TransactionLogList FETCH
NEXT FROM TransactionLogList INTO @dbs, @LogFile
WHILE @@FETCH_STATUS <> -1
BEGIN
SELECT @cmd = 'USE [' + @dbs + '] '
+ 'ALTER DATABASE [' + @dbs + '] SET RECOVERY SIMPLE WITH NO_WAIT '
+ 'DBCC SHRINKFILE(N''' + @LogFile + ''', 1) '
+ 'ALTER DATABASE [' + @dbs + '] SET RECOVERY FULL WITH NO_WAIT'
Print (@cmd)

FETCH NEXT FROM TransactionLogList INTO @dbs, @LogFile END
DEALLOCATE TransactionLogList

DROP TABLE #LogFileResults