Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не позволить запустить процедуру дважды в один момент времени. Как? / 18 сообщений из 18, страница 1 из 1
05.12.2017, 12:42
    #39564311
Не позволить запустить процедуру дважды в один момент времени. Как?
Доброго дня!

Есть процедура, которая выполняется часто. То что она делает подразумевает, что она в один момент времени должен работать только один ее экземпляр. Представим, что на уровне ее "запускалки" нет возможности ограничить количество стартов.
Есть идея добавить в ее код dbms_application_info.set_client_info с передачей уникального текста. При старте процедуры мониторить сессии на наличие сессии с переданным client_info - если есть, то ждать, если нет, то работать.

Если считать, что никакой плохой человек не сделает процедуру, которая будет передавать то же значение в client_info, можно ли считать такой вариант рабочим, либо все-равно рано или поздно возникнет ситуация, что процедура в один момент времени запустится дважды?

Спасибо
...
Рейтинг: 0 / 0
05.12.2017, 12:45
    #39564315
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не позволить запустить процедуру дважды в один момент времени. Как?
RTFM/STFF dbms_lock
...
Рейтинг: 0 / 0
05.12.2017, 12:48
    #39564318
Не позволить запустить процедуру дважды в один момент времени. Как?
ElicRTFM/STFF dbms_lock
Использовал только sleep с него. Спасибо, гляну
...
Рейтинг: 0 / 0
05.12.2017, 13:06
    #39564332
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не позволить запустить процедуру дважды в один момент времени. Как?
Уникальный сессияможно ли считать такой вариант рабочим Задачка: блокировка одновременного запуска PL/SQL программ
...
Рейтинг: 0 / 0
06.12.2017, 00:34
    #39564758
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не позволить запустить процедуру дважды в один момент времени. Как?
А можно проще. Делай вставку в таблицу какого-либо значения с уникальным индексом. например, запись с именем процедуры. словишь 00001 и профит.
...
Рейтинг: 0 / 0
06.12.2017, 07:54
    #39564814
Не позволить запустить процедуру дважды в один момент времени. Как?
ShtockпрощеСоздать таблицу, вставить запись, удалить запись, если требуется продолжение транзакции без коммита, оборачиваем в автономку. Боремся с последствиями залипания записи при прерывании процедуры.
...
Рейтинг: 0 / 0
06.12.2017, 11:04
    #39564898
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не позволить запустить процедуру дважды в один момент времени. Как?
Очень много букв не имея полной информации
...
Рейтинг: 0 / 0
06.12.2017, 11:29
    #39564916
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не позволить запустить процедуру дважды в один момент времени. Как?
Shtock,

А почему не for update nowait?
...
Рейтинг: 0 / 0
06.12.2017, 12:29
    #39564974
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не позволить запустить процедуру дважды в один момент времени. Как?
На всякого мудрецаShtockпрощеСоздать таблицу, вставить запись, удалить запись, если требуется продолжение транзакции без коммита, оборачиваем в автономку. Боремся с последствиями залипания записи при прерывании процедуры.у дбмс-лок нет прав на обычного юзверя
и админы обычно не дают, ибо нефиг
...
Рейтинг: 0 / 0
06.12.2017, 12:54
    #39564991
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не позволить запустить процедуру дважды в один момент времени. Как?
>>А почему не for update nowait?

и эт тоже возможно :)
...
Рейтинг: 0 / 0
06.12.2017, 13:01
    #39564999
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не позволить запустить процедуру дважды в один момент времени. Как?
envShtock,

А почему не for update nowait?

в процедуре по тексту есть commit/rollback

....
stax
...
Рейтинг: 0 / 0
06.12.2017, 13:12
    #39565009
Не позволить запустить процедуру дважды в один момент времени. Как?
andreymxобычного юзверяЕсли у обычного пользователя так трясутся пальцы, что он дважды что-то запускает, логично, что админ ему что-то не дает. Если же предполагается асинхронная работа сессий, это уже не "обычный" пользователь.
Тем не менее, критерий взаимоотношений с админом сам по себе и критерий простости сам по себе. Вариант нарываться на ora-00001 наиболее сложный в реализации, поэтому я процитировал именно "проще".
...
Рейтинг: 0 / 0
06.12.2017, 13:14
    #39565015
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не позволить запустить процедуру дважды в один момент времени. Как?
Сестра талантаandreymxобычного юзверяЕсли у обычного пользователя так трясутся пальцы, что он дважды что-то запускает, логично, что админ ему что-то не дает. Если же предполагается асинхронная работа сессий, это уже не "обычный" пользователь.
Тем не менее, критерий взаимоотношений с админом сам по себе и критерий простости сам по себе. Вариант нарываться на ora-00001 наиболее сложный в реализации, поэтому я процитировал именно "проще".

с точки зрения оракля, обычный юсер,
процедура напр открытия/закрытия дня/месяца

....
stax
...
Рейтинг: 0 / 0
06.12.2017, 13:18
    #39565018
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не позволить запустить процедуру дважды в один момент времени. Как?
andreymxНа всякого мудрецапропущено...
Создать таблицу, вставить запись, удалить запись, если требуется продолжение транзакции без коммита, оборачиваем в автономку. Боремся с последствиями залипания записи при прерывании процедуры.у дбмс-лок нет прав на обычного юзверя
и админы обычно не дают, ибо нефигЗвери какие-то у вас админы
...
Рейтинг: 0 / 0
06.12.2017, 14:56
    #39565133
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не позволить запустить процедуру дважды в один момент времени. Как?
Staxв процедуре по тексту есть commit/rollback
Тогда dbms_lock тоже не особо поможет.
...
Рейтинг: 0 / 0
06.12.2017, 15:20
    #39565163
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не позволить запустить процедуру дважды в один момент времени. Как?
envStaxв процедуре по тексту есть commit/rollback
Тогда dbms_lock тоже не особо поможет.
Код: plaintext
dbms_lock.request(... release_on_commit => ...)
...
Рейтинг: 0 / 0
06.12.2017, 18:38
    #39565352
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не позволить запустить процедуру дважды в один момент времени. Как?
dbms_photoshop,

Спасибо. Запамятовал. Равно как и про false по-умолчанию.
...
Рейтинг: 0 / 0
06.12.2017, 18:43
    #39565355
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не позволить запустить процедуру дважды в один момент времени. Как?
envЗапамятовал. Равно как и про false по-умолчанию. 3913031
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не позволить запустить процедуру дважды в один момент времени. Как? / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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