一起学习网 一起学习网

如何优雅地清理MSSQL服务器日志?(mssql日志怎么清理)

服务器日志是管理MSSQL服务器必不可少的一部分。随着MSSQL服务器的使用,日志文件逐渐变大,会占用大量的硬盘空间。 因此,维护MSSQL服务器的硬盘空间是一个重要的任务,那么如何优雅地清理MSSQL服务器日志呢?

首先,应该在MSSQL服务器上启用自动清理。当删除日志时,MSSQL服务器会自动检测数据库是否正处于恢复模式,如果正处于恢复模式,MSSQL服务器将不进行清理。为此,在MSSQL服务器上可以使用以下T-sql语句来启用自动清理,清理模式将定期删除过期或没有用的日志:

Exec sp_cycle_errorlog

其次,可以使用xp_deletelog存储过程清理MSSQL服务器日志。该存储过程接受三个参数,有助于控制删除的日志文件的数量:

EXEC xp_deletelog @LogFileNumber, @LogFileDate, @LogFileSize

其中,@LogFileNumber参数用于控制要保留在MSSQL服务器上的日志文件数,@LogFileDate参数用于控制删除的日志文件的日期,@LogFileSize参数用于控制删除的日志文件的大小。

最后,可以使用以下SQL脚本定期清理MSSQL服务器日志:

CREATE PROCEDURE CleanupSqlLogs

AS

BEGIN

DECLARE @BackupPath VARCHAR(100)

SET @BackupPath = ‘C:\MSSQLServer\Backups\’

DECLARE @fname VARCHAR(250)

SET @fname = ”

SELECT @fname=name FROM sys.sysaltfiles WHERE dbid =

(DB_ID(‘tempDb’)) AND

fileid=1

EXEC xp_delete_file 0, @fname

DECLARE @CurrLog VARCHAR(100)

SET @CurrLog = ‘C:\MSSQLServer\Backups\’ + CAST(SERVERPROPERTY(‘InstanceName’) AS VARCHAR(100)) + ‘_Log_Backup_’ +

CAST(YEAR(GETDATE()) AS VARCHAR(4)) + ‘_’ +

REPLICATE(‘0’,2-LEN(MONTH(GETDATE()))) + CAST(MONTH(GETDATE()) AS VARCHAR(2)) +

REPLICATE(‘0’,2-LEN(DAY(GETDATE()))) +

CAST(DAY(GETDATE()) AS VARCHAR(2)) + ‘_*.trn’

DECLARE @time VARCHAR(100)

SET @time = CAST(YEAR(GETDATE()) AS VARCHAR(4)) + ‘-‘ + REPLICATE(‘0’,2-LEN(MONTH(GETDATE()))) +

CAST(MONTH(GETDATE()) AS VARCHAR(2)) + ‘-‘ +

REPLICATE(‘0’,2-LEN(DAY(GETDATE()))) + CAST(DAY(GETDATE()) AS VARCHAR(2))

Declare @Sql VARCHAR(1000)

SET @Sql = ‘BACKUP LOG [tempdb] TO DISK = ”’+ @BackupPath +

”’+ @CurrLog + ‘ WITH TRUNCATE_ONLY,

COMPRESSION, FORMAT’

EXEC (@Sql)

END

在MSSQL服务器上创建一个定时任务,每天自动执行上面的存储过程,以每天固定的时间清理MSSQL服务器日志文件:

EXEC msdb.dbo.sp_add_job @job_name=’CleanupSqlLogs’

EXEC msdb.dbo.sp_add_jobstep @job_name=’CleanupSqlLogs’,

@step_name=’Execute CleanupSqlLogs Proc’,

@subsystem=’TSQL’,

@command=’CleanupSqlLogs’,

@retry_attempts=0,

@retry_interval=0

EXEC msdb.dbo.sp_add_jobschedule @job_name=’CleanupSqlLogs’,

@name=’DailyCleanupJob’,

@freq_type= 8,

@active_start_time=170000

通过一些简单的步骤,我们可以有效地清理MSSQL服务器日志,节省硬盘空间。但是,在清理MSSQL服务器日志时,还需要注意确保数据库处于可用状态,以免发生丢失重要信息的问题。