Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Блокировка выполнения хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Добрый день Предположим 5 сеансов работают с одной базы. Первый сеанс начал выполнение хранимой процедуры в которой был вызван BEGIN TRANSACTION, вопрос: как запретить выполнение хранимой процедуры всем остальным сеансам.. я бы сказал запретить параллельное выполнение, т.е. останавливаем выполнение до тех пор, пока идёт выполнение другим сеансом? Суть такая, идёт приём телефонных звонков на 5-ти рабочих местах, АТС направляет телефонный вызов параллельно на все рабочие места, тот кто первый ответит, тот и начинает общение, у остальных происходит сброс. Сделано так, что при получении вызова, "db-клиент" сохраняет телефонный звонок вызывая хранимую процедуру. В самой хранимке имеется проверка, существует ли запись с таким номером телефоном в данный момент времени, если уже существует, то хранимка прекращает выполнение. Сейчас баг в том, что "раз через раз" при получении телефонного вызова происходит вставка 5-ти строк в БД, хотя должна быть одна. Нашёл возможное место ошибки: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. "Клиент" - закрытое скомпелированное ПО, но могу отредактировать бизнес логику... подскажите что тут лучше сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2019, 11:11 |
|
||
|
Блокировка выполнения хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Игорь_UUSвопрос: как запретить выполнение хранимой процедуры всем остальным сеансам.. я бы сказал запретить параллельное выполнение, т.е. останавливаем выполнение до тех пор, пока идёт выполнение другим сеансом?Использовать спкециально предназначенные для этого процедуры sp_getapplock / sp_releaseapplock ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2019, 11:14 |
|
||
|
Блокировка выполнения хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Игорь_UUS Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Ничего это "исключение" не исключает. Такие вещи делаются через merge и без всяких предварительных селектов Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. И не придется сериализовать вызов процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2019, 11:39 |
|
||
|
Блокировка выполнения хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Игорь_UUS, используйте грязные чтения. Есть риск, но небольшой. Зато самая простая реализация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2019, 14:34 |
|
||
|
Блокировка выполнения хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Игорь_UUSДобрый день Предположим 5 сеансов работают с одной базы. Первый сеанс начал выполнение хранимой процедуры в которой был вызван BEGIN TRANSACTION, вопрос: как запретить выполнение хранимой процедуры всем остальным сеансам.. я бы сказал запретить параллельное выполнение, т.е. останавливаем выполнение до тех пор, пока идёт выполнение другим сеансом? Создайте отдельную таблицу. Далее, внутри транзакции произведите апдейт какой-либо записи этой таблицы, With (TABLOCKX, UPDLOCK), первой операцией. Далее, внутри транзакции, расположите свои апдейты и т.д. Собственно всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2019, 14:51 |
|
||
|
Блокировка выполнения хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
uaggsterСоздайте отдельную таблицу. Далее, внутри транзакции произведите апдейт какой-либо записи этой таблицы, With (TABLOCKX, UPDLOCK), первой операцией. Далее, внутри транзакции, расположите свои апдейты и т.д. Собственно всё. Стисняюсь спросить... А чем этот геморрой лучше sp_getapplock / sp_releaseapplock? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2019, 18:53 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39808219&tid=1687884]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
60ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 379ms |

| 0 / 0 |
