Oracle

從 SQL Developer 連接到 Oracle RAC?

  • April 13, 2016

我們已經在伺服器上建立了 RAC 數據庫。我們可以使用 SCAN 地址從伺服器上的 sqlplus 連接到數據庫。但是,如果我嘗試使用基於 SCAN 地址的 TNS 條目從客戶端電腦使用 SQL 開發人員連接到 RAC,則會顯示錯誤

12-APR-2016 22:33:07 * (CONNECT_DATA=(CID=(PROGRAM=SQL Developer)(HOST=__jdbc__)(USER=User))(SERVICE_NAME=racdb)) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.227.110)(PORT=63694)) * establish * racdb * 12516
TNS-12516: TNS:listener could not find available handler with matching protocol stack

客戶端電腦位於防火牆後面。這是 TNS 條目。

RACDB =
 (DESCRIPTION =
   (LOAD_BALANCE = ON)
   (FAILOVER = ON)
   (ADDRESS_LIST =
           (ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.1.149)(PORT = 1521))
           (ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.1.150)(PORT = 1521))
           (ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.1.151)(PORT = 1521))
       )
   (CONNECT_DATA =
     (SERVICE_NAME = racdb)
   )
 )

我們無法使用 DNS 從客戶端解析 SCAN IP,因此我們使用客戶端電腦上的 IP 地址。SCAN 的 IP 地址在客戶端使用 NAT 進行轉換。下面是他們在伺服器上設置的真實地址

# SCAN
#192.168.227.149 racdb-scan.esplink.mn racdb-scan
#192.168.227.150 racdb-scan.esplink.mn racdb-scan
#192.168.227.151 racdb-scan.esplink.mn racdb-scan

如果我們把TNS入口的IP地址改成VIP地址,就連接成功了,可以連接RAC數據庫了。

使用SCAN地址連接RAC有錯嗎?

看起來像 JDBC 11g NAT+RAC 問題。

使用 SCAN 的 JDBC 連接因 ORA-12516/ORA-12520 失敗(文件 ID 1555793.1)

使用單一客戶端訪問名稱 (SCAN) 的 JDBC 瘦 11g 連接失敗並出現錯誤:

ORA-12520: TNS:listener 找不到請求的伺服器類型的可用處理程序

ORA-12516: TNS: 偵聽器找不到具有匹配協議棧的實例

當客戶端和數據庫位於不同的網路上並且使用網路地址轉換 (NAT) 路由器進行轉換時。JDBC OCI 和 SQL*Plus 連接工作正常。使用 HOST vip 名稱的 JDBC 連接在 NAT 路由器上工作正常,只有使用 SCAN 的連接失敗。使用沒有 NAT 路由器的 SCAN 的 JDBC 瘦連接可以正常工作

上面的註釋建議將 JDBC 驅動程序升級到 12c。

每當您通過 SCAN 連接時,您的連接都會被重定向。以前版本的 Oracle JDBC 驅動程序無法正確處理該問題。

如果您下載最新的 SQL Developer,它附帶 12.1.0.2 JDBC 驅動程序。

我更喜歡的另一個解決方案是將 OCI 與 Oracle 客戶端一起使用而不是 JDBC(這使得取消 SQL Developer 中長時間執行的查詢成為可能)。安裝 Oracle 客戶端后,您可以在工具/首選項/數據庫/高級中進行配置。

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