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

Откуда:
Сообщений: 8
Есть таблица OpLog, где ведется лог некоторых операций. Перед началом операции в таблицу заносится запись об этой операции и указывается текущее время начала операции. После окончания операции проставляется время окончания операции и статус выполнения: успешно/ошибка.

insert into OpLog...

begin try
код операции
end try
begin catch
update OpLog (время окончания операции и инфа об ошибке)
raiseerror ...
end catch

update OpLog (время окончания успешной операции)

Но если данный запрос будет прерван, например через cancel query в Management Studio, то в таблицу OpLog не запишется время окончания операции, и получится, что операция всё ещё продолжается. Можно ли как-то отслеживать событие прерывания запроса и заполнять таблицу OpLog?
19 авг 14, 12:41    [16461726]     Ответить | Цитировать Сообщить модератору
 Re: прерывание запроса (cancel query)  [new]
guest12345
Guest
Romarik,

Про транзакции слышали?
19 авг 14, 12:48    [16461791]     Ответить | Цитировать Сообщить модератору
 Re: прерывание запроса (cancel query)  [new]
Romarik
Member

Откуда:
Сообщений: 8
guest12345, конечно же слышал :). Но если я помещу insert into OpLog в транзакцию, то при прерывании запроса откатится вся транзакция и в том числе откатится "insert into OpLog". Мне же хочется, чтобы сохранилась инфа в таблице OpLog о том, что операцию запустили, а потом прервали.
19 авг 14, 12:57    [16461845]     Ответить | Цитировать Сообщить модератору
 Re: прерывание запроса (cancel query)  [new]
Romarik
Member

Откуда:
Сообщений: 8
И ещё: если положить insert into OpLog в транзакцию, то другие процессы никак не узнают, что в данный момент выполняется операция.
19 авг 14, 13:16    [16461988]     Ответить | Цитировать Сообщить модератору
 Re: прерывание запроса (cancel query)  [new]
guest12345
Guest
Romarik,

ИМХО, только если фоновым заданием сравнивать незавершённые операции и выполняющиеся запросы из sys.dm_exec_requests, выявляя явно зависшие.
19 авг 14, 13:17    [16462010]     Ответить | Цитировать Сообщить модератору
 Re: прерывание запроса (cancel query)  [new]
guest12345
Guest
Romarik
И ещё: если положить insert into OpLog в транзакцию, то другие процессы никак не узнают, что в данный момент выполняется операция.

Необязательно, зависит от уровня изоляции.
19 авг 14, 13:19    [16462025]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить