代码描述人生

.NET 相关技术 (大坏蛋的blog)

博客园 首页 新随笔 联系 订阅 管理
今天 juqiang 提到dtcping这个工具,所以想到这个问题:
如果你的机器改过名字,或者使用克隆,或者使用任何虚机来作测试(我们往往安装一台虚机然后拷贝多份,改名使用),都会碰到包含事务的调用长时间挂起问题。解法也如下所示。
通过更详细的分析发现:
1.应用服务器和本关数据库之间的DTC联系有问题,使用DTCTester软件在应用服务器上测试,发现分布式交易会锁死当前的进程。
2.分析Dump文件发现,出现锁死线程的调用栈和已知两种故障的调用栈一致。
a.机器改名后使用DTC。
b.克隆的机器使用DTC。
3.问题的原因在于,当某DTC发现远端的DTC和自己的机器出现相同的CID的时候,将报错。但是DTC在目前版本有一个Bug,报错后会留下一个锁没有释放,造成线程挂起。COM+ rollup 28里解决了这个Bug。目前我们是Rollup 26.
4.询问出现过问题的客户,确实其所有机器都是克隆而来。
5.但是,即使报错也不能解决问题,因为装好的机器的CID不会因为改名而重装。需要重新安装每台机器的DTC。
6.安装步骤如下:
重装DTC请严格按照以下步骤,否则只有重新格式化磁盘,重装系统才能解决问题。
1.将除了下表的服务以外的其他服务设定为手工启动:
Alerter
COM+ Event System
Computer Browser
Distributed File System
Distributed Link Tracking Client
Distributed Link Tracking Server
DNS Client
Event Log
IPSEC Policy Agent
License Logging Service
Logical Disk Manager
Messenger
Net Logon
NT LM Security Support Provider
Network Connectors
Plug and Play
Remote Procedure Call (RPC)
Remote Procedure Call (RPC) Locator
Removable Storage
Security Accounts Manager
Server
System Event Notification
Task Scheduler
TCP/IP NetBIOS Helper Services
Windows Management Instrumentation
Windows Management Instrumentation Driver Extensions
Windows Time
Workstation
2.重新启动机器
3.卸载DTC
打开命令行窗口执行
msdtc -uninstall
4.删除一些注册表项
运行regedit
删除以下项目
HKEY_CLASSES_ROOT\CID
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSDTC
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MSDTC
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\MSDTC
HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTC
5.在<%WINDIR%>\System32目录下执行Dtcsetup.exe
6.等待出现安装成功的对话框,点击OK
7.将第一步设为手工启动的服务改会原来的状态。
8.重启机器
9.在命令行窗口执行
msdtc -resetlog
重装完毕。
posted on 2004-04-21 09:30  大坏蛋  阅读(1839)  评论(8编辑  收藏  举报