Авг 102011
 

Эта ошибка возникает при использовании пакета UTL_TCP (или любого другого, который открывает TCP-соединение к какому-либо сервису из сессии БД, например, UTL_HTTP, UTL_SMTP, etc.) если число открытых соединений превышает 16 (это значение "зашито" в код ORACLE и не настраивается) на каждую сессию.
Чтобы победить эту проблему, нужно всегда явно закрывать соединение. Чаще всего забывают закрыть соединение в блоке исключений. В таком случае, при возникновении исключения соединение остаётся. Достаточно исключению возникнуть несколько раз, и "критическая" масса соединений накопится.
Т.е. правильно делать так:

CREATE OR REPLACE PROCEDURE my_proc
	-- Наше соединение
	conn UTL_TCP.CONNECTION;
BEGIN
	-- Открываем соединение
	conn  := UTL_TCP.OPEN_CONNECTION(...);
	-- Делаем что-то ещё
	--....
 
	EXCEPTION WHEN OTHERS THEN 
		-- Закрываем соединение и делаем что-то ещё
		UTL_TCP.CLOSE_CONNECTION (conn);
END;

P.S. Более подробно - см. Metalink: Doc ID 280838.1.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

(обязательно)

(обязательно)