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
命令壓縮日志文件大?。⊿QL 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);
限制日志文件最大大小,防止無限制增長。