Принудительный тайм-аут SQL Oracle при ответе пользователя - PullRequest
0 голосов
/ 08 мая 2020

У меня есть процедура PL / SQL, в которой есть пара подсказок, требующих от пользователя ввода некоторой информации для обработки. Например, номера позиций, бизнес-единицы и т. Д.

enter image description here

Это также требует подтверждения в конце скрипта .

enter image description here

Это позволяет нескольким пользователям полагаться на один и тот же сценарий для массовой настройки данных для тестирования (проекты и т. Д.). Однако есть некоторые, безусловно, беззаботные пользователи, которые оставляют запрос подтверждения COMMIT открытым, тем самым блокируя запись и не позволяя другим пользователям работать.

Когда мы go пользователям, которые запись заблокирована (мы можем идентифицировать их только с помощью команды администраторов баз данных, что занимает много времени), мы просим их закрыть свои вкладки, и всегда отображается:

enter image description here

Есть ли способ принудительно установить тайм-аут (с помощью того же SQL скрипта) при прохождении указанного c таймлапса, который вызовет мой обработчик WHENEVER SQLERROR для автоматического c отката?

1 Ответ

2 голосов
/ 08 мая 2020

Вы можете попытаться ограничить IDLE_TIME пользователей коротким временем. Я использовал 1 минуту для демонстрации:

CREATE PROFILE couldntcareless LIMIT IDLE_TIME 1;
ALTER USER xxx PROFILE couldntcareless;

Если пользователь сейчас бездействует дольше минуты, изменения откатываются и сеанс завершается.

Социальная подсказка : Я полагаю, вы не подружитесь с этой функцией. Обычно я идентифицирую обидчиков, просматривая базу данных, связываюсь с ними и говорю им, что они действительно блокируют работу коллег. Обычно они не осознавали этого факта, очень смущались и старались улучшить свое поведение. Если у вас нет разрешения на v$locked_object, обратитесь к администратору базы данных, чтобы создать представление, которое отфильтровывает ваши таблицы и делает это представление доступным вам.

Технический совет: системный параметр RESOURCE_LIMIT должен быть настроен на использование этих ограничений, очевидно, непосредственно в PDB, и вам, возможно, придется перезапустить базу данных:

ALTER SYSTEM SET RESOURCE_LIMIT=TRUE SCOPE=BOTH;
...