Пусть база данных выполняет свою работу!
(Это решение предполагает, что вы можете получить помощь от администраторов баз данных или у вас есть доступ SYSDBA к базе данных.)
Сначала создайте профиль, которыйразрешает только 1 сеанс для пользователя:
CREATE PROFILE single_session_profile
LIMIT SESSIONS_PER_USER 1;
Затем создайте пользователя с нужным профилем или измените существующего пользователя для использования профиля:
CREATE USER user_a
IDENTIFIED BY user_id
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON users
PROFILE single_session_profile;
или
ALTER USER user_a
PROFILE single_session_profile;
Наконец, для базы данных должны соблюдаться следующие ограничения:
ALTER SYSTEM SET RESOURCE_LIMIT = TRUE SCOPE = MEMORY;
(SCOPE = MEMORY
включает принудительное применение ограничения для текущего запущенного экземпляра базы данных; если вы хотите сделать его постоянным, то есть включенным после базы данныхпри перезапуске необходимо использовать SCOPE = BOTH
, где BOTH
означает оба MEMORY
и SPFILE
, то есть файл инициализации БД. Если база данных использует не новый формат SPFILE
, а старый PFILE
(init.ora
), тогда вам нужно добавить параметр RESOURCE_LIMIT
в init.ora
и перезапустить базу данных.)
Вот и все.Если user_a
попытается войти в систему дважды, он получит:
ORA-02391: exceeded simultaneous SESSIONS_PER_USER limit