我们已经将数据库从 sql2000 win server 2k 迁移到 sql2008 win server 2k8。我们已将服务器从 sql2000 win server 2k 链接。我们认为问题出在 DTC 上,我们进行了大量设置,发现这些设置可以解决问题,但问题仍然存在。sql 日志和 win 事件查看器中都没有任何错误、警告或信息。应用程序挂起,最后显示超时异常。
我们迄今所做的工作:
- 在 win 2k8 上启用无需身份验证的入站和出站网络 DTC 访问
- 我们在2k和2k8上通过注册表开启了RPC动态端口分配
- 我们在注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC 中输入了子项 TurnOffRpcSecurity,并在 2k 和 2k8 上启用它
- 我们已为所有实体在防火墙中添加了 DTC 例外
我们注意到,当我们重新启动 SQL 服务并首次尝试执行事务时,会显示以下内容:“正在尝试初始化 Microsoft 分布式事务处理协调器 (MS DTC)。这只是一条信息性消息。无需用户采取任何行动。” 之后是:“涉及 Microsoft 分布式事务处理协调器 (MS DTC) 的任何不确定分布式事务的恢复已完成。这只是一条信息性消息。无需用户采取任何行动。”
有人知道还可以做什么来解决这个问题吗?
提前致谢。
问候,Snezana
答案1
尝试在两台服务器上使用 SQL Server Profiler 运行跟踪,同时尝试在应用程序中执行导致超时的操作。这将向您展示发生超时时机器上发生的确切情况。
请记住,在此过程中要保持开放的心态。我知道您说您认为 DTC 是导致问题的原因,但根据我的经验,DTC 通常不会导致超时。它要么有效,要么无效,当配置不正确时,它会抛出错误,明确表示 DTC 无法启动事务。我见过的链接服务器问题通常涉及未完成的远程查询或必须将大量数据发送回调用服务器的远程查询。
答案2
是的,你是对的,之前运行过分析器,但没有注意到一些方面,因为我的思路被重新引导,认为问题出在链接服务器上。
问题是一个死锁,我对每个遇到超时的情况的建议是首先检查是否发生了死锁。
谢谢。
答案3
我还没有尝试过您的组合。但您可以尝试以下方法:
- 运行 dcomcnfg 命令(不要告诉我你找不到运行命令
- 展开“组件服务”节点,然后展开“我的电脑”节点,然后展开“分布式事务协调器”节点
- 右键单击“本地 DTC”节点并选择“属性”
- 在“本地 DTC 属性”上,选择“安全”选项卡
- 选择网络 DTC 访问、允许入站、允许出站、无需身份验证和启用 XA 事务
您还可以在测试时查看 MSDTC 监视器。这样,您将看到事务是否正在创建然后中止,或者根本没有创建。
答案4
这两台机器是否在同一个子网上?我无法让 DTC 跨路由器、防火墙工作。
要调试,请尝试使用 Microsoft 的数据通讯协议和 DTCTester (谷歌搜索)。
有时,更改 DTC 设置时需要重新启动,即使系统没有这样说。