Oracle LISTENER 主機名修改為IP地址后LISTENER無法監聽到實例 oracle監聽錯誤與hosts文件配置


  為什么listener.ora文件里面HOST后面到底應該輸入IP地址還是主機名。我的經驗告訴我,這邊最好使用主機名。很多的時候,一個機器綁定的不只一個IP地址,如HOST后面是IP地址,那么ORACLE的listener只會監聽指定的IP地址的訪問請求,本機其它IP地址的連接都會拒絕的。另外,創建監聽的時候,listener.ora文件默認創建的就是主機名。那么,如果沒有特別的需要,就不要再去畫蛇添足的修改host_name為IP地址了。

.oratnsnames.ora文件中的HOST信息從原來的主機名字修改為IP地址后,監聽可以啟動,但是無論如何也監聽不到數據庫實例的信息(即使反復重啟數據庫)。

修改后重新啟動監聽,但是監聽一直保持在如下的狀態
LSNRCTL> status
Connecting 

to(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=144.194.192.183)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 10.2.0.1.0 - Production
Start Date                21-JUL-2009 14:34:20
Uptime                    0 days 0 hr. 0 min. 36 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /oracle/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
Listener Log File         /oracle/app/oracle/product/10.2.0/db_1/network/log/listener.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=144.194.192.183)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

.【問題原因】
罪魁禍首在/etc/hosts文件!!
先看一下在我處理之前該文件的內容:
[root@testdb ~]# cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1   testdb  localhost.localdomain   localhost
::1     localhost6.localdomain6 localhost6

在這種默認配置下(操作系統后的狀態),主機名字和本機的IP地址沒有對應起來.

.【問題解決】
1)將/etc/hosts內容修改為:
[root@testdb ~]# cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1       localhost.localdomain   localhost
::1     localhost6.localdomain6 localhost6
144.194.192.183   testdb

比較一下與之前文件的不同,這里修改的內容如下:
1)將127.0.0.1后面的testdb主機名刪除
2)添加IP地址和主機名對應關系144.194.192.183   testdb

通過ping主機名testdb的方式驗證一下修改后的效果:
ora10g@testdb /home/oracle$ ping testdb
PING testdb (144.194.192.183) 56(84) bytes of data.
64 bytes from testdb (144.194.192.183): icmp_seq=1 ttl=64 time=0.082 ms
64 bytes from testdb (144.194.192.183): icmp_seq=2 ttl=64 time=0.047 ms
64 bytes from testdb (144.194.192.183): icmp_seq=3 ttl=64 time=0.050 ms
到此,主機名testdbIP地址144.194.192.183建立起了對應關系。

2)重新啟動監聽

oracle監聽器啟動錯誤-TNS-12546: TNS:permission denied

看下監聽器狀態

    oracle@linux-34:~> lsnrctl status  
      
    LSNRCTL for Linux: Version 11.1.0.6.0 - Production on 14-OCT-2011 09:12:37  
      
    Copyright (c) 1991, 2007, Oracle.  All rights reserved.  
      
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=linux-34.site)(PORT=1521)))  
    TNS-12541: TNS:no listener  
     TNS-12560: TNS:protocol adapter error  
      TNS-00511: No listener  
       Linux Error: 111: Connection refused  
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))  
    TNS-12541: TNS:no listener  
     TNS-12560: TNS:protocol adapter error  
      TNS-00511: No listener  
       Linux Error: 111: Connection refused  

啟動下試試

    oracle@linux-34:~> lsnrctl start  
      
    LSNRCTL for Linux: Version 11.1.0.6.0 - Production on 14-OCT-2011 09:12:45  
      
    Copyright (c) 1991, 2007, Oracle.  All rights reserved.  
      
    Starting /home/oracle/product/11.1.0/db_1/bin/tnslsnr: please wait...  
      
    TNSLSNR for Linux: Version 11.1.0.6.0 - Production  
    System parameter file is /home/oracle/product/11.1.0/db_1/network/admin/listener.ora  
    Log messages written to /home/oracle/diag/tnslsnr/linux-34/listener/alert/log.xml  
    Error listening on: (ADDRESS=(PROTOCOL=ipc)(PARTIAL=yes)(QUEUESIZE=1))  
    No longer listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=linux-34.site)(PORT=1521)))  
    TNS-12546: TNS:permission denied  
     TNS-12560: TNS:protocol adapter error  
      TNS-00516: Permission denied  
       Linux Error: 13: Permission denied  
      
    Listener failed to start. See the error message(s) above...  

竟然報TNS-12546: TNS:permission denied
查看下 /var/tmp/.oracle/tmp/.oracle 這兩個目錄的權限訪問。

    linux-34:~ # ls -lrtd /tmp/.oracle  
    drwxrwxrwx 2 root root 4096 May  9 16:01 /tmp/.oracle  
      
    linux-34:~ # ls -lrtd /var/tmp/.oracle  
    drwxr-xr-x 2 root root 4096 Oct 14 09:45 /var/tmp/.oracle  

原因應該就在這了,/var/tmp/.oracle755權限,把它修改為777
view plainprint?

    linux-34:~ # chmod -R 777 /var/tmp/.oracle 

================================================================

oracle監聽錯誤與hosts文件配置

 ORACLE數據庫的監聽起不來報錯,很快解決了。在這里記錄一下遇到的問題,方便備查。在數據庫listener.ora文件里面HOST后面到底應該輸入IP地址還是主機名?很多人可能有不同的做法。我的經驗是最好使用主機名。比如說,一個機器綁定的不只一個IP地址,你在HOST后面寫的是IP地址,那么ORACLElistener只會監聽指定IP地址的訪問請求,本機其它IP地址的連接都會拒絕的。而且創建監聽的時候,listener.ora文件默認創建的就是主機名。在listener.ora文件里HOST后面如果是主機名,那么就會與/etc/hosts這個文件扯上關系了。

這次出現的問題,就是因為研發人員不小心修改了主機名,而在/etc/hosts文件里又沒有修改主機名和IP的對應造成的。
 我們看報錯截圖:

當你查找1521端口時發現PMON(缺省情況下,PMON TCP/IP 的缺省本地地址端口1521- 處的本地監聽程序注冊服務信息)
# netstat -antp | grep 1521
 tcp      0   1    192.168.1.252:36842         202.106.0.20:1521     SYN_SENT 28794/ora_pmon_orcl
檢查202.106.0.20這個ip到底哪來的?
 在 /etc/hosts 里居然多了這條記錄
202.106.0.20         wxtest
不知道是誰加上的,從來沒有這個部署需求。先不管了,直接把這條語句注釋掉
 重新啟動數據庫,重新啟動監聽,一切正常了!
 附圖:
 

 

補充:/etc/hosts文件相關的幾個錯誤。
1/etc/hosts文件oracle沒有權限訪問
 這時候oracle用戶去啟動監聽會報如下錯誤
TNS-12545: Connect failed because target host or object does not exist
 TNS-12560: TNS:protocol adapter error
 TNS-00515: Connect failed because target host or object does not exist
Linux Error: 13: Permission denied

2/etc/hosts文件里面的主機名對應的IP地址沒有正確在本機綁定
 這時候oracle用戶去啟動監聽會報如下錯誤
TNS-12535: TNS:operation timed out
 TNS-12560: TNS:protocol adapter error
 TNS-00505: Operation timed out
 Linux Error: 110: Connection timed out


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM