2016-10-24 1 views
0

У меня есть SID и SERIAL#. Есть ли какой-либо последовательный способ проверить, жив ли сеанс и подключен ли он?Есть ли какой-либо последовательный способ проверить, жив ли сеанс в Oracle?

В настоящее время мое приложение использует простой запрос через GV$SESSION, чтобы получить эту информацию. Но похоже, что живая сессия может время от времени исчезать из представления в течение нескольких секунд, а затем снова появляется в представлении с теми же SID и SERIAL#.

Oracle documentation говорит о динамических представлений производительности как GV$SESSION:

Динамические представления производительности на основе виртуальных таблиц, построенных из структур памяти базы данных. Таким образом, это не обычные таблицы , хранящиеся в базе данных. Простая согласованность не гарантируется для просмотров, поскольку данные обновляются динамически.

Я думаю, что это причина, почему моя сессия исчезает с GV$SESSION. Есть ли другой способ получить эту информацию последовательно?

+0

С проблемой вы пытаетесь связаться по этому запросу? – OldProgrammer

+0

Я использую так называемые функции «Бизнес-замки» в своем приложении. Я храню эти блокировки как пары ключевых значений в отдельной таблице вместе с 'SID' и' SERIAL # 'сеанса, который содержит блокировку. Позже, когда какой-либо другой сеанс пытается восстановить замок, я должен проверить, жив ли держатель блокировки. –

+0

Я не могу сказать, что я когда-либо видел, как строка исчезает с 'gv $ session' на пару секунд. У вас нет других предикатов, которые могут привести к возврату строк (или нет)? Комбинация 'sid, serial #' может быть повторно использована позже, но это займет гораздо больше нескольких секунд. Вы на самом деле используете RAC или было бы разумно просто использовать 'v $ session'? –

ответ

0

Похоже, что более надежный способ проверить, жив ли сеанс в Oracle, использовать пакет DBMS_SESSION, а именно функцию DBMS_SESSION.IS_SESSION_ALIVE.

Смежные вопросы