Пул соединений JDBC Oracle со ссылкой на базу данных - PullRequest
1 голос
/ 26 ноября 2009

Я создаю веб-приложения J2EE с базой данных Oracle. Сервер приложений использует пул соединений JDBC с базой данных A Oracle (например, не более 20 соединений), а некоторые из выполняемых запросов используют таблицы в удаленной базе данных B Oracle по каналу связи.

Если сервер приложений создает 20 подключений к базе данных A и все запросы выполняют поиск данных в базе данных B, будет ли база данных A создавать 20 подключений к базе данных B? Или все запросы проходят через один и тот же туннель соединения?

1 Ответ

2 голосов
/ 26 ноября 2009

Между локальными и удаленными сеансами базы данных существует взаимно-однозначное отношение. Должно быть для следующих ситуаций: Сеанс A1 в локальной БД запускает INSERT INTO table @ B VALUES ('A1'); Эта вставка является частью транзакции сеанса A1.

Идет сессия A2 и выполняется SELECT * FROM таблица @ B. Поскольку сеанс A1 еще не зафиксирован, сеанс A2 не должен видеть строку. Поэтому ему нужен удаленный сеанс, отличный от сеанса, принадлежащего A1.

Точно так же вы можете иметь все 20 сеансов в базе данных A, одновременно выполняющих запросы к базе данных B.

Существует процедура DBMS_SESSION.CLOSE_DATABASE_LINK, которая отключит удаленное соединение. У меня были некоторые проблемы с этим (база данных 9i), когда он отказывался закрывать их, требуя «невыполненных транзакций» даже сразу после фиксации. Кажется, это относится к кешированным курсорам PL / SQL. Это может больше не быть проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...