自动清理SQL Server的数据库日志
简述
因为SQL Server的日志文件一直会增长,用户用一个月系统日志文件就轻轻松松就占了100GB+。所以只能每月清理一次日志文件。
方案
写一个exe程序,里面是执行清理数据库日志的T-SQL脚本。然后把这个exe放到服务器上每个月执行一次就好了。
代码
using System;
using System.Data.SqlClient;
using Dapper;
namespace CleanDbLog
{
class Program
{
private const string CONNSTRING = "Data Source=.;User ID=sa;Password=******;Initial Catalog=master;Pooling=true";
private const string SQL = @"
ALTER DATABASE {0} SET RECOVERY SIMPLE WITH NO_WAIT
ALTER DATABASE {0} SET RECOVERY SIMPLE /*简单模式*/
USE {0}
DBCC SHRINKFILE (N'{0}_log' , 2, TRUNCATEONLY) /*设置压缩后的日志大小为2M,可以自行指定*/
USE [master]
ALTER DATABASE {0} SET RECOVERY FULL WITH NO_WAIT
ALTER DATABASE {0} SET RECOVERY FULL /*还原为完全模式*/
";
static void Main(string[] args)
{
var connection = new SqlConnection(CONNSTRING);
try
{
connection.Open();
connection.Execute(string.Format(SQL, "数据库名称1"));
connection.Execute(string.Format(SQL, "数据库名称2"));
}
finally
{
connection.Dispose();
}
}
}
}
依赖项
NuGet需要安装Dapper,如果是.NET Core或者.NET5+还需要安装Data.SqlClient
跨平台性
Windows Server很简单就新建一个计划任务每个月执行一下exe就行。Linux应该也很简单,思路同Windows Server。