2016-03-01 159 views
1

我被Oracle監聽器配置卡住了。它正在監聽本地主機,但我無法通過外部機器訪問它。網絡工作正常,Oracle安裝在虛擬機上,我正在通過ssh工作。配置Oracle監聽器進行外部監聽

listener.ora文件:

LISTENER = 
    (DESCRIPTION_LIST = 
    (DESCRIPTION = 
    (ADDRESS_LIST= 
     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) 
     (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) 
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.110)(PORT = 1530)) 
    ) 
) 

ADR_BASE_LISTENER = /home/oracle/app/oracle 

tnsnames.ora

QSYSTEM = 
    (DESCRIPTION = 
    (ADDRESS_LIST= 
     (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) 
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.110)(PORT = 1530)) 
    ) 
    (CONNECT_DATA = 
     (SERVER = DEDICATED) 
     (SERVICE_NAME = QSYSTEM) 
    ) 
) 

其中QSYSTEM是數據庫的SID,並192.168.10.110是主機的netstat輸出的地址。

Proto Recv-Q Send-Q Local Address   Foreign Address   State  PID/Program name 
tcp  0  0 0.0.0.0:50904   0.0.0.0:*    LISTEN  9650/ora_d000_QSYST 
tcp  0  0 192.168.10.110:22  10.48.202.125:63350  ESTABLISHED 2994/sshd: oracle [ 
tcp  0  0 127.0.0.1:14468   127.0.0.1:1521   ESTABLISHED 9618/ora_pmon_QSYST 
udp  0  0 127.0.0.1:60990   0.0.0.0:*       9652/ora_s000_QSYST 
udp  0  0 127.0.0.1:20566   0.0.0.0:*       9650/ora_d000_QSYST 
udp  0  0 0.0.0.0:21371   0.0.0.0:*       9646/ora_mmon_QSYST 
udp  0  0 127.0.0.1:58024   0.0.0.0:*       9618/ora_pmon_QSYST 

lsnrctl status輸出:

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 02-MAR-2016 13:57:16 

Copyright (c) 1991, 2011, Oracle. All rights reserved. 

TNS-01150: The address of the specified listener name is incorrect 
NL-00303: syntax error in NV string 

我使用Oracle 11g標準的RHEL 7

解決方案: 當我換成本地主機與IP地址和適當的改變和格式化listener.oratnsnames.ora我建立了連接。

+0

192.168.10.110不是本地主機...是你用於ssh的地址嗎? (我可以在netstat中看到它,但它可能由VM進行NAT)。是否有防火牆允許端口22而不是端口1521? –

+0

是的,即時通訊使用此地址進行SSH連接。我讀過HOST = localhost它只監聽本地機器,並且此參數需要是另一個地址。大多數情況下,我已經看到它是主機名稱,但我不確定DNS配置是否正確,並將直接地址。 關閉防火牆以確保它不會干擾,但仍然沒有連接 –

+0

您的netstat輸出不包含端口1521,您能否檢查某些內容正在偵聽?你可以將'lsnrctl status'的輸出添加到問題中嗎?如果監聽程序已啓動並處於該地址,並且可以從該VM連接到該端口(例如,通過telnet),但不是從您的ssh連接到的計算機上,則它們在網絡中的某些內容會阻止它 - 服務器上的防火牆排除了一些其他網絡限制,甚至是客戶端計算機上的出站防火牆。 –

回答

0

如果你希望你的監聽器使用,你需要在listener.ora同時列出兩個地址來處理內部和外部連接,添加ADDRESS_LIST水平的括號:

LISTENER = 
    (DESCRIPTION_LIST = 
    (DESCRIPTION = 
     (ADDRESS_LIST= 
     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) 
     (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) 
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.110)(PORT = 1521)) 
    ) 
    ) 
) 

同一端口可以同時用於地址,或者如果您願意,他們可能會有所不同。如果它們不同,一個單獨的監聽器可能不那麼令人困惑,但它會以任何方式工作。

然後您需要停止並啓動偵聽器來接收更改。您可以使用lsnrctl status和/或netstat驗證它正在監聽的內容。

您可能還想通過查看LOCAL_LISTENER初始化參數來檢查數據庫的註冊方式。如果未設置或正在使用主機名,請檢查它是否解析爲您指定的IP地址之一 - 通過DNS或在/ etc/hosts中。如果無法正確解析,那麼它將無法註冊到監聽器,lsnrctl services將不會列出其服務名稱,並且您將無法使用服務名稱通過SQL * Net進行連接。 (或SID,因爲您沒有SID_LIST_LISTENER條目)。

+0

無法同時添加'localhost '和'192.168.10.110',出現錯誤,表明該地址已經很忙。但我只留下字符串與IP地址,現在我可以從外部連接。非常感謝您的幫助。 –

+0

這意味着你已經擁有了一個在1521上運行的監聽器,可能來自另一個Oracle家庭?還要檢查兩個地址上的netstat顯示在1521上監聽的內容,包括二進制文件的完整路徑(如果可以的話)。並檢查您的數據庫是否仍然愉快註冊。 –