TFS 2010 - 无法查询某些用户

TFS 2010 - 无法查询某些用户

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

TF237161:服务器操作超时或服务器无响应。请重试。

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

有人知道从哪里开始解决这个问题吗?我拥有对服务器和数据库的完全访问权限,并已开始尝试复制 SQL 中的查询以查看它是否是数据库中的错误,但到目前为止还没有取得很大进展。

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

答案1

我最终设法找到了问题的根源!结果发现,由于未知原因,受影响的用户在我们的TFS 数据库的表中出现了不止一次Constants(基于存储在列中的名称) 。此查询突出显示了所有带有重复的记录:DisplayPartTfsDefaultCollectionDisplayName

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(我们在末尾添加了一个?),瞧!它又起作用了。

如果我知道为什么会发生这种情况,我会发布更新。与此同时,我希望这对遇到同样烦人问题的人有所帮助

答案2

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

答案3

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

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

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

相关内容