2015年7月15日星期三

TSQL - Shrink Files

-- 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

沒有留言:

發佈留言