>MSSQL清除日志文件的技巧(mssql 清除LOG)

2023-04-22 01:18:27 文件 技巧 清除

Microsoft SQL Server(MSSQL)是一款成熟稳定的关系型数据库管理系统,它通常使用日志文件来监控和管理数据库内的活动,以保持数据的完整性和一致性,但是,随着业务的增长和日志文件的积累,它可能造成占用硬盘资源的不必要浪费,所以本文介绍了一些清理MSSQL日志文件的技巧,以提高硬盘空间的使用效率。

首先,介绍MSSQL的日志管理机制,它将日志文件分为了归档日志(archive log)和活动日志(active log)两种,归档日志通过定期备份计划备份至其他地方,而活动日志会永久保存在硬盘上,随着数据库的活动不断增加,活动日志文件将不断增长。硬盘空间逐渐消耗尽,这就需要我们定期进行日志清理,来释放硬盘资源。

有两种清理MS SQL日志文件的方式:

1.手动清理,使用Microsoft SQL Server Management Studio对日志文件进行清理,通过右击要清理的数据库,点击“任务”,之后点击“清理日志”,选择想要清理的日志文件,点击确定即可。

代码如下:

USE [master]
GO

BACKUP LOG [myDatabase] with TRUNCATE_ONLY
GO

2.脚本清理,使用脚本进行日志清理,通常是定期运行,以保留足够的日志文件并在达到指定的大小并删除早期的日志文件。

代码如下:

DECLARE @Date DATETIME
DECLARE @DelLog VARCHAR(200)
DECLARE @DelLogFile VARCHAR(200)
DECLARE @DatabaseName VARCHAR(200)
DECLARE @MaxLogSize NUMERIC
SET @MaxLogSize = 5 /* Maximum Log Size in MB */
SET @DatabaseName = 'YourDatabaseName'
--CAN ONLY BE EXECUTED IN MASTER
USE master;

--GET MOST RECENT LOG BACKUP TIME
SELECT @Date = MAX(BACKUP_FINISH_DATE)
FROM MSDB..BACKUPSET
WHERE TYPE = 'L'
AND DATABASE_NAME = @DatabaseName
--CALCULATE THE TARGET LOG NAME
SELECT @DelLog= 'L' +
REPLACE(CONVERT(VARCHAR, @Date, 112), '/', '') + '.ldf'

--DELETE THE LOG FILE
SELECT @DelLogFile = '\\YourServerName\MSSQL\Data\' + @DelLog
DECLARE @cmd VARCHAR(200)

SELECT @cmd = 'DEL "' + @DelLogFile + '"'
EXEC master..xp_cmdshell @cmd
--CHECK FILE SIZE AND DELETE IF IT IS LESS THAN MAX
SELECT @cmd = 'DIR "' + @DelLogFile + '"'

DECLARE @TempFileName VARCHAR(200)
DECLARE @Found BIT
SET @Found = 0

CREATE TABLE #Temp (filename VARCHAR(200))
INSERT #Temp
EXEC master..xp_cmdshell @cmd
SELECT @TempFileName = filename
FROM #Temp
WHERE LEN(filename) > 8
AND filename like '% LDF'
AND filename NOT LIKE '% Volume %'
AND filename NOT LIKE '% Ne %'
AND CONVERT(NUMERIC, LEFT(filename, 7))

IF @TempFileName IS NOT NULL
BEGIN
SELECT @Found = 1
SELECT @DelLog = @TempFileName
END

--DELETE THE LOG FILE
IF @Found = 1
BEGIN
SELECT @DelLogFile = '\\YourServerName\MSSQL\Data\' + @DelLog
SELECT @cmd = 'DEL "' + @DelLogFile + '"'
EXEC master..xp_cmdshell @cmd
END

DROP TABLE #Temp
GO

总之,MSSQL清理日志文件的技巧有助于保持数据库的空间结构,提高它的可用性和性能,可以使用手动或脚本清理的方式,根据业务情况混合使用,以实现最佳的空间效率。

相关文章