Set database owner = ‘sa’
Set RECOVERY = Simple & Shrink databases
1
2print '-- SQL Script to fix owner and Recouvery mode'
3print ''
4SET NOCOUNT ON;
5Declare @sql nvarchar(max);
6declare @dbname nvarchar(255);
7BEGIN TRY drop table #db; END TRY BEGIN CATCH END CATCH;
8SELECT * INTO #db
9FROM sys.databases f
10WHERE f.state_desc = 'ONLINE'
11 AND (f.database_id > 4)
12
13while ((select count(*) from #db)>0)
14BEGIN
15
16 Set @sql = '';
17 SELECT top 1
18 @dbname = name,
19 @sql =
20
21 -- change db owner to SA
22 + case when suser_sname(f.owner_sid) = 'sa' THEN '' ELSE 'USE ['+ f.name+']; EXEC dbo.sp_changedbowner @loginame = N''sa'', @map = false;' + CHAR(13) + CHAR(10) END
23
24 -- SET RECOVERY SIMPLE
25 + CASE when f.recovery_model_desc = 'SIMPLE' THEN '' ELSE +'USE [MASTER]; '+ 'ALTER DATABASE ['+ f.name+'] SET RECOVERY SIMPLE WITH NO_WAIT;'+ CHAR(13) + CHAR(10)
26 +'USE [MASTER]; '+'DBCC SHRINKDATABASE(N'''+ f.name+''');' + CHAR(13) + CHAR(10) END
27 FROM #db f
28 ORDER BY f.name;
29
30 if NOT(@sql = '')
31 SET @sql = 'PRINT ''Database:'+@dbname+''';' + CHAR(13) + CHAR(10)+@sql;
32
33 print @sql;
34 --exec (@sql);
35
36 delete from #db where name = @dbname;
37
38END
Create script to change owner
1
2PRINT '---------------------------';
3PRINT '-- SQL Script to fix owner to "sa"';
4PRINT '-- '+CAST(getdate() as nvarchar(100));
5PRINT '---------------------------';
6SET NOCOUNT ON;
7DECLARE @sql nvarchar(MAX);
8DECLARE @dbname nvarchar(255);
9BEGIN TRY DROP TABLE #db; END TRY BEGIN CATCH END CATCH;
10SELECT * INTO #db FROM sys.databases f WHERE f.state_desc = 'ONLINE'
11AND (f.database_id > 4)
12
13DECLARE @sqltemplate nvarchar(MAX);
14SET @sqltemplate = '
15PRINT ''-- Database "?" '';
16IF (EXISTS(SELECT * FROM sys.databases WHERE NOT(suser_sname(owner_sid) = ''sa'') AND [name] = ''?'' ))
17BEGIN
18 PRINT ''---- Fix owner user to "sa"''
19 USE [?];EXEC dbo.sp_changedbowner @loginame = N''sa'',@map=false;
20END;
21'
22PRINT 'PRINT ''----------------------'';';
23PRINT 'PRINT ''-- Script to fix owner to "sa"'';';
24PRINT 'PRINT ''----------------------'';';
25WHILE ((SELECT count(*) FROM #db)>0) BEGIN
26SET @sql = '';
27SELECT TOP 1 @dbname = name , @sql = REPLACE(@sqltemplate, '?', name) FROM #db f ORDER BY f.name;
28DELETE FROM #db WHERE name = @dbname;
29PRINT @sql;
30END
Sql Script to set recovery mode full.
1
2PRINT '---------------------------';
3PRINT '-- SQL Script to Set Recovery Mode FULL';
4PRINT '-- '+CAST(getdate() as nvarchar(100));
5PRINT '---------------------------';
6SET NOCOUNT ON;
7DECLARE @sql nvarchar(MAX);
8DECLARE @dbname nvarchar(255);
9BEGIN TRY DROP TABLE #db; END TRY BEGIN CATCH END CATCH;
10SELECT * INTO #db FROM sys.databases f WHERE f.state_desc = 'ONLINE'
11AND (f.database_id > 4)
12
13DECLARE @sqltemplate nvarchar(MAX);
14SET @sqltemplate = '
15PRINT ''-- Database "?" '';
16IF (EXISTS(SELECT * FROM sys.databases WHERE NOT(recovery_model_desc = ''FULL'') AND [name] = ''?'' ))
17BEGIN
18 PRINT ''---- Fix recovery mode full''
19 USE Master;ALTER DATABASE [?] SET RECOVERY FULL WITH NO_WAIT;;
20END;
21'
22PRINT 'PRINT ''----------------------'';';
23PRINT 'PRINT ''-- Script to Set Recovery Mode FULL'';';
24PRINT 'PRINT ''----------------------'';';
25WHILE ((SELECT count(*) FROM #db)>0) BEGIN
26SET @sql = '';
27SELECT TOP 1 @dbname = name , @sql = REPLACE(@sqltemplate, '?', name) FROM #db f ORDER BY f.name;
28DELETE FROM #db WHERE name = @dbname;
29PRINT @sql;
30END
Comments