先看看 lsnrctl status 的输出信息
Services Summary
Service PLSExtProc has instance(s)
Instance PLSExtProc status UNKNOWN has handler(s) for this
service
Service catadb has instance(s)
Instance catadb status UNKNOWN has handler(s) for this
service
Instance catadb status READY has handler(s) for this service
Service catadbXDB has instance(s)
Instance catadb status READY has handler(s) for this service
The command completed successfully
这里提出两个问题
输出中显示的这些 service 是在哪里定义的?
为什么一个 service 会有两个 instance?
先来看第二个问题从oracle 版本后在listenerora文件中没有为数据库预先定义条目的时候instance 和 listener 可以自动的互相发现但是习惯上在listenerora文件中为每个数据库定义一个SID_DESC条目以便在需要的时候使用这就使服务catadb有两个实例:
一个状态是 UNKNOWN 的实例 是在 listenerora 文件中静态定义另一个状态是 READY 的实例是当数据库启动时 PMON进程自动把数据库注册到监听器在数据库启动后每一分钟注册一次在使用OEM等工具时需要有监听的静态定义
再来看看这些服务是怎么定义的oracle有三种监听方式
Database
提供对数据库实例的网络访问
PLSExtProc
PL/SQL 包访问操作系统可执行程序的方法
Executable
提供对操作系统可执行程序的网络访问
Service PLSExtProc 是在 listenerora 文件中为数据库实例缺省配置的允许PL/SQL包访问外部程序
Service catadb 也是在 listenerora 文件中配置是每个数据库连接使用的标准模式
Service catadbXDB 是Oracle i以后版本创建数据库时默认包含的XML DB特性提供httpftp等服务在初始化文spfile(或pfile)中定义