Пул соединений JDBC Oracle со ссылкой на базу данных

StackOverflow https://stackoverflow.com/questions/1801592

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top