powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как реализовать такой механизм?
7 сообщений из 7, страница 1 из 1
Как реализовать такой механизм?
    #32062066
Zorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня такая проблема: есть таблица с данными и процедура, которая эти данные пересчитывает.
Время выполнения этой процедуры от минуты до часа в зависимости от входных параметров.
Нужно решать такие задачи:
- Если данные сейчас пересчитываются, то при обращении к ним генерировать ошибку, которая потом будет отлавливаться в клиенте,
- Если данные сейчас пересчитываются, то не давать запустить процедуру пересчета еще раз,
- Корректная работа, если процедура пересчета была прервана аварийно (разрыв соединения и т.д.), то есть определить, что данные неверны и их нужно пересчитать.
Как это реализовать?
...
Рейтинг: 0 / 0
Как реализовать такой механизм?
    #32062070
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сохраняй во вспомогательной таблице флаг запуска при старте и сбрасывай его при окончании пересчета.
...
Рейтинг: 0 / 0
Как реализовать такой механизм?
    #32062080
flatron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
только надо учесть возможность автоматического сбрасывания такого флага в случае аварийного завершения...
например job'ом...
...
Рейтинг: 0 / 0
Как реализовать такой механизм?
    #32062288
Zorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2flatron: проблема как раз в том чтобы определить, выполняется ли сейчас процедура пересчета, или нет.
На что вешать Job для сбрасывания этого флага? Job на определенное время не годится.
...
Рейтинг: 0 / 0
Как реализовать такой механизм?
    #32062295
Фотография Luchkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
begin tran MyRecalc

set LOCK_TIMEOUT  1000 
update ConfTable set InProc=  1 
if @@error <>  0  begin
   rollback tran MyRecalc
   print 'Еррор!!!'
   return - 1 
end
делать, что нужно
update ConfTable set InProc=  0 

commit tran MyRecalc

Как-то так, по-моему, должно работать. Типа, если процедура работает, то сработает таймаут и вернётся ошибка.
...
Рейтинг: 0 / 0
Как реализовать такой механизм?
    #32062298
vap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно делать расчет во временную таблицу, тогда ваши обращения к пред. расчету не будут тормозиться. Если расчет сбросить или остановить потеряется только предв. расчет.

Определить что выполняется расчет, можно или флажками/блокировкой врем. таблицы/существованием врем. таблицы.
...
Рейтинг: 0 / 0
Как реализовать такой механизм?
    #32062377
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не знаю какая у тебя конкретно задача....
когда то я делал так..
по порядку
выставляем флаг...
данные для расчета сливаем во временную таблицу(чтоб не блокировать) и занимаемся ими...
всю модификацию с основных данных переносим на другие таблички(удаление ,вставка)(по типу лога) основные таблицы - толко читаем....
по завершению выставлям флаг+1(полный запрет)...
приводим все таблицы в нормальную форму (можно по ходу и досчитывать свою обработку).....
снимаем все флаги.....
а в принципе вариантов много .... все зависит на сколько интенсивно используются данные....
иногда приходится разносить такие реализации на разные сервера...
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как реализовать такой механизм?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]