今天跟大家伙儿聊聊我昨天遇到的一个糟心事儿,关于“msdtc不可用”的问题。这玩意儿,说起来就头疼,搞得我昨天一下午都没干别的,光跟它较劲。
事情是这样的,昨天我在弄一个数据库迁移,结果在执行事务的时候,突然就蹦出来一个错误,说什么“服务器上的MSDTC不可用”。我当时就懵,MSDTC是啥玩意儿?赶紧上网查一下,才知道是“Microsoft Distributed Transaction Coordinator”,微软分布式事务协调器,听着就高大上,但实际上就是个负责事务管理的家伙。
得,既然知道是它出问题,那就开始解决。我第一个想到的就是,这玩意儿是不是没启动?于是我就按照网上的教程,一步一步来:
- 第一步:打开“控制面板”,找到“管理工具”,再找到“服务”。
- 第二步:在服务列表里找到“Distributed Transaction Coordinator”,看看它是不是正在运行。
结果?好家伙,果然是停止状态。我心想这还不简单,直接启动不就完。于是我就右键点击它,选择“启动”。
但是!但是!事情并没有我想象的那么顺利。它启动的时候,竟然报错,说什么“依赖服务或组无法启动”。我当时就感觉脑袋嗡的一声,这又是什么鬼?
没辙,继续上网查。网上有人说,可能是MSDTC的日志文件出问题,需要重新创建一下。我就按照网上的方法,打开CMD窗口,输入msdtc -resetlog
命令,然后回车。跑完之后,再启动MSDTC服务,这回总算是启动成功。
我以为这样就万事大吉,结果一运行程序,还是报同样的错误。我当时就有点崩溃,这到底是什么情况?
后来我又仔细看看错误信息,发现里面提到网络配置的问题。我突然想到,我的数据库服务器和应用服务器是分开的,MSDTC需要通过网络进行通信。是不是防火墙或者网络策略阻止MSDTC的通信?
于是我又开始检查防火墙设置。我发现,防火墙确实阻止MSDTC的通信。我就在防火墙上添加允许MSDTC通信的规则,包括允许*的入站和出站连接,以及允许49152-65535端口范围的入站和出站连接。(这端口范围是动态的,具体看你的MSDTC配置)。
配置完防火墙之后,我再次运行程序,这回总算是成功!数据库迁移顺利完成,之前的错误也不再出现。
总结一下这回的经历,MSDTC不可用这个问题,可能的原因有很多,需要一步一步排查:
- 要确保MSDTC服务已经启动。
- 要检查MSDTC的日志文件是否正常。
- 要检查防火墙和网络配置是否允许MSDTC的通信。
希望我的这回实践经历能帮到大家,以后遇到类似的问题,可以少走一些弯路。搞IT的就是这样,遇到问题就得死磕,直到解决为止。下次再遇到这种问题,我就更有经验!