Change FULL Recovery Model to SIMPLE and Shrink Log
SELECT sys.databases.name ,
SUM(size) * 8 / 1024 AS [Total_disk_pace_MB]
FROM sys.databases
JOIN sys.master_files ON sys.databases.database_id = sys.master_files.database_id
GROUP BY sys.databases.name
ORDER BY 2 DESC ,
sys.databases.name;
USE master;
DECLARE @isql VARCHAR(2000) ,
@dbname VARCHAR(64) ,
@logfile VARCHAR(128);
DECLARE c1 CURSOR
FOR
SELECT d.name ,
mf.name AS logfile--, physical_name AS current_file_location, size
FROM sys.master_files mf
INNER JOIN sys.databases d ON mf.database_id = d.database_id
WHERE recovery_model_desc <> 'SIMPLE'
AND d.name NOT IN ( 'master', 'model', 'msdb', 'tempdb' )
AND mf.type_desc = 'LOG'
AND d.state_desc = 'ONLINE';
OPEN c1;
FETCH NEXT FROM c1 INTO @dbname, @logfile;
WHILE @@fetch_status <> -1
BEGIN
SELECT @isql = 'ALTER DATABASE ' + @dbname + CHAR(13)
+ ' SET RECOVERY SIMPLE';
PRINT @isql;
EXEC(@isql);
SELECT @isql = 'USE ' + @dbname + CHAR(13) + ' checkpoint';
PRINT @isql;
EXEC(@isql);
SELECT @isql = 'USE ' + @dbname + CHAR(13) + ' DBCC SHRINKFILE ('
+ @logfile + ', 1)';
PRINT @isql;
EXEC(@isql);
FETCH NEXT FROM c1 INTO @dbname, @logfile;
END;
CLOSE c1;
DEALLOCATE c1;
SELECT sys.databases.name ,
SUM(size) * 8 / 1024 AS [Total_disk_pace_MB]
FROM sys.databases
JOIN sys.master_files ON sys.databases.database_id = sys.master_files.database_id
GROUP BY sys.databases.name
ORDER BY 2 DESC ,
sys.databases.name;
Truncate Log – Rebuild Indexes – Statistics
/******************************************************************************************************
** Project: Database
** Issue: Backup and Shrink
** Desc: Backup and Shrink log and Rebuild Indexes
** Desc: Change the Database Name or Run it on Current Database where you want to Truncate Log and Rebuild
** Auth: Raju
** Date: 2015-02-26 Created
********************************************************************************************************/
SET NOCOUNT ON
SET ARITHABORT ON
SET CONCAT_NULL_YIELDS_NULL ON
SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
SET NUMERIC_ROUNDABORT OFF
SET XACT_ABORT ON
-----------BEGIN SQL SCRIPT HEADER-------------------
DECLARE @DB_NAME VARCHAR(128)
SET @DB_NAME = ( SELECT DB_NAME(dbid)
FROM master..sysprocesses
WHERE spid = @@SPID
)
PRINT '-----------------------------------------------------------------------'
PRINT '-----START RAPID DEVELOPEMENT SQL SCRIPT--------'
PRINT '-----SCRIPT RAN ON DB: ' + @DB_NAME
PRINT '-----SCRIPT START TIME: '
+ CONVERT(VARCHAR, CONVERT(DATETIME, GETDATE()), 121)
PRINT '-----MachineName : ' + CAST(SERVERPROPERTY('MachineName') AS VARCHAR)
PRINT '-----SQL Instance : ' + CAST(@@SERVERNAME AS VARCHAR)
PRINT '-----DB User : ' + CURRENT_USER
PRINT '-----System User : ' + SYSTEM_USER
PRINT '-----Host : ' + HOST_NAME()
PRINT '-----Application : ' + APP_NAME()
PRINT '-----TranCount : ' + CAST (@@trancount AS VARCHAR)
PRINT '-----------------------------------------------------------------------'
----------------END SQL SCRIPT HEADER---------------------
-- Standard Variables Declarations
DECLARE @ErrorMessage NVARCHAR(4000) ,
@ErrorNumber INT ,
@ErrorSeverity INT ,
@ErrorState INT ,
@ErrorLine INT ,
@ErrorProcedure NVARCHAR(200) ,
@ErrParameter NVARCHAR(255) ,
@ErrParameterValue NVARCHAR(255)
-- Script Specific Variables Declarations
DECLARE @StartTime DATETIME2 ,
@EndTime DATETIME2
SELECT @StartTime = GETDATE()
-- Script Block Start
DECLARE @pDatabaseName sysname ,
@pLogicalFileName sysname ,
@pSQLStmt NVARCHAR(MAX),
@pRecoveryModelDesc sysname
SELECT @pDatabaseName = DB_NAME();
SELECT @pLogicalFileName = name
FROM sys.master_files
WHERE database_id = DB_ID()
AND type = 1
PRINT 'Before Database Size'
SELECT database_id ,
DB_NAME(database_id) AS DatabaseName ,
type_desc ,
name ,
( size * 8 ) / 1000 AS SizeinKB ,
physical_name
FROM sys.master_files
WHERE database_id = DB_ID()
SELECT @pRecoveryModelDesc = recovery_model_desc FROM sys.databases
WHERE database_id = DB_ID()
PRINT 'Backup Log'
SELECT @pSQLStmt = ' BACKUP LOG ' + @pDatabaseName + '
TO DISK = ''nul:'' '
PRINT 'BackupLogSQLStmt ' + @pSQLStmt
-- Backup Log only for Full Recovery Model
IF @pRecoveryModelDesc = 'FULL'
EXEC master.dbo.sp_executesql @pSQLStmt
PRINT 'Shrink Log'
SELECT @pSQLStmt = ' DBCC SHRINKFILE(''' + @pLogicalFileName
+ ''', 0, TRUNCATEONLY)'
PRINT 'Shrink Log SQLStmt ' + @pSQLStmt
EXEC sp_executesql @pSQLStmt
PRINT 'Rebuilding All Indexes'
EXEC sp_MSforeachtable @command1 = "print '?' DBCC DBREINDEX ('?', ' ', 0)"
PRINT 'Updating the Statistics'
EXEC sp_updatestats
PRINT 'After Database Size'
SELECT database_id ,
DB_NAME(database_id) AS DatabaseName ,
type_desc ,
name ,
( size * 8 ) / 1000 AS SizeinKB ,
physical_name
FROM sys.master_files
WHERE database_id = DB_ID()
-- Script Block End
SELECT @EndTime = GETDATE()
IF @@TRANCOUNT > 0
BEGIN
SELECT @ErrorNumber = 50001 ,
@ErrorSeverity = 16 ,
@ErrorState = 1 ,
@ErrorLine = ERROR_LINE() ,
@ErrParameter = '@@TranCont' ,
@ErrParameterValue = CONVERT(VARCHAR(255), 'You left the Transction Open!!!. Open Transaction Count :: '
+ CONVERT(VARCHAR(10), @@TRANCOUNT)) ,
@ErrorProcedure = ISNULL(ERROR_PROCEDURE(), '-');
GOTO ErrorHandler
END
GOTO ExitScript
ErrorHandler:
-- Use RAISERROR inside the CATCH block to return error
-- information about the original error that caused
-- execution to jump to the CATCH block.
RAISERROR
(
@ErrorNumber,
@ErrorSeverity,
@ErrorState, -- parameter: original error state.
@ErrParameter,
@ErrParameterValue
);
ExitScript:
-----------BEGIN SQL SCRIPT FOOTER------------------
PRINT '-------------------------------------------'
PRINT '---FINISHED SQL SCRIPT--'
PRINT '---COMPLETED TIME:' + CONVERT(VARCHAR, CONVERT(DATETIME, GETDATE()), 121)
PRINT '---TranCount : ' + CAST (@@trancount AS VARCHAR)
PRINT '-------------------------------------------'
PRINT 'Execution Time : ' + CONVERT(VARCHAR(255), ( DATEDIFF(MILLISECOND,
@StartTime,
@EndTime) ))
+ ' MilliSeconds'
-----------END SQL SCRIPT FOOTER--------------------