2010-09-07 2 views
1

Кто-нибудь знает, как выселить или убить открытые соединения (при использовании или нет, это не имеет значения), если число соединений выше фиксированного предела (например, maxActive). В настоящее время я использую DBCP из Apache под Sun One 6.1. Заранее благодарен !,Как выселить или «убить» открытые соединения, если они превышают фиксированный предел (используя dbcp w/oracle)

+0

Лучше выяснить, как закрыть их, когда вы закончите с ними. Если вы дошли до того, что вам нужно беспокоиться о связях выше предела, скорее всего, ваш код ошибочен. – duffymo

+0

да, я знаю, что у нас есть ошибка, но это всего лишь обходной путь, пока мы ищем ошибку. Я просто хочу знать, есть ли способ сделать это. – jcosta

+0

, если вы убиваете открытые соединения, особенно когда они используются, вы можете создавать новые ошибки. Учитывая то, как написаны драйверы JDBC, уничтожение физического соединения сделает состояние объекта логического соединения непоследовательным и приведет только к «более странному» поведению. –

ответ

0

ALTER SYSTEM KILL SESSION «nnn, mmmm» может убивать сеансы (с nnn - SID и mmmm SERIAL #). Вы можете посмотреть v $ session seconds_in_wait и событие «SQL * Net сообщение от клиента» для сеансов, которые ничего не делали в то время. Это событие в основном говорит: «Я жду, когда клиент скажет мне, что делать дальше».

Кроме того, убедитесь сессия не имеет открытую транзакцию

select sid, serial# from v$session 
where event = 'SQL*Net message from client' 
and saddr not in (select ses_addr from v$transaction) 
order by seconds_in_wait desc; 

Это уродливое решение, хотя.