监听配置文件listener.ora中可以不必指定监听的服务名。但是,当数据库处于关闭状态下PMON进程没有启动,也就不会自动注册监听的实例名。
1 原来的listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /app/oracle/product/10.2.1/db_1)
(PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rhfour.fsti.com)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
2 修改后的listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /app/oracle/product/10.2.1/db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = test)
(ORACLE_HOME = /app/oracle/product/10.2.1/db_1)
(SID_NAME = test)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rhfour.fsti.com)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
3 主动跟被动的关系
3.1 Listener主动加载服务
原因是添加:
(SID_DESC =
(GLOBAL_DBNAME = test)
(ORACLE_HOME = /app/oracle/product/10.2.1/db_1)
(SID_NAME = test)
)
后,在使用lsnrctl start监听程序时会将listener的服务注册到进程监视器(pmon)中
3.2 Listener被动加载服务
如果没有该内容,那么由实例的pmon进程在listener中注册服务,对listener来讲,就是被动了。
这也就是为什么先启动监听后启动数据库能够正常连接的,反之不行的原因了。