Ubuntu环境下SQL Server日志管理策略
恢复模式决定了事务日志的保留行为和空间使用方式,是日志管理的基础。Ubuntu上的SQL Server支持三种恢复模式:
ALTER DATABASE [数据库名] SET RECOVERY SIMPLE;
ALTER DATABASE [数据库名] SET RECOVERY FULL;
实时监控日志文件有助于快速发现异常(如错误、性能瓶颈)。常用工具包括:
tail -f /var/opt/mssql/data/YourDB.ldf
(需替换为实际日志路径)。lnav /var/opt/mssql/data/YourDB.ldf
即可查看格式化日志。日志文件过度增长会占用大量磁盘空间,需定期清理:
BACKUP LOG [数据库名] TO DISK = 'NUL';
(简单模式下可直接截断)清除已提交事务的日志记录。DBCC SHRINKFILE
命令压缩日志文件大小(SQL Server 2012及以上版本需用此命令),例如DBCC SHRINKFILE (YourDB_Log, 1);
(1表示目标大小,单位为MB)。ALTER DATABASE [数据库名] SET AUTO_SHRINK ON;
。使用logrotate
工具自动轮转、压缩和删除旧日志,防止单个日志文件过大。配置步骤:
sudo apt install logrotate
。/etc/logrotate.d/mssql
),添加以下内容:/var/opt/mssql/data/*.ldf {
daily
rotate 7
size 100M
compress
missingok
notifempty
copytruncate
}
参数说明:daily
(每日轮转)、rotate 7
(保留7个旧日志)、size 100M
(日志达到100MB时轮转)、compress
(压缩旧日志)、copytruncate
(复制后清空原文件,避免服务中断)。sudo logrotate -f /etc/logrotate.d/mssql
。通过分析日志可定位问题(如错误、慢查询):
fn_dblog()
查看事务日志详情(如SELECT * FROM fn_dblog(NULL, NULL);
),过滤特定事务(如WHERE Operation = 'LOP_DELETE_ROWS'
)。journalctl -u mssql-server --since "2025-10-01" --until "2025-10-02"
(查看2025-10-01至2025-10-02的SQL Server日志)。logwatch --service mssql-server
。BACKUP LOG [数据库名] TO DISK = '/var/opt/mssql/backup/YourDB_Log.bak';
命令。ALTER DATABASE [数据库名] MODIFY FILE (NAME = YourDB_Log, MAXSIZE = 1GB);
限制日志文件最大大小,防止无限制增长。