温馨提示×

Ubuntu SQL Server日志管理技巧有哪些

小樊
42
2026-01-08 13:32:01
栏目: 云计算

Ubuntu 上 SQL Server 日志管理实用技巧

一 日志类型与存放位置

  • 系统错误日志:记录 SQL Server 启动、错误与警告,常见路径为 /var/log/mssql/sqlservr.log;也可用 journalctl -u mssql-server 查看服务日志。
  • 数据库事务日志:每个数据库对应 .ldf 文件,通常位于 /var/opt/mssql/data/,用于恢复与回滚,不能简单删除或移动。
  • 说明:SQL Server on Linux 默认不启用“通用查询日志”,如需审计请使用扩展事件或第三方审计方案。

二 查看与实时监控

  • 实时查看错误日志:
    • 直接跟踪文件:tail -f /var/log/mssql/sqlservr.log
    • 通过 systemd 日志:journalctl -u mssql-server -f
  • 查看数据库事务日志占用与状态:
    • 当前日志空间使用率(百分比):
      • 示例:SELECT CAST(SUM(size * 8.0 / 1024) AS DECIMAL(10,2)) AS used_mb, CAST(SUM(size * 8.0 / 1024 / 1024) AS DECIMAL(10,2)) AS used_gb FROM sys.database_files WHERE type_desc = ‘LOG’
    • 数据库与日志文件清单:EXEC sp_helpdb;USE YourDB; EXEC sp_spaceused;
  • 结构化分析工具:可用 lnav 查看与分析文本日志(如 /var/opt/mssql/data/*.ldf 的报错片段)。

三 轮转与归档(系统层面)

  • 使用 logrotate 轮转 SQL Server 错误日志(推荐做法):
    1. 新建配置:sudo vim /etc/logrotate.d/mssql
    2. 示例内容(按日轮转、保留 7 天、压缩、延迟压缩、缺失不报错):
      /var/log/mssql/sqlservr.log {
          daily
          rotate 7
          compress
          delaycompress
          missingok
          notifempty
          copytruncate
          dateext
          dateformat -%Y%m%d
      }
      
    3. 测试与生效:sudo logrotate -d /etc/logrotate.d/mssql(演练),sudo logrotate -f /etc/logrotate.d/mssql(强制执行)。
  • 说明:SQL Server 错误日志可通过 sp_cycle_errorlog 轮转,但系统级 logrotate 更适合与 journald 配合做统一保留与压缩策略。

四 事务日志容量控制与备份恢复

  • 恢复模式选择:
    • FULL:需定期做日志备份,支持时间点恢复(生产常用)。
    • SIMPLE:日志自动截断,适用于测试/可接受数据丢失的场景。
  • 正确释放日志空间(FULL 模式):
    1. 先做一次日志备份(将日志链“截断”):
      • 示例:BACKUP LOG YourDB TO DISK = ‘/var/opt/mssql/backup/YourDB_Log_$(date +%F_%H%M%S).trn’
    2. 收缩日志文件到合理大小:
      • 查询日志逻辑名:USE YourDB; SELECT name FROM sys.database_files WHERE type_desc = ‘LOG’;
      • 收缩示例:DBCC SHRINKFILE (N’YourDB_Log’, 4096)(单位 MB,请预留增长余量)。
  • 不建议的做法:
    • 频繁或长期开启 AUTO_SHRINK(易致碎片与性能波动)。
    • 直接删除或移动 .ldf 文件(可能导致数据库不可用)。
    • 通过切换 SIMPLE 模式来“清空”日志以替代日志备份(会破坏日志链,影响时点恢复)。

五 日常维护清单

  • 监控与告警:
    • 关注 /var/log/mssql/sqlservr.logjournalctl 的错误级别增长;对 ERROR/WARNING 设置关键字告警。
    • 监控磁盘空间:df -h;事务日志所在分区建议保留充足余量。
  • 例行任务:
    • SQL Server Agent 中建立作业:定期执行“日志备份 → 校验 → 清理过期备份”,并保留策略与容量阈值联动。
    • 定期执行 EXEC sp_cycle_errorlog; 控制错误日志文件数量(默认保留 7 个)。
  • 变更与验证:
    • 调整 logrotate 策略后做演练验证;日志轮转或收缩后,做一次完整备份并抽样验证可恢复性。

0