Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как прервать зависшую трансакцию?  [new]
Уленшпигель
Member

Откуда:
Сообщений: 115
SELECT @@version

Microsoft SQL Server  2000 - 8.00.2055 (Intel X86)  (Build 2195: Service Pack 4) 

Есть некая таблица, которую надо удалить, но не удается. В ошибке говорится, что истек таймаут на получение блокировки. Проверил, какие на таблице есть блокировки (оставил только строку про проблемную таблицу):

sp_lock

spid	dbid	ObjId	             IndId	Type	    Resource	Mode	       Status
114	18	1397580017	       0	TAB	                Sch-S	      GRANT

Наблюдается блокировка на целостность схемы. Но я уже удалил все, что зависело от этой таблицы.

sp_depends dogsneedclose

/*------------------------
sp_depends dogsneedclose
------------------------*/
Object does not reference any object, and no objects reference it.

Тогда я решил посмотреть, какой запрос держит блокировку

DBCC INPUTBUFFER(114) 

Это оказался запрос, создающий представление, зависящее от этой таблицы. Но ведь я уже его удалил!

Вопрос: можно ли эту блокировку как-то побороть, не перезагружая сервер и не применяя kill? Ни то, ни другое мне недоступно.
6 июн 11, 15:18    [10770525]     Ответить | Цитировать Сообщить модератору
 Re: как прервать зависшую трансакцию?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Уленшпигель
Вопрос: можно ли эту блокировку как-то побороть, не перезагружая сервер и не применяя kill? Ни то, ни другое мне недоступно.
Найти того, кто запустил этот запрос, и попросить прервать его.
6 июн 11, 15:22    [10770567]     Ответить | Цитировать Сообщить модератору
 Re: как прервать зависшую трансакцию?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Уленшпигель

Вопрос: можно ли эту блокировку как-то побороть, не перезагружая сервер и не применяя kill? Ни то, ни другое мне недоступно.

Пойти и выключить машину пользователя, который создал коннект 114 ?
6 июн 11, 15:23    [10770574]     Ответить | Цитировать Сообщить модератору
 Re: как прервать зависшую трансакцию?  [new]
Уленшпигель
Member

Откуда:
Сообщений: 115
Гавриленко Сергей Алексеевич
Найти того, кто запустил этот запрос, и попросить прервать его.


Запустил этот запрос я. Причем в пятницу. С тех пор я уже успел это представление удалить.
6 июн 11, 15:25    [10770602]     Ответить | Цитировать Сообщить модератору
 Re: как прервать зависшую трансакцию?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Уленшпигель
Запустил этот запрос я. Причем в пятницу. С тех пор я уже успел это представление удалить.
Так отмените его.
6 июн 11, 15:27    [10770618]     Ответить | Цитировать Сообщить модератору
 Re: как прервать зависшую трансакцию?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Уленшпигель
Гавриленко Сергей Алексеевич
Найти того, кто запустил этот запрос, и попросить прервать его.


Запустил этот запрос я. Причем в пятницу. С тех пор я уже успел это представление удалить.

Ну а коннект почему тогда до сих пор открыт ?
6 июн 11, 15:28    [10770631]     Ответить | Цитировать Сообщить модератору
 Re: как прервать зависшую трансакцию?  [new]
Уленшпигель
Member

Откуда:
Сообщений: 115
Гавриленко Сергей Алексеевич
Так отмените его.


как?
6 июн 11, 15:29    [10770636]     Ответить | Цитировать Сообщить модератору
 Re: как прервать зависшую трансакцию?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Уленшпигель
Гавриленко Сергей Алексеевич
Так отмените его.


как?
Ну, соединение закройте там.
6 июн 11, 15:30    [10770642]     Ответить | Цитировать Сообщить модератору
 Re: как прервать зависшую трансакцию?  [new]
Уленшпигель
Member

Откуда:
Сообщений: 115
какое соединение мне закрыть? с пятницы прошло два выходных, я не работал с сервером, сегодня я уже тоже открывал/закрывал менеджмент студию пару раз (тоже думал, что поможет). но этот запрос продолжает висеть. получается, что без kill не обойтись?
6 июн 11, 15:36    [10770697]     Ответить | Цитировать Сообщить модератору
 Re: как прервать зависшую трансакцию?  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2793
Да, сделайте kill. Кстати, view не содержит обращения к linked-серверам?
6 июн 11, 16:13    [10771108]     Ответить | Цитировать Сообщить модератору
 Re: как прервать зависшую трансакцию?  [new]
Уленшпигель
Member

Откуда:
Сообщений: 115
содержала. там тоже посмотреть на предмет зависших блокировок?
6 июн 11, 16:29    [10771321]     Ответить | Цитировать Сообщить модератору
 Re: как прервать зависшую трансакцию?  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2793
А какой status у 114 процесса?
6 июн 11, 17:15    [10771888]     Ответить | Цитировать Сообщить модератору
 Re: как прервать зависшую трансакцию?  [new]
Уленшпигель
Member

Откуда:
Сообщений: 115
select spid, status from master.dbo.sysprocesses where spid = 114

spid	status
114	runnable             
6 июн 11, 17:24    [10771981]     Ответить | Цитировать Сообщить модератору
 Re: как прервать зависшую трансакцию?  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2793
Странно. А last_batch процесса. Посмотрите через get_sql() что он реально сейчас делает.
6 июн 11, 17:39    [10772149]     Ответить | Цитировать Сообщить модератору
 Re: как прервать зависшую трансакцию?  [new]
lastwaittype
Guest
select spid, status, lastwaittype from master.dbo.sysprocesses where spid = 114
6 июн 11, 17:55    [10772355]     Ответить | Цитировать Сообщить модератору
 Re: как прервать зависшую трансакцию?  [new]
Уленшпигель
Member

Откуда:
Сообщений: 115
Prolog
Странно. А last_batch процесса.


2011-06-03 14:35:41.970 . три дня уже прошло.

Prolog
Посмотрите через get_sql() что он реально сейчас делает.


про get_sql ничего не нашел, но

DBCC INPUTBUFFER(114)

CREATE VIEW crow.view_invent_dogs_candidates  AS  бла-бла-бла

Это, собственно, создание того самого представления, которое я уже удалил.

И из энтерпрайз менеджера (я админа попросил ерибить зависший процесс) процесс не удаляется.
6 июн 11, 17:57    [10772380]     Ответить | Цитировать Сообщить модератору
 Re: как прервать зависшую трансакцию?  [new]
AlexandrPlus
Member

Откуда:
Сообщений: 7887
Уленшпигель

Наблюдается блокировка на целостность схемы. Но я уже удалил все, что зависело от этой таблицы.

DBCC INPUTBUFFER(114) 

Это оказался запрос, создающий представление, зависящее от этой таблицы. Но ведь я уже его удалил!

Вопрос: можно ли эту блокировку как-то побороть, не перезагружая сервер и не применяя kill? Ни то, ни другое мне недоступно.


так и не дает удалить, так как выполняется
Sch-S - не позволяют DDL, но транзакции не блокируются

А почему запрос не kill-уть (почему недоступно это, удаления доступны)? А потом спокойно все, что требутся, удалить?
6 июн 11, 17:58    [10772388]     Ответить | Цитировать Сообщить модератору
 Re: как прервать зависшую трансакцию?  [new]
Верблюд
Member

Откуда: Яженичеловек!!!
Сообщений: 65007
Уленшпигель
какое соединение мне закрыть? с пятницы прошло два выходных, я не работал с сервером, сегодня я уже тоже открывал/закрывал менеджмент студию пару раз (тоже думал, что поможет). но этот запрос продолжает висеть. получается, что без kill не обойтись?


Свой компьютер перезагрузи, да?
6 июн 11, 18:50    [10772820]     Ответить | Цитировать Сообщить модератору
 Re: как прервать зависшую трансакцию?  [new]
Уленшпигель
Member

Откуда:
Сообщений: 115
Верблюд
Свой компьютер перезагрузи, да?


ы-ы-ы-ы. я свой компьютер выключил в пятницу в конце рабочего дня, в который и запускал этот запрос. И висит трансакция с пятницы.

AlexandrPlus
А почему запрос не kill-уть (почему недоступно это, удаления доступны)?


ну, kill недоступен, потому что я не админ сервера, а удаление доступно, потому что я хозяин базы :).

при помощи админа удалось выяснить, что

kill 411 WITH STATUSONLY

выдает, что откат трансакции в процессе, завершено примерно 100%, времени осталось примерно 0.

В общем, похоже, что в момент запроса на создание вьюхи, которая обращается к линкед серверу, произошел сбой связи между серверами, все сокеты поумирали, но сервера об этом так и не догадались. Это подтверждается еще и тем. что на линкед сервере тоже была зависшая трансация с пятницы. Которая, пыталась закрыть соединение. Она, после пары киллов таки завершилась. Если до завтра основная трансакция не умрет сама по себе, принято решение перезапустить сервер. Других способов, судя по всему, нет.

В связи с чем возникает вопрос - есть ли у серверов настройки, отвечающие за максимальную длительность трансакций и длительность запросов к линкед серверам? Чтобы они автоматом откатывались по таймауту.
6 июн 11, 19:16    [10772934]     Ответить | Цитировать Сообщить модератору
 Re: как прервать зависшую трансакцию?  [new]
Верблюд
Member

Откуда: Яженичеловек!!!
Сообщений: 65007
Уленшпигель
И висит трансакция с пятницы.


DTC что говорит?
6 июн 11, 19:29    [10772973]     Ответить | Цитировать Сообщить модератору
 Re: как прервать зависшую трансакцию?  [new]
AlexandrPlus
Member

Откуда:
Сообщений: 7887
Уленшпигель
AlexandrPlus
А почему запрос не kill-уть (почему недоступно это, удаления доступны)?


ну, kill недоступен, потому что я не админ сервера, а удаление доступно, потому что я хозяин базы :).


к тому, что вопросы вроде от типа разработчика, который не может без серверных ролей - или админ СУБД всегда в первом приближении

Уленшпигель
Если до завтра основная трансакция не умрет сама по себе, принято решение перезапустить сервер. Других способов, судя по всему, нет.

В связи с чем возникает вопрос - есть ли у серверов настройки, отвечающие за максимальную длительность трансакций и длительность запросов к линкед серверам? Чтобы они автоматом откатывались по таймауту.


linked сервера на OLE DB provider, в свойствах которого можно задать длительность запросов

там ещё и deadlock может быть - в 2000 (вроде не всегда автоматически распознается) и sp_configure. например, показал бы
7 июн 11, 11:59    [10775635]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить