理解 oracle 的 “lsnrctl status”

tolywang發表於2007-12-20
先看看 lsnrctl status 的輸出資訊:

Services Summary...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this
service...
Service "catadb" has 2 instance(s).
Instance "catadb", status UNKNOWN, has 1 handler(s) for this
service...
Instance "catadb", status READY, has 1 handler(s) for this service...
Service "catadbXDB" has 1 instance(s).
Instance "catadb", status READY, has 1 handler(s) for this service...
The command completed successfully


這裡提出兩個問題:

1. 輸出中顯示的這些 service 是在哪裡定義的?
2. 為什麼一個 service 會有兩個 instance?

先來看第二個問題。從oracle 8.1 版本後,在listener.ora檔案中沒有為資料庫預先定義條目的時候,instance 和 listener 可以自動的互相發現。但是習慣上在listener.ora檔案中為每個資料庫定義一個SID_DESC條目以便在需要的時候使用。這就使服務“catadb”有兩個例項:

一個狀態是 UNKNOWN 的例項 是在 listener.ora 檔案中靜態定義;另一個狀態是 READY 的例項是當資料庫啟動時 PMON程式自動把資料庫註冊到監聽器。在資料庫啟動後每一分鐘註冊一次。在使用OEM等工具時需要有監聽的靜態定義。

再來看看這些服務是怎麼定義的。oracle有三種監聽方式:

Database

提供對資料庫例項的網路訪問

PLSExtProc

PL/SQL 包訪問作業系統可執行程式的方法

Executable

提供對作業系統可執行程式的網路訪問

Service "PLSExtProc" 是在 listener.ora 檔案中為資料庫例項預設配置的,允許PL/SQL包訪問外部程式;
Service "catadb" 也是在 listener.ora 檔案中配置,是每個資料庫連線使用的標準模式;
Service "catadbXDB" 是Oracle 9i以後版本建立資料庫時預設包含的XML DB特性,提供http、ftp等服務,在初始化文spfile(或pfile)中定義;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-85130/,如需轉載,請註明出處,否則將追究法律責任。

相關文章