Время последней активности через OraSession

Обсуждение возникших проблем, предложений и ошибок ODAC компонентов

Ответить
azam123
Сообщения: 2
Зарегистрирован: Вт 24 июл 2018 07:01

Время последней активности через OraSession

Сообщение azam123 » Вт 24 июл 2018 07:24

Добрый день, имеется ли возможность с помощью компонента OraSession определить время простоя соединения? (время в течение которого не было никаких обращений к серверу через эту сессию или время, когда было последнее обращение). Это нужно для того, чтобы отключать клиентов, которые длительное время не используют соединение через конкретный экземпляр OraSession.

Odac 9.4.12 (Embarcadero XE7)

MaximG
Devart Team
Сообщения: 91
Зарегистрирован: Пн 06 июл 2015 12:51

Re: Время последней активности через OraSession

Сообщение MaximG » Ср 25 июл 2018 08:17

Для реализации описываемого Вами поведения можно воспользоваться событием OnSQL компонента OraSQLMonitorSQL : https://www.devart.com/odac/docs/devart ... .onsql.htm . В обработчике данного события Вы можете реализовать определение времени отправки на сервер последнего SQL запроса

azam123
Сообщения: 2
Зарегистрирован: Вт 24 июл 2018 07:01

Re: Время последней активности через OraSession

Сообщение azam123 » Ср 25 июл 2018 10:08

Спасибо за ответ. Но как в этом случае быть с такой ситуацией:

1. Пользователь делает запрос в OraQuery, в котором свойство FetchRows = 25:

Код: Выделить всё

select * from table_with_100_millions_rows
2. На сервере открывается курсор, который, по мере прокрутки пользователем ползунка в DbGrid, возвращает по 25 записей.
3. SQL-монитор, с такими настройками, покажет лишь две записи:
  • Connect: user@server::sid [OraSession1$026C0030]
  • select * from table_with_100_millions_rows

Код: Выделить всё

 
 object OraSQLMonitor1: TOraSQLMonitor
    Options = [moDialog, moSQLMonitor, moDBMonitor, moCustom, moHandled]
    TraceFlags = [tfQPrepare, tfQExecute, tfQFetch, tfError, tfStmt, tfConnect, tfTransact, tfBlob, tfService, tfMisc, tfParams, tfObjDestroy, tfPool]
    OnSQL = OraSQLMonitor1SQL
    Left = 408
    Top = 8
  end
В этом случае, пользователь может просматривать содержимое выборки, обмен данными через OraSession будет идти, но в OraSQLMonitor'е я этого не увижу и посчитаю, что соединение простаивает. Есть ли возможность отслеживать и fetch-события с помощью OraSQLMonitor ?

P.S. Возможности использовать события OraQueryAfterFetch и OraQueryBeforeFetch у меня нет ввиду архитектурных особенностей приложения.

MaximG
Devart Team
Сообщения: 91
Зарегистрирован: Пн 06 июл 2015 12:51

Re: Время последней активности через OraSession

Сообщение MaximG » Пт 27 июл 2018 15:34

В настоящее время мы можем предложить Вам только описываемый выше способ отслеживания активности соединения с помощью наших компонент. В том случае, если Вы являетесь обладателем лицензии Professional Edition with source code, Вы можете попробовать реализовать описываемую возможность самостоятельно. В этом случае мы сможем предоставить Вам информацию о том, где и как именно Вам будет удобнее внести необходимые изменения в исходный код нашего продукта.

Ответить