Database
WLS:辨識數據庫會話源自的託管伺服器
我們正在使用 WLS 伺服器,我們在其上配置數據源 (DS) 和託管伺服器。
出於故障轉移的原因,我們的主應用程序被部署在兩個獨立的託管伺服器上(我們稱它們為app_1和app_2)——但是這兩個伺服器都使用相同的數據源。
數據源是 Oracle DB 的 JDBC 數據源。
+-----------------------------+ | WLS Domain | |-----------------------------| |+------------+ +------------+| || | | || || app_1 | | app_2 || || | | || |+-----|------+ +-----|------+| |+-----v--------------v------+| || Data Source || |+-------------|-------------+| +--------------|--------------+ | +-----V-----+ | | session1, session2, session3, ... | ORACLE DB | | | ~is session1 from app_1 or app_2? +-----------+
現在我們的問題:
- 我們希望能夠在數據庫端辨識某個數據庫會話源自哪個託管伺服器(即app_1或app_2)。
問題是:
由於兩個託管伺服器都訪問相同的數據源,因此在數據庫上打開的數據庫會話(到目前為止)無法區分。這是一個可以解決的問題嗎?還是 WLS 託管伺服器使用域配置數據源的方式只是設置為使託管伺服器對數據庫後端完全不可見?
我們已經嘗試使用“init SQL”機制將會話元資訊添加到 Oracle DB 會話。但是由於數據源是以與伺服器無關的方式設置的,因此 init SQL 不能包含有關最終將使用它的託管伺服器的任何資訊。
如果您的託管伺服器位於同一台主機上,我相信沒有本地方法可以找到它。如果它們在不同的主機上,您可以使用 Oracle 端 v$session 上的 machine 列來辨識它的來源。
另一種選擇是使用一些監控/分析工具。我不確定哪些會告訴你數據庫上的會話 id,但他們肯定可以告訴你在數據庫上做了什麼。我使用的可以執行此操作的工具有: - 安裝了 JVM 診斷的 Oracle 企業管理器;- CA IntroScope(我相信現在稱為 CA APM);- Compuware 動態跟踪;- 應用動力學。
我敢肯定還有很多。