理解 oracle 的 「lsnrctl status」數據庫
先看看 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 UNKNOWoracle
先看看 lsnrctl status 的輸出信息:工具
Services Summary...this
Service "PLSExtProc" has 1 instance(s).操作系統
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for thisblog
service...進程
Service "catadb" has 2 instance(s).get
Instance "catadb", status UNKNOWN, has 1 handler(s) for thistable
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有三種監聽方式:
提供對數據庫實例的網絡訪問
PLSExtProc
PL/SQL 包訪問操做系統可執行程序的方法
Executable
提供對操做系統可執行程序的網絡訪問
Service "PLSExtProc" 是在 listener.ora 文件中爲數據庫實例缺省配置的,容許PL/SQL包訪問外部程序;
Service "catadb" 也是在 listener.ora 文件中配置,是每一個數據庫鏈接使用的標準模式;
Service "catadbXDB" 是Oracle 9i之後版本建立數據庫時默認包含的XML DB特性,提供http、ftp等服務,在初始化文spfile(或pfile)中定義;