Monday, January 18, 2010

Shrink User Databases Transaction log

DECLARE @state VARCHAR(30)
DECLARE @DbName NVARCHAR(200)
DECLARE @DBLOGNAME NCHAR(100)
DECLARE @String NVARCHAR(1000)
DECLARE @String1 NVARCHAR(1000)
DECLARE @databases TABLE (DBName NVARCHAR(200), DBLOGNAME VARCHAR(100))
SET NOCOUNT ON
-- get status for databases
INSERT @databases
select sysdatabases.name DBNAME, sys.master_files.name DBLOGNAME
from sysdatabases inner join sys.master_files on sysdatabases.dbid=sys.master_files.database_id
where sysdatabases.name not in('master','tempdb','model','msdb')
and sys.master_files.type=1
order by 1


-- iterate through mirrored databases and send email alert
WHILE EXISTS (SELECT TOP 1 DBNAME FROM @databases WHERE DBLOGNAME IS NOT NULL)
BEGIN
SELECT TOP 1 @DBName = DBNAME, @DBLOGNAME = DBLOGNAME
FROM @databases

SET @String1 ='USE ['+@DBNAME +']' ++CHAR(13) + CHAR(10)
print @String1
EXECUTE sp_executesql @String1
SET @String1 ='Alter Database ['+@DBNAME +'] set recovery simple;'+CHAR(13) + CHAR(10)
print @String1
--EXECUTE sp_executesql @String1
SET @String1 ='USE ['+@DBNAME +']' ++CHAR(13) + CHAR(10)
print @String1
--EXECUTE sp_executesql @String1
--+ CHAR(13) + CHAR(10) +'USE ['+@DBNAME +']'+CHAR(13) + CHAR(10) +' GO'+CHAR(13) + CHAR(10)
SET @String1 =N'DBCC Shrinkfile (N'''+ltrim(rtrim(@dblogname))+''',0,TRUNCATEONLY)'
print @String1
--EXECUTE sp_executesql @String1


SET @String1 =CHAR(13) + CHAR(10) +'Alter database ['+@DBNAME +'] set recovery full;'+CHAR(13) + CHAR(10)
print @String1
--EXECUTE sp_executesql @String1

DELETE FROM @databases WHERE DBNAME = @DBNAME

END

No comments:

Post a Comment