У меня есть SID
и SERIAL#
. Есть ли какой-либо последовательный способ проверить, жив ли сеанс и подключен ли он?Есть ли какой-либо последовательный способ проверить, жив ли сеанс в Oracle?
В настоящее время мое приложение использует простой запрос через GV$SESSION
, чтобы получить эту информацию. Но похоже, что живая сессия может время от времени исчезать из представления в течение нескольких секунд, а затем снова появляется в представлении с теми же SID
и SERIAL#
.
Oracle documentation говорит о динамических представлений производительности как GV$SESSION
:
Динамические представления производительности на основе виртуальных таблиц, построенных из структур памяти базы данных. Таким образом, это не обычные таблицы , хранящиеся в базе данных. Простая согласованность не гарантируется для просмотров, поскольку данные обновляются динамически.
Я думаю, что это причина, почему моя сессия исчезает с GV$SESSION
. Есть ли другой способ получить эту информацию последовательно?
С проблемой вы пытаетесь связаться по этому запросу? – OldProgrammer
Я использую так называемые функции «Бизнес-замки» в своем приложении. Я храню эти блокировки как пары ключевых значений в отдельной таблице вместе с 'SID' и' SERIAL # 'сеанса, который содержит блокировку. Позже, когда какой-либо другой сеанс пытается восстановить замок, я должен проверить, жив ли держатель блокировки. –
Я не могу сказать, что я когда-либо видел, как строка исчезает с 'gv $ session' на пару секунд. У вас нет других предикатов, которые могут привести к возврату строк (или нет)? Комбинация 'sid, serial #' может быть повторно использована позже, но это займет гораздо больше нескольких секунд. Вы на самом деле используете RAC или было бы разумно просто использовать 'v $ session'? –