(轉)oracle 啟動監聽 報“監聽程序不支持服務” 解決


轉自 http://www.51testing.com/html/99/478599-842622.html

今天安裝了oracle后,啟動監聽,報錯如下:

  
啟動tnslsnr: 請稍候...
 
TNSLSNR for 32-bit  Windows: Version 10.2.0.1.0 - Production
寫入E:\oracle\product\10.2.0\db_2\network\log\listener.log的 日志信息
監聽: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=win2003-64Template)(PORT=1521)))
 
正在連接到 (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
LISTENER 的 STATUS
------------------------
別名                      LISTENER
版本                      TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
啟動日期                  25-3月 -2013 14:30:30
正常運行時間              0 天 0 小時 0 分 1 秒
跟蹤級別                  off
安全性                    ON: Local OS Authentication
SNMP                      OFF
監聽程序日志文件          E:\oracle\product\10.2.0\db_2\network\log\listener.log
監聽端點概要...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=win2003-64Template)(PORT=1521)))
監聽程序不支持服務
命令執行成功
 
服務端報監聽程序不支持服務,那就把焦點放在listener.ora文件上來。listener.ora是oracle服務器端的網絡配置文件,oracle根據它來配監聽服務。它接受遠程對 數據庫的申請,並轉交給oracle的服務進程。出現這個問題的可能原因是文件中沒有增加那個配置。
於是檢查了一下 E:\oracle\product\10.2.0\db_2\network\Admin 文件夾,發現果然是沒有listener.ora文件。難道我迷迷糊糊沒有建立監聽文件,直接去新建了本地net配置?先不管三七二十一,加上listener.ora。添加的內容如下,這個跟通過Net Configuration Assistant新建監聽文件的內容是一樣的:
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = E:\oracle\product\10.2.0\db_2)
      (PROGRAM = extproc)
    )   
  )
 
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = win2003-64Template)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )
順便復習一下listener.ora的作用: 在這個文件中一般我們會看到兩個參數
1)參數LISTENER  定義了 監聽“LISTENER” 的 監聽協議地址(listening protocol address)
格式例子:
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = CHINA-E24EA7C0A)(PORT = 1521))
    )
  )
 
2)參數SID_LIST_LISTENER 用於提供 監聽“LISTENER” 所能夠靜態支持的服務信息。
而且,如果使用EM(Oracle Enterprise Manager)去管理數據庫的話,這個參數是必須的。
 
格式例子:
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = c:\oracle\product\10.2.0\db_1)
      (PROGRAM = extproc)
    )
  )
上面看到PLSExtProc,PLSExtProc不是oracle實例,是pl/sql external procdure 的意思,就是在pl/sql中調用外部語句,如c,java寫的過程。這個里面的配置,是讓監聽器產生extproc agent,實際上就是一個extproc進程,用於為external procedure 服務。
 
添加listener.ora好了,再次啟動。好了,這次啟動成功,出現下面界面:
看到只啟動了PLSExtProc,而我們新建的實例orcl卻沒有起來。這樣其它計算機使用pl/sql連接的話,會出現“ ORA-12514: TNS: 監聽程序當前無法識別連接描述符中請求的服務”。當然原因還是在於listener.ora。一般新建監聽之后,listener.ora中會有相應的配置,但不知道為什么我在上面的操作中也新建了監聽,卻沒有自動生成。那我修改SID_LIST_LISTENER 手動添加以下內容:
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = E:\oracle\product\10.2.0\db_2)
      (PROGRAM = extproc)
    )
   (SID_DESC =
      (SID_NAME = orcl)
      (ORACLE_HOME = E:\oracle\product\10.2.0\db_2)
      (GLOBAL_DBNAME= orcl)
  )
)
 
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = win2003-64Template)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )
 
OK,再試一次。成功。
 
 
雖然可能是很簡單的問題,但是還是從中了解了listener.ora的作用,而且,側面反映出我裝oracle的時候心不在焉啦啦!!不過,若非心不在焉,怎么能學會在發現問題的時候怎么排查呢~以后再出現監聽方面的問題,就知道從何下手了。


免責聲明!

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



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