powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не позволить запустить процедуру дважды в один момент времени. Как?
18 сообщений из 18, страница 1 из 1
Не позволить запустить процедуру дважды в один момент времени. Как?
    #39564311
Доброго дня!

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

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

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

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

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

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

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

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

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

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

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


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