Linux
ORA-12505, TNS: 監聽器在更改埠號後目前不知道 SID
我正在嘗試將 oracle tnslsnr 埠號從預設更改為其他埠。在我將 tnslsnr 的埠號從 1521 更改為 2000 後,我開始收到 ORA-12505,TNS:listener 目前不知道來自 JDBC 驅動程序的 SID。只要埠是 1521,一切正常。
我的 listener.ora 文件的內容:
# Generated by Oracle configuration tools. LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 2000)) ) )
我的 tnsnames.ora 文件的內容:
TESTDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 2000)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = testdb.localdomain) ) )
我嘗試連接的 JDBC URL:jdbc:oracle:thin:@testhost:2000:testdb
數據庫版本為12c,作業系統為CentOS 5.8
TNSNAMES 是“連接資訊抽象”。這是您隱藏主機名、故障轉移資訊、埠號、服務名和天知道的地方。
為什麼要使用主機名、埠和 sid 進行連接?
jdbc:oracle:thin:@testhost:2000:testdb
嘿!因為你沒有使用 TNSNAMES!您的連接字元串是 HOST 連接。主機連接直接連接到主機,不會注意到您的 tnsnames.ora 文件。(你還沒有指示 JDBC 去那裡看……)
其次,不建議連接到指定 SID 的 oracle 數據庫。而是指定 SERVICE_NAME。(對於 12c,不應再使用 SID)
jdbc:oracle:thin:@testhost:2000/SERVICE_NAME
要辨識您的實例的 service_name:
$sqlplus / as sysdba SQL>show parameter service
要將 TNSNAMES 用於 jdbc,請查看此處
監聽器是否在埠 2000 上監聽?
#netstat -tulpn | grep :2000
實例嘗試使用預設埠值 1521 註冊到偵聽器。這稱為動態實例註冊。使用非預設埠值時,向偵聽器的註冊將失敗。為了對此進行調整,初始化參數 LOCAL_LISTENER 如下所示:
$sqlplus / as sysdba SQL>alter system set LOCAL_LISTENER='(ADDRESS =(PROTOCOL=TCP)(HOST=localhost)(PORT=2000);
現在它將起作用。100%
到這裡查看LOCAL_LISTENER參數的詳細解釋