环境:win2008,oracle11.2.0.1
问题描述:
今天开发的同时告诉我PLSQL 突然连不上数据库了,报了“ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务”的错误,并且告诉我已经将之前的监听停止,重新创建了一个监听,结果依然报错。在服务里查看OracleServiceOrcl,OracleServiceBug都在启动状态,奇怪的是Bug就可以连接,KM始终不行,重启KM的服务之后,依然报错。
解决办法:
1)通过lsnrctl> status 查看监听注册的状态,发现KM没有动态注册成功
2)lsnrctl >stop 停止监听,lsnrctl >start启动监听,依然报错
3)重启OracleServiceKM,还是报错
4)整个过程中,bug实例连接正常
5)在listener.ora中增加
(SID_DESC =
(global_dbname = KM)
(ORACLE_HOME = D:\app\CaiYH\product\11.2.0\dbhome_1)
(sid_name = KM)
)
5)重启监听后,status可以看见注册成功,通过plsql连接数据库报错ORA-01034和ORA-27101错误,此时OracleServiceKM启动正常。(在这里困扰了很长时间,任务OracleServiceKM启动了,数据库就已经启动,实时上不是,这时候的数据库并没有启动成功)
6)通过set oracle_sid =KM;sqlplus / as sysdba连接数据库
7)shutdown immediate 关闭数据库
8)startup重启数据库,连接正常
9)关闭bug实例,重启bug实例后,bug不能正常连接,报“ORA-12514”错误
10)修改listener.ora,增加bug注册信息
(SID_DESC =
(global_dbname = BUG)
(ORACLE_HOME = D:\app\CaiYH\product\11.2.0\dbhome_1)
(sid_name = BUG)
)
12)重启监听,重启数据库,连接正常
总结:
1)OracleServiceKM正常启动后,数据库启动不一定成功;
2)ORA-01034和ORA-27101应该是启动时共享内存分配的有问题,导致无法连接
3)单监听,多实例启动时,动态注册失败了,具体原因还得研究一下,全部改为静态注册后连接正常