Не удается получить доступ к одной строке в таблице SQL Server 2005 - PullRequest
4 голосов
/ 29 апреля 2009

У меня есть небольшая (200 строк / 400 КБ) таблица с 4 столбцами - nvarchar (MAX), nvarchar (50) и двумя целыми числами. У меня проблема с одной конкретной строкой, в которой я могу выбрать и обновить поля int, но когда я пытаюсь выбрать или обновить поля nvarchar, запрос выполняется бесконечно (как минимум за 45 минут до отмены). Я также не могу удалить эту строку или даже обрезать таблицу (опять же, запрос выполняется бесконечно).

Есть идеи? Одно из полей int имеет первичный ключ, но внешних ключей нет.

Ответы [ 3 ]

3 голосов
/ 29 апреля 2009

Похоже, у вас есть незафиксированная транзакция, блокирующая вещи.

Вы можете освободить их через монитор активности. Он находится в папке «Управление» базы данных, которую вы просматриваете.

Разверните его, щелкните правой кнопкой мыши на Activity Monitor и выберите View Processes. Вы можете щелкнуть правой кнопкой мыши по процессам и убить их там.

Это не всегда лучшее решение, особенно с производственной базой данных. Как правило, вы хотите выяснить, почему транзакция не зафиксирована, и либо откатить ее вручную, либо зафиксировать.

3 голосов
/ 29 апреля 2009

Вы уверены, что строка не заблокирована? Откройте новое соединение, запустите выбранный запрос, запишите SPID в верхней части окна 2000/2005 и в нижней части 2008 года в студии управления. В другом окне запустите sp_who2. Найдите спид из запроса, запускающего запись.

Если вам не нужны незафиксированные данные или вы просто хотите проверить строку, выполните:

select * from table with (nolock) where key = 'mykey'
0 голосов
/ 29 апреля 2009

, если DBCC CHECKDB не помогает, как сказал Thirster42

Я бы просто скопировал данные, кроме проблемной строки, в newTable и удалил бы oldTable ...

Также я бы проверил размер вашей TempDB.

Проверьте Профилировщик, может быть, срабатывает триггер?

См. План выполнения чего-нибудь необычного ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...