Кто-нибудь знает, как выселить или убить открытые соединения (при использовании или нет, это не имеет значения), если число соединений выше фиксированного предела (например, maxActive). В настоящее время я использую DBCP из Apache под Sun One 6.1. Заранее благодарен !,Как выселить или «убить» открытые соединения, если они превышают фиксированный предел (используя dbcp w/oracle)
1
A
ответ
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;
Это уродливое решение, хотя.
Лучше выяснить, как закрыть их, когда вы закончите с ними. Если вы дошли до того, что вам нужно беспокоиться о связях выше предела, скорее всего, ваш код ошибочен. – duffymo
да, я знаю, что у нас есть ошибка, но это всего лишь обходной путь, пока мы ищем ошибку. Я просто хочу знать, есть ли способ сделать это. – jcosta
, если вы убиваете открытые соединения, особенно когда они используются, вы можете создавать новые ошибки. Учитывая то, как написаны драйверы JDBC, уничтожение физического соединения сделает состояние объекта логического соединения непоследовательным и приведет только к «более странному» поведению. –