TFS 2010 - 无法查询某些用户


0

我们似乎在Team Foundation Server 2010安装时出现问题,在查询某些用户时会出错。如果我们将它们包含在'AssignedTo'过滤器中,则查询会立即出错:

TF237161:服务器操作超时或服务器无响应。再试一次。

对于其他用户,这可以正常工作,并且在工作查询的结果中返回分配给这些有问题的用户的TFS。我已经检查过,它似乎不是一个权限问题。我们去年已经从Team Foundation Server 2008迁移到TFS 2010,但是影响的人认为它在此之前正在发生。

有没有人有任何想法,从哪里开始排除故障?我有完全访问服务器和数据库的权限,并且已经开始尝试在SQL中复制查询以查看它是否是数据库中的错误,但到目前为止还没有达到很远。

如果有人有任何建议,他们将不胜感激!谢谢

Answers:


2

我最终设法找到了问题的根源!事实证明,由于原因未知,受影响的用户在Constants表中出现多次(基于存储在DisplayPart列中的名称),这些用户位于我们的TfsDefaultCollectionTFS数据库中。此查询突出显示所有具有重复项的记录DisplayName

SELECT * FROM Tfs_DefaultCollection.dbo.Constants
WHERE DisplayPart IN
(
    SELECT DisplayPart FROM dbo.Constants 
    GROUP BY DisplayPart
    HAVING COUNT(ConstID) > 1
)
ORDER BY DisplayPart ASC

TFS在查询时使用一个查询TFS项目ConstID从该表中检索用户,并且仅在其名称唯一时才起作用:

declare @P3_1 int
select @P3_1 = ConstID from dbo.[Constants] where DisplayPart = @P3
if (@@rowcount > 1)
begin
        raiserror(600174, 16, 1) with seterror, nowait
        return
end
set @P3_1 = isnull(@P3_1,-2147483648);

因为它们出现不止一次,查询失败并出现错误。因此,为了解决这个问题,我们将重复的常量重命名为最新的ConstID不同的东西(我们将一个?添加到最后),然后嘿!它再次起作用。

如果我发现为什么会这样,我会发布更新。与此同时,我希望这对任何遇到同样烦人问题的人都有帮助


1

请尝试使用这些说明获取有关TFS服务器中发生的情况的详细跟踪信息。


虽然理论上可以回答这个问题,但最好在这里包括答案的基本部分,并提供参考链接。
slhck

0

请注意,您不应该直接操纵您的数据 - 它会使您的系统处于TFS产品组难以支持的状态。在某些情况下实际上需要重复的显示名称 - 通常当不同域中的两个用户已使用共享显示名称同步到TFS时(例如DOMAIN1 \ user和DOMAIN2 \ user都具有显示名称'user')。

您在上面提到的工作项跟踪查询针对系统中没有重复显示名称的情况进行了优化。通常情况下,您所包含的SQL代码段引发的错误将在服务器上生成强类型异常。捕获此异常,然后生成不太理想的SQL批处理以处理重复的显示名称大小写。显然,这不是一个很好的模式,我们计划在将来的版本中清理它。然而,就目前而言,这就是这里的工作方式。

通过所有这些设置,问题的根本原因很可能是您的SQL实例没有正确安装其错误消息。在这种情况下,引发的错误将无法正确转换为服务器代码所期望的强类型异常,并且永远不会生成第二个不太理想的SQL批处理,从而导致您看到的失败...如果您修复了SQL实例上的错误消息安装,应该清除问题,并且您的查询应该再次为具有不明确显示名称的用户返回相应的结果。


好的,谢谢你的解释!我会调查一下。所以你说只是安装错误消息将解决问题?或者它只是暴露出潜在原因的错误消息?
Iain Ward 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.