Добрый день, имеется ли возможность с помощью компонента OraSession определить время простоя соединения? (время в течение которого не было никаких обращений к серверу через эту сессию или время, когда было последнее обращение). Это нужно для того, чтобы отключать клиентов, которые длительное время не используют соединение через конкретный экземпляр OraSession.
Odac 9.4.12 (Embarcadero XE7)
Время последней активности через OraSession
Re: Время последней активности через OraSession
Для реализации описываемого Вами поведения можно воспользоваться событием OnSQL компонента OraSQLMonitorSQL : https://www.devart.com/odac/docs/devart ... .onsql.htm . В обработчике данного события Вы можете реализовать определение времени отправки на сервер последнего SQL запроса
Re: Время последней активности через OraSession
Спасибо за ответ. Но как в этом случае быть с такой ситуацией:
1. Пользователь делает запрос в OraQuery, в котором свойство FetchRows = 25:
2. На сервере открывается курсор, который, по мере прокрутки пользователем ползунка в DbGrid, возвращает по 25 записей.
3. SQL-монитор, с такими настройками, покажет лишь две записи:
В этом случае, пользователь может просматривать содержимое выборки, обмен данными через OraSession будет идти, но в OraSQLMonitor'е я этого не увижу и посчитаю, что соединение простаивает. Есть ли возможность отслеживать и fetch-события с помощью OraSQLMonitor ?
P.S. Возможности использовать события OraQueryAfterFetch и OraQueryBeforeFetch у меня нет ввиду архитектурных особенностей приложения.
1. Пользователь делает запрос в OraQuery, в котором свойство FetchRows = 25:
Код: Выделить всё
select * from table_with_100_millions_rows
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
P.S. Возможности использовать события OraQueryAfterFetch и OraQueryBeforeFetch у меня нет ввиду архитектурных особенностей приложения.
Re: Время последней активности через OraSession
В настоящее время мы можем предложить Вам только описываемый выше способ отслеживания активности соединения с помощью наших компонент. В том случае, если Вы являетесь обладателем лицензии Professional Edition with source code, Вы можете попробовать реализовать описываемую возможность самостоятельно. В этом случае мы сможем предоставить Вам информацию о том, где и как именно Вам будет удобнее внести необходимые изменения в исходный код нашего продукта.