Linux

JDBC oracle監聽隨機埠

  • March 6, 2022

我的偵聽器嘗試將隨機埠分配給 JDBC 連接時遇到問題。

我們有一個 19c oracle db 在 RHEL 伺服器上執行,打開了兩個埠 1523 和 1524。當應用程序嘗試使用 JDBC 連接時,它連接到分配給偵聽器的上述埠之一,但是我們可以在日誌中看到偵聽器分配了一些隨機埠範圍為 30000-65000。

...(HOST=`_jdbc_`)(USER=xyz))) * (ADDRESS=(PROTOCOL=tcp)(HOST=1.2.3.4)(PORT=60579)) * establish * hostname * 0

但應用程序不會收到有關連接的資訊,因為這些隨機埠沒有打開。

知道我們如何設置要使用的特定埠而不是那些隨機埠嗎?

日誌中的埠是客戶端機器上的埠,而不是伺服器上的埠。客戶端埠在您指定的範圍內基本上是隨機的,因為它們是由客戶端作業系統根據傳出連接的需要按順序分配的。它們無法設置。

例如,netstat -an在建立數據庫連接後從我的客戶端執行會顯示以下內容:

Active Connections

Proto  Local Address          Foreign Address     State
TCP    10.89.0.116:52861      10.89.0.65:1521     ESTABLISHED

請注意,伺服器埠仍然是 1521,而我的客戶端埠在您指定的同一高範圍內。在您的客戶端或數據庫伺服器上執行netstat -an,您應該能夠確認在連接的每一端使用的實際埠號。

通常防火牆可以處理這個問題,因為它可以“看到”移交給客戶端的埠是正常的並且應該被允許。任何有狀態的防火牆都應該能夠應對這種情況。

如果由於某種原因未正確配置,您可以配置共享伺服器連接,您可以在調度上設置固定埠號。請參閱DISPATCHERS 初始化參數屬性

引用自:https://dba.stackexchange.com/questions/295907