Июл 082011
 

Разработчики наткнулись на интересный баг: при работе через dblink сессия на удалённой базе подвисает с событием ожидания enq: DX - contention. Вот testcase, демонстрирующий проблему:

DECLARE
PROCEDURE test_case IS
PRAGMA AUTONOMOUS_TRANSACTION;
cnt NUMBER;
BEGIN
	SELECT COUNT(*) INTO cnt FROM [email protected];
	COMMIT;
END;
 
BEGIN
	test_case;
END;
/

Если таблица более-менее крупная (~10K записей), то сессия на удалённой базе подвиснет на неограниченное время с тем самым ожиданием. Баг исправлен на всех версиях БД начиная с 11.2.0.2. На металинке есть статья по этому поводу: Doc ID: 730423.1

Есть 4 способа справиться с проблемой.

  1. Отказаться от dblink, попробовать перенести все данные на одну базу
  2. Отказаться от autonomous transactions
  3. Создать нужную функцию на удалённой базе (на мой взгляд, этот способ проще всего)
  4. Использовать БД версии 11: либо обновиться до 11.2.0.2, либо установить one-off patch (в статье 730423.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="">

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

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