应用服务器名称过长导致使用MSDTC报错
项目背景
因机房迁移,部分系统需要从A机房迁移至B机房,迁移的方式是申请资源从新部署 应用和 DB 。其中有个较老的系统使用的SQL Server的MSDTC功能。大家知道,MSDTC(分布式交易协调器),协调跨多个数据库、消息队列、文件系统等资源管理器的事务,该服务用于管理多个主机。
报错
迁移后, 应用报错:
Communication with the underlying transaction manager has failed。
分析
根据网上同行的分享,大体为以下几类:
(1)检查 "Distributed Transaction Coordinator" 服务是否正常;
检查方式:在windows控制面版-->管理工具-->服务-->Distributed Transaction Coordinator
(2)查看 MSDTC设置是否正确
(3)检查防火墙和网络端口
可以通过telnet 命令查看数据库端口、查看135端口.(MSDTC依赖于RPC,RPC使用的端口是135)
设置开通web服务器和数据库服务器间的135端口。
(4)web 和 db 服务器中在host文件中都要添加机器名解析
位置 C:/WINDOWS/system32/drivers/etc/hosts
例如开发环境 DB 上添加
#注释 对方ip地址 对方机器名
192.168.0.138 vip5-PC
192.168.0.96 Withjunc
开发环境Web上 添加
192.168.0.218 Server218
ping 检查维护的是否争取,注意,此时应该ping 机器名,不是ping serverip。
但是可惜,通过以上的操作和检查还是应用报错,没有发现问题所在。
继续调试--神来之笔
调试、调整、再调试,反复多次,都没有发现问题。后来只有打开 【SQL Profiler 跟踪器】尝试。经过多次、反复查看抓到的数据,偶然发现 【hostname】列的数据不是真正应用所在server的机器名,而是被截断后的。只保留了15位。当时怀疑,可能是这个问题。
为了验证这个假设,下面我们有两个继续方案:(1)修改应用Server的机器名称,将其长度降到15位以内;(2)修改hosts文件。
前者方案,修改成本相对大写,抱着试一试的心态,我们去修改hosts文件【C:/WINDOWS/system32/drivers/etc/hosts】,把其中 应用server的机器名,维护成被截断后的,即hosts维护的名字和SQL Profiler 跟踪器抓到的hostname一致。
结果,报错消失,好了。
小结
(1)问题持续时间相对较长,有一个原因或者心态,总是仍为迁移后,设置一样,DB方面出问题是不可能。经验可以利用,但不应该成为不积极面对问题的挡箭牌,而是‘stay hungry stay foolish’。切记!切记!切记!
(2)必要的时候,通过【SQL Profiler 跟踪器】发现问题,还是推荐的,不要太排斥【SQL Profiler 跟踪器】。
(3)当然,发现 应用机器名称,还可以通过 【SQL Server活动监视器】 或者是 动态管理视图【sys.dm_exec_sessions】来实现。
(4)为什么hostnam只保留15位,本身尚未找到说明文档。
有一个分享是 DB Server hostname 长度超过15位,导致 SQLServerAgent启动失败的解释。 原因:sqlserver代理会截取你的hostname,如果hostname超过15位,则代理的登录名与你的hostname不相同
解决方法:修改你的hostname
https://www.jianshu.com/p/50d5df083df7
参考
1.《SQL Server活动监视器》
https://www.rstk.cn/news/213061.html?action=onClick
2.开启MSDTC的方法
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
2019-09-06 shell 操作钉钉机器人实现告警提醒
2018-09-06 MongoDB 执行mongoexport时异常及分析(关于数字类型的查询)