В моем понимании, создание профиля с установленным на idle_time
определенным значением (в минутах) и создание пользователя с этим профилем должно вызывать статус SNIPED
для сеанса этого пользователя, если он простаивает дольше, чем idle_time
. Когда пользователь пытается выполнить запрос после того, как это произошло, он получает сообщение, что ему необходимо снова подключиться.
Первый вопрос: это правильно? Если да, то читайте дальше:
Я запускаю тестовый скрипт в sqlplus следующим образом (очевидно, без заполнителей):
connect system/<password>@<tns>
CREATE PROFILE test_profile LIMIT idle_time 1;
CREATE USER test_user PROFILE test_profile IDENTIFIED BY test_user;
GRANT CREATE SESSION TO test_user;
GRANT ALTER SESSION TO test_user;
GRANT SELECT ON <schema>.<table> TO test_user;
disconnect;
connect test_user/test_user@<tns>
SELECT * FROM <schema>.<table>;
Все работает до этого момента; окно sqlplus все еще открыто. Теперь я открываю дополнительное окно sqplus и подключаюсь, используя системную учетную запись, выполняя следующий запрос после некоторого выполнения других действий:
SELECT username, status, seconds_in_wait FROM v$session WHERE username = 'test_user';
Я получаю что-то вроде:
USERNAME STATUS SECONDS_IN_WAIT
--------- -------- ---------------
TEST_USER INACTIVE 1166
Почему статус не был установлен на SNIPED
?
Очевидно, что если я выполню другой запрос из окна sqlplus test_user, я не получу сообщение с просьбой восстановить соединение.