Loading

自动清理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。

posted @ 2022-01-21 14:48  碌云  阅读(384)  评论(0编辑  收藏  举报