patternsqlModerate
Set simple recovery mode and shrink log files for all user created databases
Viewed 0 times
simpledatabaseslogallusermodecreatedshrinkrecoveryfiles
Problem
I hope you can point me in the right direction.
I'm not a frequent user of T-SQL, but I did some googleing, and found the script below. I corrected the script a bit.
I want the script to:
The script:
I'm not a frequent user of T-SQL, but I did some googleing, and found the script below. I corrected the script a bit.
I want the script to:
- To select all databases, except the system DBs.
- To set recovery to simple.
- To shrink the log files for every db(.ldf), except the system db
The script:
USE MASTER
declare
@isql varchar(2000),
@dbname varchar(64)
declare c1 cursor for select name from master..sysdatabases where name not in ('master','model','msdb','tempdb','ReportServer','ReportServerTempDB')
open c1
fetch next from c1 into @dbname
While @@fetch_status <> -1
begin
select @isql = 'ALTER DATABASE @dbname SET RECOVERY SIMPLE'
select @isql = replace(@isql,'@dbname',@dbname)
print @isql
exec(@isql)
select @isql='USE @dbname checkpoint'
select @isql = replace(@isql,'@dbname',@dbname)
print @isql
exec(@isql)
select @isql='DBCC SHRINKFILE @dbname.ldf'
select @isql = replace(@isql,'@dbname',@dbname)
print @isql
exec(@isql)
fetch next from c1 into @dbname
end
close c1
deallocate c1Solution
Use Script to Shrink Log files of all databases other than the system DBs.
USE MASTER
GO
SET QUOTED_IDENTIFIER ON
GO
SET ARITHABORT ON
GO
DECLARE @DBName NVARCHAR(255),@LogicalFileName NVARCHAR(255),@DBRecoveryDesc Varchar(200)
DECLARE DatabaseList CURSOR
FOR
SELECT name,recovery_model_desc
FROM sys.databases
WHERE state_desc = 'ONLINE'
AND is_read_only = 0
and database_id>4
ORDER BY name
OPEN DatabaseList
FETCH NEXT FROM DatabaseList INTO @DBName,@DBRecoveryDesc
WHILE @@FETCH_STATUS = 0
BEGIN
SET @LogicalFileName=(SELECT top 1 name FROM sys.master_files AS mf WHERE DB_NAME(database_id)=@DBName and type_desc='LOG')
If @DBRecoveryDesc='Full'
Begin
Print('Use ['+@DBName+']
GO
ALTER DATABASE ['+@DBName+'] SET RECOVERY SIMPLE WITH NO_WAIT
GO
DBCC SHRINKFILE ('''+@LogicalFileName+''',10)
GO
ALTER DATABASE ['+@DBName+'] SET RECOVERY FULL WITH NO_WAIT
GO ')
Print '----------------------------------------------------------- '
END
If @DBRecoveryDesc='Simple'
Begin
Print('Use ['+@DBName+']
GO
DBCC SHRINKFILE ('''+@LogicalFileName+''',10)
GO
')
Print '----------------------------------------------------------- '
END
FETCH NEXT FROM DatabaseList INTO @DBName,@DBRecoveryDesc
END
CLOSE DatabaseList
DEALLOCATE DatabaseListCode Snippets
USE MASTER
GO
SET QUOTED_IDENTIFIER ON
GO
SET ARITHABORT ON
GO
DECLARE @DBName NVARCHAR(255),@LogicalFileName NVARCHAR(255),@DBRecoveryDesc Varchar(200)
DECLARE DatabaseList CURSOR
FOR
SELECT name,recovery_model_desc
FROM sys.databases
WHERE state_desc = 'ONLINE'
AND is_read_only = 0
and database_id>4
ORDER BY name
OPEN DatabaseList
FETCH NEXT FROM DatabaseList INTO @DBName,@DBRecoveryDesc
WHILE @@FETCH_STATUS = 0
BEGIN
SET @LogicalFileName=(SELECT top 1 name FROM sys.master_files AS mf WHERE DB_NAME(database_id)=@DBName and type_desc='LOG')
If @DBRecoveryDesc='Full'
Begin
Print('Use ['+@DBName+']
GO
ALTER DATABASE ['+@DBName+'] SET RECOVERY SIMPLE WITH NO_WAIT
GO
DBCC SHRINKFILE ('''+@LogicalFileName+''',10)
GO
ALTER DATABASE ['+@DBName+'] SET RECOVERY FULL WITH NO_WAIT
GO ')
Print '----------------------------------------------------------- '
END
If @DBRecoveryDesc='Simple'
Begin
Print('Use ['+@DBName+']
GO
DBCC SHRINKFILE ('''+@LogicalFileName+''',10)
GO
')
Print '----------------------------------------------------------- '
END
FETCH NEXT FROM DatabaseList INTO @DBName,@DBRecoveryDesc
END
CLOSE DatabaseList
DEALLOCATE DatabaseListContext
StackExchange Database Administrators Q#68991, answer score: 13
Revisions (0)
No revisions yet.