Сценарий Oracle для получения длинных активных сессий - PullRequest
1 голос
/ 05 декабря 2011

Есть ли какой-нибудь сценарий, который вы могли бы предоставить для v$session? Кажется, я столкнулся с проблемой, из-за которой мои активные сессии оракула заполняются. Это когда я делаю

SELECT * FROM V$SESSION WHERE STATUS = 'ACTIVE'

Моя проблема в том, что мне нужен скрипт, который мог бы определить, как долго удерживалось соединение и кто его удерживал? Интересно, откуда я это взял. Если возможно, было бы здорово, если бы я мог автодозвониться до этих сессий. Я хотел бы знать, как долго они проводились с момента последней команды. Еще одна вещь, которую стоит отметить, - нет текущего оператора, связанного с сеансами SQL, которые я вижу.

Ответы [ 2 ]

0 голосов
/ 06 декабря 2011

Я полагаю, что у вас есть приложение, которое неправильно закрывает соединения, чтобы определить виновника, измените исходный скрипт на:

SELECT username,
    program,
    terminal,
    COUNT (*)
FROM v$session
WHERE status = 'ACTIVE'
GROUP BY username,
    program,
    terminal
ORDER BY COUNT (*) DESC

Надеемся, что это поможет вам точно определить, где используются соединения.

0 голосов
/ 05 декабря 2011

Я не уверен, что понимаю, что именно вы ищете.

Что именно означает "как долго удерживалось соединение"? Столбец LAST_CALL_ET в V$SESSION для сеансов в активном состоянии будет указывать количество секунд с момента последнего вызова. Столбец LOGON_TIME в V$SESSION покажет вам, когда сеанс базы данных был изначально создан. Вы ищете другой показатель? Если да, можете ли вы описать метрику немного подробнее?

Что конкретно означает "кто его держал"? В столбце USERNAME V$SESSION указано имя пользователя Oracle, а в OSUSER - пользователь операционной системы на клиентском компьютере, открывшем сеанс. Вы ищете другой показатель? Если да, можете ли вы описать этот показатель более подробно? Например, вы ищете имя конечного пользователя в трехуровневом приложении?

Я не уверен, что означает "автодозвон" в этом контексте.

Разве «как долго они удерживались с момента выполнения последней команды», и отличается от «как долго удерживалось соединение»? Если это так, похоже, вы описываете разницу между LAST_CALL_ET и LOGON_TIME.

...