Ubuntu上SQL Server错误排查指南
首先明确错误的具体表现(如服务无法启动、连接失败、性能低下、数据库损坏等),这是排查的基础。例如,“服务无法启动”需聚焦服务状态和日志;“连接失败”需检查网络和认证。
使用systemctl
命令确认SQL Server服务是否运行:
sudo systemctl status mssql-server --no-pager
若服务未运行,启动服务并设置开机自启:
sudo systemctl start mssql-server
sudo systemctl enable mssql-server
服务无法启动的常见原因包括依赖缺失、配置错误或磁盘空间不足。
SQL Server错误日志包含详细的故障信息,是排查的核心依据:
/var/opt/mssql/log/errorlog
(需sudo
权限访问)sudo tail -f /var/opt/mssql/log/errorlog
journalctl -u mssql-server -n 50
(查看SQL Server相关系统日志)。sudo netstat -tuln | grep 1433
若端口被占用,用lsof -i :1433
找出进程并终止(sudo kill -9 <PID>
)。ufw
):sudo ufw allow 1433/tcp
sqlcmd
工具本地测试连接(替换为实际密码):sqlcmd -S localhost -U SA -P 'your_password'
远程连接需确保客户端能访问服务器IP,且SQL Server配置为允许远程连接。/var/opt/mssql
(SQL Server数据目录)所在分区有足够空间(建议至少2GB可用):df -h /var/opt/mssql
free -h
若内存不足,可通过mssql-conf
调整最大内存(如设置为4GB):sudo /opt/mssql/bin/mssql-conf set memory.maxmemory 4096
sudo systemctl restart mssql-server
```。
若数据库出现损坏(如DBCC CHECKDB
报错),可尝试修复:
USE [数据库名];
DBCC CHECKDB;
CHECKDB
发现错误,用REPAIR_ALLOW_DATA_LOSS
修复(需单用户模式):ALTER DATABASE [数据库名] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DBCC CHECKTABLE ('表名', REPAIR_ALLOW_DATA_LOSS);
ALTER DATABASE [数据库名] SET MULTI_USER;
注意:REPAIR_ALLOW_DATA_LOSS
可能导致数据丢失,需提前备份。mssql-conf setup
重新配置:sudo /opt/mssql/bin/mssql-conf setup
/etc/mssql/mssql.conf
,修改后需重启服务生效。sqlsrv.so
文件路径正确,且LD_LIBRARY_PATH
包含该路径:export LD_LIBRARY_PATH=/opt/mssql/lib:$LD_LIBRARY_PATH
使用动态管理视图(DMVs)监控性能:
SELECT * FROM sys.dm_exec_sessions WHERE status = 'running';
SELECT TOP 10
qs.execution_count,
qs.total_elapsed_time/1000000 AS total_elapsed_sec,
qs.last_elapsed_time/1000000 AS last_elapsed_sec,
SUBSTRING(qt.text, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.text)
ELSE qs.statement_end_offset END
- qs.statement_start_offset)/2)+1) AS query_text
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
ORDER BY qs.total_elapsed_time DESC;
根据监控结果调整索引、查询或服务器配置。若以上步骤无法解决,参考SQL Server官方文档(Ubuntu安装与配置指南)或社区论坛(如Microsoft Q&A、Stack Overflow),搜索具体错误信息获取针对性解决方案。