理解 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)中定义;