今天同事问我一个问题。
他通过本机客户端以sysdba身份登陆oracle数据库后
用
shutdown immediate成功的关闭了数据库。
可是
startup
的时候,却提示
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
我登陆服务器,查看listener.ora配置文件后,发现配置的动态监听。
动态监听会时时反应数据库的状态,依赖pmon进程的动态注册,而不像静态监听需要加载listener.ora文件的sid_list_listener部分。
他之所以无法再启动数据库,是由于数据库关闭后,监听器已经注销了此数据库的服务信息,因此无法再进行任何操作。
解决的办法很容易,只需要在listener.ora文件中加入如下即可。
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_NAME=rose)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(SID_NAME=ROSE)
)
)
按照我的方法操作后,重启监听,可以顺利建立连接,启动数据库了。
可是在集群环境中,不建议采取静态监听,因为动态监听能够实现一些高级功能。
比如:两节点的集群,在一台实例出现故障的时候,动态监听能够自动的failover到其他健康实例。
而且由于动态监听能够时时感知服务器状态,还能够实现在客户端连接时,自动向负载最轻的实例建立连接的功能,实现了负载均衡的目的。
因此,在不修改listener.ora,而且还想启动数据库的时候,如果条件允许,可直接登录数据库服务器(比如:telnet 16.1.1.121),进行启动。
[本帖最后由 wei-xh 于 2010-5-2 21:31 编辑]
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22034023/viewspace-662231/,如需转载,请注明出处,否则将追究法律责任。