Вы можете сжать базу данных перед резервным копированием.
DECLARE @string NVARCHAR(4000),
@Strt INT ,
@END INT ,
@DBName NVARCHAR(255),
@Log_Size DECIMAL(18,5),
@Log_Name NVARCHAR(25),
@String_sql NVARCHAR(MAX)
CREATE TABLE #t (srno INT IDENTITY(1,1),filename NVARCHAR(255),DBNAME NVARCHAR(50))
CREATE TABLE #Tmp_logfile (fileName NVARCHAR(25),file_size DECIMAL(12,5),log_Name NVARCHAR(25))
-- file_id =2 Log File & file_id =1 MDf File NAme
INSERT INTO #Tmp_logfile (fileName,file_size,log_Name)
SELECT a.NAME , CONVERT(DECIMAL(12,5),ROUND(b.size/128.000,5)),b.name
FROM SYS.DATABASES a
INNER JOIN SYS.MASTER_FILES b ON a.database_id=b.database_id
WHERE a.database_id > 4 AND b.file_id =2
INSERT INTO #t
SELECT
'USE [' + d.name + N']' + CHAR(13) + CHAR(10)
+ 'DBCC SHRINKFILE (N''' + mf.name + N''' , 20)'
+ CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10) as fileName,d.name
FROM
sys.master_files mf
JOIN sys.databases d
ON mf.database_id = d.database_id
WHERE d.database_id > 4 AND mf.file_id=2;
SET @Strt=1
SELECT @END= Max(Srno)FROM #t
EXEC sp_msforeachdb '
IF ''?'' not in (''master'',''model'',''msdb'',''tempdb'')
begin
exec (''ALTER DATABASE [?] SET RECOVERY SIMPLE;'')
print ''?''
end'
While @Strt<=@END
BEGIN
SELECT @string= FileName,@DBName= DBNAME FROM #t WHERE srno= @Strt
SELECT @Log_Size= file_size FROM #Tmp_logfile WHERE fileName= @DBName
IF @Log_Size > 5000 BEGIN -- Limit The Log Size After which Log file to be Shrink for EG I Had Select 5 GB
PRINT (@string)
EXECUTE (@string)
END
SET @Strt=@Strt+1
END ---- SHRINKING Log File END Here
EXEC sp_msforeachdb '
IF ''?'' not in (''master'',''model'',''msdb'',''tempdb'')
begin
exec (''ALTER DATABASE [?] SET RECOVERY FULL;'')
print ''?''
end'
DROP TABLE #t
DROP TABLE #Tmp_logfile
person
Alfaiz Ahmed
schedule
01.12.2017