Назад | Перейти на главную страницу

WLS: идентификация управляемого сервера, с которого начинается сеанс БД

Мы используем WLS-серверы, на которых настраиваем источники данных (DS) и управляемые серверы.

По причинам аварийного переключения наше основное приложение деполируется на двух отдельных управляемых серверах (давайте назовем их app_1 и приложение_2) - но оба эти сервера используют один и тот же источник данных.

Источник данных - это источник данных JDBC для базы данных Oracle.

+-----------------------------+
| WLS Domain                  |
|-----------------------------|
|+------------+ +------------+|
||            | |            ||
||   app_1    | |   app_2    ||
||            | |            ||
|+-----|------+ +-----|------+|
|+-----v--------------v------+|
||        Data Source        ||
|+-------------|-------------+|
+--------------|--------------+
               |
         +-----V-----+
         |           |  session1, session2, session3, ...
         | ORACLE DB |  
         |           |                  ~is session1 from app_1 or app_2?
         +-----------+

Теперь наша проблема:

Проблема в:
Поскольку оба управляемых сервера обращаются к одному и тому же источнику данных, сеансы БД, открытые в БД, (пока) неразличимы. Это проблема, которую можно решить? Или способ, которым управляемые серверы WLS используют настроенный доменом источник данных, просто настроен таким образом, что управляемый сервер полностью невидим для бэкэнда БД?

Мы уже пытались добавить метаинформацию сеанса в сеанс Oracle DB с помощью механизма init SQL. Но поскольку источник данных настроен независимо от сервера, init SQL не может содержать никакой информации об управляемом сервере, который в конечном итоге будет его использовать.

Если ваши управляемые серверы находятся на одном хосте, я считаю, что нет собственного способа узнать это. Если они находятся на разных хостах, вы можете использовать столбец машины в v $ session на стороне Oracle, чтобы определить, откуда он.

Другой вариант - использовать какой-нибудь инструмент для мониторинга / профилирования. Я не уверен, какие из них сообщат вам идентификатор сеанса в базе данных, но они определенно могут сказать вам, что было сделано в базе данных. Для этого я использовал следующие инструменты: - Oracle Enterprise Manager с установленной JVM Diagnostics; - CA IntroScope (теперь, кажется, называется CA APM); - Compuware Dynatrace; - AppDynamics.

Я уверен, что их гораздо больше.