-- SELECT name, database_id FROM SYS.databases WHERE name NOT IN ('master','tempdb','model','msdb','RSDB','RSDBTempDB')
--------------------------------------------------------------------------------------------------------------------------------
USE MASTER
GO
-- Declare the variables to store the values returned by FETCH.
DECLARE @DATABASE Nvarchar(100), @DBID INT, @FILENAME NVARCHAR(200), @SCRIPT NVARCHAR(MAX);
DECLARE DBCursor CURSOR FOR
SELECT D.NAME, D.database_id, F.NAME FROM SYS.databases D JOIN sys.master_files F ON D.database_id = F.database_id
WHERE F.TYPE_DESC = 'LOG' AND D.name NOT IN ('master','tempdb','model','msdb','RSDB','RSDBTempDB','ReportServer$TOKYO2','ReportServer$TOKYO2TempDB')
ORDER BY 1;
OPEN DBCursor;
FETCH NEXT FROM DBCursor
INTO @DATABASE, @DBID, @FILENAME;
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
-- Concatenate and display the current values in the variables.
SET @Database = '['+@Database+']'
-- 1.
SET @SCRIPT ='ALTER DATABASE ' +@Database+ ' SET RECOVERY SIMPLE'
PRINT @SCRIPT
EXECUTE sp_executesql @SCRIPT, N'@Database nvarchar(100)', @Database
-- 2.
--SELECT @FILENAME = name FROM sys.master_files WHERE database_id = db_id(@DATABASE) AND type = 1
-- PRINT '.....................' + @FILENAME + '.....................'
SET @SCRIPT = 'USE ' +@DATABASE+ ';'+
'DBCC SHRINKFILE ('+@FILENAME+', 1)'
PRINT @SCRIPT
EXECUTE sp_executesql @SCRIPT, N'@Database nvarchar(100)', @Database
-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM DBCursor
INTO @DATABASE, @DBID, @FILENAME;
END
CLOSE DBCursor;
DEALLOCATE DBCursor;
GO
沒有留言:
發佈留言