Как автоматически закрывать сессию после истечения заданного времени с момента старта?

Xочу добится, чтобы сессии БД закрывались автоматически, если со времени старта прошло более 1 часа.

Как это можно сделать?


Свободный перевод вопроса how to kill active sessions oracle automatically от участника @Tigran Shahnazaryan


Ответы (1 шт):

Автор решения: 0xdb

Moжно просто создать профиль и установить в нем тайм-аут подключения и/или неактивности. И назначть этот профиль пользователям по мере необходимости.

Из документации к CREATE PROFILE:

If a user exceeds the CONNECT_TIME or IDLE_TIME session resource limit, then the database rolls back the current transaction and ends the session. When the user process next issues a call, the database returns an error.
[...]
CONNECT_TIME
Specify the total elapsed time limit for a session, expressed in minutes.
IDLE_TIME
Specify the permitted periods of continuous inactive time during a session, expressed in minutes. Long-running queries and other operations are not subject to this limit.

Воспроизводимый пример:

create profile timeLimited limit
    connect_time 1
    idle_time 3
/
alter user me profile timeLimited;

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

SQL> show user
USER is "ME"
SQL> select 1 from dual;

         1
----------
         1

SQL> /
select 1 from dual
*
ERROR at line 1:
ORA-02399: exceeded maximum connect time, you are being logged off

Или будет следующее сообщение об ошибке, после 3 минут неактивности:

ORA-02396: exceeded maximum idle time, please connect again
→ Ссылка