首页主机资讯centos中sqlserver故障排查方法

centos中sqlserver故障排查方法

时间2026-01-21 08:07:04发布访客分类主机资讯浏览721
导读:CentOS 上 SQL Server 故障排查步骤 一 快速定位与通用检查 服务状态与自启 执行:sudo systemctl status mssql-server,若未运行则 sudo systemctl start mssql-...

CentOS 上 SQL Server 故障排查步骤

一 快速定位与通用检查

  • 服务状态与自启
    • 执行:sudo systemctl status mssql-server,若未运行则 sudo systemctl start mssql-server;建议 sudo systemctl enable mssql-server 设置开机自启。
  • 错误日志与系统日志
    • 查看 SQL Server 错误日志:sudo tail -n 200 /var/log/mssql/errorlog -f
    • 查看 systemd 日志:sudo journalctl -u mssql-server -f
  • 文件权限与所有权
    • 修复数据目录权限:sudo chown -R mssql:mssql /var/opt/mssql & & sudo chmod -R u+rwX /var/opt/mssql
    • 如日志出现无法打开 licensing.hiv 或访问被拒绝,重点检查 /var/opt/mssql/.system/system/registry/ 的权限与残留进程锁。
  • 资源与磁盘
    • 磁盘空间:df -h
    • 磁盘 I/O:iostat -x 1 5
  • 客户端连通性
    • 端口可达:nc -vz < 服务器IP> 1433telnet < 服务器IP> 1433
    • 本机监听:ss -lntp | grep 1433sudo netstat -tulpen | grep 1433

二 无法启动或反复崩溃

  • 彻底清理残留进程后重启
    • sudo systemctl stop mssql-server
    • ps -ef | grep -E "sqlservr|paldumper" 确认无残留
    • 必要时 sudo pkill -9 -f "sqlservr"(仅在确认无业务影响时)
    • 再次启动:sudo systemctl start mssql-server
  • 检查关键错误线索
    • 若日志出现 Access was denied setting up the persistent registry: \SystemRoot\licensing.hiv,多为 licensing.hiv 权限/锁冲突或残留进程导致,按上步清理并修复权限后重试。
  • 单用户模式获取启动期详细输出
    • sudo /opt/mssql/bin/sqlservr -m(前台运行,观察控制台报错,定位文件/权限/配置问题)
  • 文件系统与权限复核
    • 确保 /var/opt/mssql 及子目录属主为 mssql:mssql,必要时 chmod -R u+rwX 放宽目录权限(生产环境请按最小权限原则调整)。

三 连接失败排查

  • 服务与端口
    • 确认服务运行:systemctl is-active mssql-server
    • 确认监听端口:ss -lntp | grep 1433
  • 防火墙放行
    • sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent & & sudo firewall-cmd --reload
  • 监听地址配置
    • 编辑配置文件:/etc/mssql/mssql.conf.d/90-sqlservr.conf
    • 确保包含:listen_addresses=0.0.0.0(或需要的网卡地址),保存后 sudo systemctl restart mssql-server
  • 客户端与连接串
    • 本机测试:sqlcmd -S 127.0.0.1 -U SA -P '< 密码> ' -Q "SELECT 1"
    • 远程测试:sqlcmd -S < 服务器IP> ,1433 -U < 用户名> -P '< 密码> ' -Q "SELECT 1"
    • 核对连接字符串的 服务器地址、端口、数据库名、用户名、密码 是否正确,账户是否具备连接权限。

四 性能与阻塞问题

  • 活跃会话与请求
    • sqlcmd -S localhost -U SA -P '< 密码> ' -Q "SELECT session_id, request_id, task_state, start_time, command, text FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t ORDER BY start_time DESC"
  • 会话与登录信息
    • sqlcmd -S localhost -U SA -P '< 密码> ' -Q "SELECT session_id, login_name, host_name, program_name, login_time, last_request_end_time FROM sys.dm_exec_sessions ORDER BY login_time DESC"
  • 执行计划与统计
    • 结合 sys.dm_exec_query_statssys.dm_exec_plan_attributes 分析高成本查询与计划属性,必要时更新统计信息或优化索引。
  • 扩展事件追踪耗时/阻塞
    • 创建会话示例:
      • CREATE EVENT SESSION [long_query] ON SERVER ADD EVENT sqlserver.sql_statement_completed(ACTION(sqlserver.sql_text) WHERE duration > 5000000) ADD TARGET package0.event_file(SET filename=N'/var/opt/mssql/log/long_query.xel') WITH (STARTUP_STATE=ON);
      • 启动:ALTER EVENT SESSION [long_query] ON SERVER STATE = START;
      • 停止/清理:ALTER EVENT SESSION [long_query] ON SERVER STATE = STOP; DROP EVENT SESSION [long_query] ON SERVER;
  • 图形化辅助
    • 使用 SSMS 活动监视器 观察当前活跃查询、等待类型与阻塞链。

五 应急与修复建议

  • 数据库一致性检查与修复
    • 只读检查:sqlcmd -S localhost -U SA -P '< 密码> ' -Q "DBCC CHECKDB ('YourDB') WITH NO_INFOMSGS, ALL_ERRORMSGS; "
    • 修复(高风险,务必先完整备份):sqlcmd -S localhost -U SA -P '< 密码> ' -Q "DBCC CHECKDB ('YourDB') REPAIR_ALLOW_DATA_LOSS; "
  • 单用户维护窗口
    • 将库置为单用户并立即回滚现有连接:ALTER DATABASE [YourDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    • 维护完成后恢复:ALTER DATABASE [YourDB] SET MULTI_USER;
  • 变更前准备
    • 备份数据目录与配置:sudo tar czf /backup/mssql_$(date +%F).tgz -C /var/opt/mssql .
    • 变更后验证:`sqlcmd -S localhost -U SA -P ‘< 密码> ’ -Q “SELECT name, state_desc FROM sys.databases; ”``

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: centos中sqlserver故障排查方法
本文地址: https://pptw.com/jishu/788317.html
centos下sqlserver版本选择指南 CentOS HDFS配置如何实现安全加固

游客 回复需填写必要信息