【问题标题】:Can't access single row in SQL Server 2005 table无法访问 SQL Server 2005 表中的单行
【发布时间】:2009-04-29 16:38:55
【问题描述】:

我有一个包含 4 列的小型(200 行/400kb)表 - nvarchar(MAX)、nvarchar(50) 和两个整数。我在可以选择和更新 int 字段的特定行中遇到问题,但是当我尝试选择或更新 nvarchar 字段时,查询会无限期地运行(至少在我取消前 45 分钟)。我也无法删除这一行,甚至无法截断表(同样,查询会无限期运行)。

有什么想法吗?其中一个 int 字段有一个主键,但没有外键。

【问题讨论】:

  • 运行dbcc checkdb看看你的数据库有没有问题或者dbcc checktable

标签: sql sql-server-2005


【解决方案1】:

看起来你有一个未提交的事务锁定了一些东西。

您可以通过活动监视器释放它们。它位于您正在查看的数据库的管理文件夹中。

展开它,右键单击活动监视器,然后选择查看进程。您可以右键单击进程并在那里杀死它们。

这并不总是最好的解决方案,尤其是对于生产数据库。您通常想弄清楚事务未提交的原因,然后手动回滚或提交。

【讨论】:

    【解决方案2】:

    您确定该行没有被锁定吗?打开一个新连接,运行您的选择查询,记下窗口顶部 2000 / 2005 和底部 2008 管理工作室的 SPID。在另一个窗口中运行sp_who2。从运行记录的查询中查找 spid。

    如果您不关心未提交的数据,或者只是想测试该行,请执行以下操作:

    select * from table with (nolock) where key = 'mykey'
    

    【讨论】:

    • BlkBy 中有一个整数表示两个条目。我能从这里做什么?
    • 它旁边的数字指向数据库的其他连接。如果您在列表中找到它们,您可以找出它要求他们发布它的软件的机器或用户。如果您一直在更新表,则可能是您留下了一个未完成的事务来查询它。您可以通过在管理工作室中运行 dbcc outputbuffer 65 来了解他们正在执行的每个进程,其中 65 是阻止您的进程的 spid。
    【解决方案3】:

    如果 DBCC CHECKDB 没有像 Thirster42 所说的那样提供帮助

    我只是将除问题行之外的数据复制到 newTable 中并删除 oldTable...

    我还会检查您的 TempDB 的大小。

    检查 Profiler,是否触发了触发器?

    查看执行计划是否有任何异常..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      • 1970-01-01
      • 1970-01-01
      • 2011-09-17
      • 2012-10-16
      • 2014-04-27
      相关资源
      最近更新 更多