SQL - таблица, ожидающая фиксации/отката после закрытия сеанса

У меня есть большая таблица без каких-либо индексов, около 27,5 млн строк. Я пытался удалить около половины тех, кто использует с помощью BEGIN TRAN. Затем я попытался отменить запрос, но так как это занимало много времени, я решил просто закрыть Management Studio.
Теперь, когда я пытаюсь просмотреть эту таблицу, она ничего не возвращает, просто продолжает работать.
Когда я run SELECT TOP 10 * FROM Tbl он просто выполняется, ничего не возвращая.
Но когда я запускаю SELECT TOP 10 * FROM Tbl(NOLOCK), он возвращает 10 строк.
Это говорит мне, что он ожидает Rollback/Commit от моего BEGIN TRAN.
Я думал, что после закрытия произойдет автоматический откат сеанс и Management Studio.
Как решить эту проблему?

Спасибо.


person jmich738    schedule 04.07.2017    source источник
comment
stackoverflow.com/questions/4896479/   -  person ProgrammingBaKa    schedule 04.07.2017
comment
может быть, вам следует закрыть соединение с базой данных?   -  person ProgrammingBaKa    schedule 04.07.2017
comment
@ProgrammingBaKa Я читал это, и в нем говорится, что он должен был откатить его, как только я закрою сеанс. Я закрыл его, но он все еще кажется заблокированным. Как закрыть соединение с БД?   -  person jmich738    schedule 04.07.2017
comment
Я бы сказал, попробуйте также закрыть соединение, но я подумал, что при использовании студии управления соединение должно быть прервано/закрыто, закрыв окно запроса.   -  person OLIVER.KOO    schedule 04.07.2017
comment
Я это сделал. Закрыл все открытые экземпляры Management Studio. По-прежнему работает только при наличии NOLOCK.   -  person jmich738    schedule 04.07.2017
comment
Чтобы закрыть соединение, вы пытались завершить работу sqlserver.exe из диспетчера задач или монитора активности, если у вас Mac?   -  person OLIVER.KOO    schedule 04.07.2017
comment
Завершение задач из диспетчера задач работало.   -  person jmich738    schedule 04.07.2017
comment
Здорово. Я опубликую это как ответ, чтобы люди, столкнувшиеся с той же проблемой, могли найти решение проще.   -  person OLIVER.KOO    schedule 04.07.2017


Ответы (2)


Судя по всему, это сработало:

Прервать/закрыть соединение с базой данных решит эту проблему. Чтобы закрыть соединение, вы можете попробовать завершить работу sqlserver.exe из диспетчера задач или монитора активности, если у вас Mac.

person OLIVER.KOO    schedule 04.07.2017

Выполнить SP: SP_LOCK

В результатах вы получите SPID, DBID, OBJID, INDID, TYPE, RESOURCE, MODE, STATUS
Теперь проверьте столбец состояния, если он показывает, подождите, тогда

убейте этого СПИДа. Чтобы убить конкретный SPID, выполните SP: Убейте 65 (где 65 — SPID)

Форум MSDN

person Sushil Mate    schedule 04.07.2017
comment
Хотел бы я попробовать это, прежде чем убить задачу. Я буду иметь это в виду. - person jmich738; 04.07.2017