Между локальными и удаленными сеансами базы данных существует взаимно-однозначное отношение.
Должно быть для следующих ситуаций:
Сеанс 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. Это может больше не быть проблемой.